gpt4 book ai didi

ios - 在 iOS 中使用 CLGeocoder 进行转发地理编码,对于某些位置的位置返回 null

转载 作者:行者123 更新时间:2023-11-28 22:29:36 24 4
gpt4 key购买 nike

我正在尝试对字符串进行正向地理编码,它通常工作正常,但对于某些位置,如“温哥华”,它会为生成的地标的位置返回 null,但它会返回国家、省份、和坐标。我什至尝试对从正向地理编码中找到的坐标进行反向地理编码,虽然没有失败,但它返回了一个不同的位置,“穆迪港”。

最奇怪的是,我尝试通过 Apple 的 Geocoder 示例代码运行 Vancouver,它工作得很好。该地点不会出现空值。

另外,我正在测试它,它突然开始工作,然后我再次检查它就停止工作了。给了什么?

这是我的代码。不过,我怀疑它会有多大帮助。

-(BOOL) textFieldShouldReturn:(UITextField *)textField {
CLGeocoder *geocoder = [[CLGeocoder alloc] init];

[geocoder geocodeAddressString:textField.text completionHandler:^(NSArray *placemarks, NSError *error) {
self.placemark = [[MKPlacemark alloc] initWithPlacemark:[placemarks objectAtIndex:0]];
if (error) {
NSLog(@"Geocode error %@",error.debugDescription);
[self alertForFailedGeocode];
return;
}
if (self.placemark.locality == nil || self.placemark.country == nil) {
//eg if you search "Canada" you'll get a nil locality, and the coordinate is in the middle of nowhere.

if (self.placemark.location) {
[geocoder reverseGeocodeLocation:self.placemark.location completionHandler:^(NSArray *placemarks, NSError *error) {
if (error) {
[self alertForFailedGeocode];
return;
}

self.placemark = [placemarks objectAtIndex:0];
[self alertForConfirmGeocode:[self locationStringForPlacemark:self.placemark]];
self.location = self.placemark.location;
self.isUsingCurrentLocation = FALSE;
return;
}];
return;
}
else {
NSLog(@"Geocode failed BECAUSE nil locality or country or both");
[self alertForFailedGeocode];
return;
}
}

NSLog(@"%d places found",placemarks.count);
[self alertForConfirmGeocode:[self locationStringForPlacemark:self.placemark]];
self.location = self.placemark.location;
self.isUsingCurrentLocation = FALSE;
}];
return YES;

最佳答案

地理编码操作不在设备上处理,需要互联网连接,因为它们发生在云端。它有利也有弊。

优点:

  1. Save your device resources, as the conversion is happening on Cloud.
  2. Apple can update their APIs on cloud as technology improves and that can give our apps better performance without even have to vchange anything in code.

缺点:

You would need a solid internet connection to access geocoding APIs.

现在来看你的情况,我猜是由于互联网连接的原因,你无法完全使用地理编码 API。可能这就是为什么你没有得到本地的原因。

那么问题是如何获取国家、省份和坐标?

Well as it happens, the forward geocoder can get you the high level information such as country, region etc based on local device information but it requires internet connection to get more information such as locality etc.

关于ios - 在 iOS 中使用 CLGeocoder 进行转发地理编码,对于某些位置的位置返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17849533/

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