如何查找任何地方的纬度经度和时区?

时间:2013-05-13 06:29:28

标签: iphone ios objective-c

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

我如何一次获得所有这些细节。

我们可以轻松找到纬度和经度,但我们如何才能获得该地点的确切时区?

有人可以指导我吗?

感谢。

7 个答案:

答案 0 :(得分:3)

看起来你想要这个: -

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

为我返回"Asia/Kolkata"

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

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

Api for getting timeZone

答案 1 :(得分:1)

您可以使用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);

}

对于当前的TimeZone,您可以使用

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

您可以使用

从任何设备获取时区

NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];

答案 4 :(得分:0)

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

这是一个免费的网络服务,允许您从长/ lat获取大量信息

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

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

查找最近的地址

查找最近的交点

查找附近的街道

海拔高度时区

答案 5 :(得分:0)

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

http://ws.geonames.org/timezone?lat=# {LAT}&安培; LNG =#{LNG}

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

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

我希望它可以帮到你

答案 6 :(得分:0)

iOS 5添加了CLGeocoder类,该类可以执行所需的查找。它异步运行(我想它是在某处查询服务器),但是您为其指定了位置,并且为您提供了大量信息,包括时区。这个问题是针对Objective C的,但我将使用Swift进行回答。由于API相同,因此Objective C版本应该易于导出。

这是一个Swift Playground片段,用于查找英国的位置:

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

我有意更改了上面输出中的地址行,以防止垃圾邮件发送者刮擦它,并开始征求我任意选择坐标的可怜灵魂。