gpt4 book ai didi

iphone - 给定一组地理坐标,获取一个友好的位置名称?

转载 作者:行者123 更新时间:2023-12-03 19:52:10 24 4
gpt4 key购买 nike

对于一组给定的地理坐标,是否有可能获得最接近的有意义的地标(例如街道交叉口)的人性化文本描述,例如通过 Google map 或其他第三方等网络服务?我正在使用 MapKit, 但我怀疑它有内置的东西 Turns out it does.

例如,我正在寻找最近的街道交叉口(实际上这是理想的)或任何类型的“地名”。诸如此类:

E Hastings St and Main St
128 W Cordova St
PNE Fairgrounds

最佳答案

所以我做了一个项目,遇到了这个问题...你可以引用CLPlacemark class reference在苹果开发者网页中。

这是我使用它的方式,我认为您还必须将 corelocation 库添加到项目中,就像我所做的那样。

#import <CoreLocation/CoreLocation.h>

现在在.h file:

添加 CLLocation 委托(delegate):<CLLocationManagerDelegate>

然后添加以下实例变量:

CLLocationManager *locationManager;
CLLocation *currentLocation;

现在在.m file:

-(void) viewDidLoad{
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move, location is updated
locationManager.desiredAccuracy = kCLLocationAccuracyBest; // get best current locaton coords
locationManager.headingFilter = 1;
[locationManager startUpdatingLocation];
[locationManager startUpdatingHeading];
}

现在实现 CLLocationManager viewDidLoad之后的委托(delegate)方法方法,或之前,无论您喜欢哪种:

#pragma mark CLLocationManager Delegate
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
currentLocation = [locations objectAtIndex:0];
[locationManager stopUpdatingLocation];
NSLog(@"Detected Location : %f, %f", currentLocation.coordinate.latitude, currentLocation.coordinate.longitude);
CLGeocoder *geocoder = [[CLGeocoder alloc] init] ;
[geocoder reverseGeocodeLocation:currentLocation
completionHandler:^(NSArray *placemarks, NSError *error) {
if (error){
NSLog(@"Geocode failed with error: %@", error);
return;
}
CLPlacemark *placemark = [placemarks objectAtIndex:0];
NSLog(@"City = %@ : State = %@ : Country = %@ : Zip Code = %@", placemark.locality, placemark.administrativeArea, placemark.ISOcountryCode, placemark.postalCode);
}];
}

运行代码并确保如果您使用 iOS 模拟器,请务必通过单击控制台输出屏幕上方的箭头按钮来模拟位置。

Simulate a location

它仅在您构建并运行项目后才会显示。

希望这对您有帮助:)

这是我得到的输出:

2013-08-02 20:39:46.935 PowerOneApp[3449:c07] Detected Location : 37.785834, -122.406417
2013-08-02 20:39:49.773 PowerOneApp[3449:c07] City = San Francisco : State = California : Country = US : Zip Code = 94115

编辑抱歉,当我写这个答案时,我意识到您想要更多精确的坐标。

这里:

#pragma mark CLLocationManager Delegate
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
currentLocation = [locations objectAtIndex:0];
[locationManager stopUpdatingLocation];
NSLog(@"Detected Location : %f, %f", currentLocation.coordinate.latitude, currentLocation.coordinate.longitude);
CLGeocoder *geocoder = [[CLGeocoder alloc] init] ;
[geocoder reverseGeocodeLocation:currentLocation
completionHandler:^(NSArray *placemarks, NSError *error) {
if (error){
NSLog(@"Geocode failed with error: %@", error);
return;
}
CLPlacemark *placemark = [placemarks objectAtIndex:0];
NSLog(@"%@", placemark.addressDictionary);
NSLog(@"%@", [placemark.addressDictionary valueForKey:@"Street"]);
}];
}

输出如下:

2013-08-02 20:44:26.052 PowerOneApp[3531:c07] Detected Location : 37.785834, -122.406417
2013-08-02 20:44:26.340 PowerOneApp[3531:c07] {
City = "San Francisco";
Country = "United States";
CountryCode = US;
FormattedAddressLines = (
"Apple Store, San Francisco",
"1800 Ellis St",
"San Francisco, CA 94115-4004",
"United States"
);
Name = "Apple Store, San Francisco";
PostCodeExtension = 4004;
State = California;
Street = "1800 Ellis St";
SubAdministrativeArea = "San Francisco";
SubLocality = "Union Square";
SubThoroughfare = 1800;
Thoroughfare = "Ellis St";
ZIP = 94115;
}
2013-08-02 20:44:26.340 PowerOneApp[3531:c07] 1800 Ellis St

如您所见,有一个名为 addressDictionary 的属性返回 CLPlacemark 类拥有的所有属性。所以在这里,如果您熟悉 NSDictionary对象,我只是先输出整个字典,然后指定我想要记录的值。

希望这对您的确切问题有所帮助:)

关于iphone - 给定一组地理坐标,获取一个友好的位置名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18008329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com