【问题标题】:How to find latitude longitude and timezone of any place?如何查找任何地方的纬度经度和时区?
【发布时间】:2013-05-13 06:29:28
【问题描述】:

我正在开发一个 iPhone 应用程序,我想在其中找到任何地方的纬度、经度和时区详细信息。

如何一次获取所有这些详细信息。

我们可以很容易地找到纬度和经度,但是我们怎样才能得到那个地方的确切时区呢?

有人可以指导我吗?

谢谢。

【问题讨论】:

    标签: iphone ios objective-c


    【解决方案1】:

    看起来你想要这个:-

    NSString *timeZoneName = [[NSTimeZone localTimeZone] name];
    

    这将为我返回 "Asia/Kolkata"

    如果您使用的是systemTimeZone,那么它代表系统(设备)本身使用的时区。 localTimeZone 返回一个代表应用程序当前默认时区的对象。

    使用此 API 获取数据并传递 lat 和 long 值。

    Api for getting timeZone

    【讨论】:

    • 是的,但我想找到世界上任何时区的名称。我怎样才能得到它?
    • @Nithin S:你得到答案了吗?
    • @NithinS 这是正确的答案,但没有明确解释。 Sunny 的意思是,您应该首先获取目标地点的 lat 和 lon,然后向该 google api 网站发送调用,该网站将返回时区(如示例中给出的链接中所示)。忘了提。某些 Google 服务对您可以拨打的电话次数和拨打电话的目的有限制。请务必阅读此特定 api 的详细信息。
    • 嘿抱歉。我明白你们说的。非常感谢您的建议。几天前我已经尝试过了,但问题是对于某些纬度和经度值,webservice 没有给出正确的时区值。所以我不太愿意使用网络服务。还有其他选择吗?
    • @NithinS 不,获取时区取决于位置,并且因国家/地区而异(例如夏令时)。所以你需要调用一个知道这一点的数据库。为什么你说它不起作用? google api 应该返回各种参数,您可以使用这些参数来计算您想要的任何东西。
    【解决方案2】:

    您可以使用 CoreLocation 获取经度和纬度。

    将此添加到您想要纬度和经度的 .h 类中。

    #import <UIKit/UIKit.h>
    #import <CoreLocation/CoreLocation.h>
    
    @interface CoreLocationViewController : UIViewController <CLLocationManagerDelegate> {
        CLLocationManager *locationManager;
    }
    @property (retain, nonatomic) CLLocationManager *locationManager;
    @end
    

    在你的 .m 文件中

    #import "CoreLocationViewController.h"
    
    @implementation CoreLocationViewController
    @synthesize locationManager; 
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view from its nib.
    
        [self setLocationManager:[[CLLocationManager alloc] init]];
        [locationManager setDelegate:self];
        [locationManager setDistanceFilter:kCLDistanceFilterNone]; 
        [locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters];
        [locationManager startUpdatingLocation];
    }
    
    - (void)locationManager:(CLLocationManager *)manager 
        didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    
     NSLog(@"My Latitude %f",newLocation.coordinate.latitude);
     NSLog(@"My Latitude %f",newLocation.coordinate.longitude);
    
    }
    

    对于当前的时区,您可以使用

    NSTimeZone* currentTimeZone = [NSTimeZone systemTimeZone];
    NSDateFormatter *dateFormatter = [dateFormat setTimeZone:currentTimeZone];
    NSDate *rightNow = [NSDate date];
    NSString *dateString = [dateFormatter  stringFromDate:rightNow];
    

    【讨论】:

    • Z:我想微调世界上任何地方的时区,而不是当前时区。或至少是世界上任何地方的时区名称。有什么办法可以找到吗?
    • dude 当你的应用程序运行时,比如说英国伦敦,它会给出那个特定地方的时区。
    • 或者您是否想要制作类似于他们在世界时钟中的时区查找器的东西?喜欢这个timeanddate.com/time/map
    • 哥们,我明白你在说什么。您正在谈论当前或当地时间。我想要的是任何地方的时区。假设我在印度,我想找到伦敦或任何其他地方的时区。希望你现在清楚我的问题。
    • 对,所以你想在你的应用程序中使用类似 timeanddate.com/time/map 的东西...?
    【解决方案3】:

    从 CLLocation 获取 NSTimeZone:https://github.com/Alterplay/APTimeZones 此实用程序在没有 3d 派对服务的设备上本地运行。

    【讨论】:

      【解决方案4】:

      您可以使用任何设备获取时区

      NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];

      【讨论】:

      • 或者如果你只想显示时区名称[destinationTimeZone name]
      • 是的。但是我怎样才能得到世界上任何地方的时区。
      • 好的,如果你有 lat,long 到那个地方,你将不得不使用一些网络服务。看看这个stackoverflow.com/questions/41504/…
      【解决方案5】:

      您可以从 CLLocationManager 获取位置,还可以查看 Geonames.org

      这是一项免费的网络服务,可让您从长/纬度获取大量信息

      他们还为 GeoNames Webservices 库提供免费(和开源)Java 客户端(还提供了其他语言的库:ruby、python、perl、lisp...)

      以下是您可以从 long/lat 获得的一些信息:(complete list of webservices here)

      查找最近的地址

      找到最近的交点

      查找附近的街道

      海拔时区

      【讨论】:

        【解决方案6】:

        如果你想知道在这种情况下使用 api,你可以使用这个 api,但在这个 api 中,你首先使用 CLLocationManager 类找到你的纬度和经度,然后输入这个 api。

        http://ws.geonames.org/timezone?lat=#{lat}&lng=#{lng}

        并阅读谷歌文档以获取更多 api.....

        https://developers.google.com/maps/documentation/timezone/

        希望对你有帮助

        【讨论】:

          【解决方案7】:

          iOS 5 添加了 CLGeocoder 类,它可以进行您想要的查找。它以异步方式运行(我假设它正在查询某处的服务器),但是您给它一个位置,它会为您提供大量信息,包括时区。这个问题是针对 Objective C 提出的,但我将使用 Swift 来回答。由于 API 相同,Objective C 版本应该很容易派生。

          这是在英国寻找地点的 Swift Playground sn-p:

          import CoreLocation
          
          let location = CLLocation(latitude: 51, longitude: -0.1)
          let geocoder = CLGeocoder()
          geocoder.reverseGeocodeLocation(location) { (placemarks, error) in
              if let error = error {
                  print(error.localizedDescription)
                  return
              }
              
              if let placemarks = placemarks {
                  for placemark in placemarks {
                      print(placemark.name ?? "no name")
                      print(placemark.locality ?? "no city")
                      print(placemark.administrativeArea ?? "no state/province")
                      print(placemark.country ?? "no country")
                      print(placemark.timeZone?.abbreviation() ?? "no time zone")
                  }
              }
          }
          

          这是输出:

          1234 A Street Address
          Haywards Heath
          England
          United Kingdom
          GMT+1
          

          我故意更改了上面输出中的地址行,以便垃圾邮件机器人不会抓取它并开始征求我任意选择坐标的可怜的灵魂。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-04-18
            • 2020-11-22
            • 2010-09-07
            • 2010-09-07
            • 1970-01-01
            • 2014-06-01
            • 1970-01-01
            相关资源
            最近更新 更多