10

当我运行我正在构建的 gps 应用程序时,我总是随机得到这个。它不会每次都发生,并且传入的坐标始终有效(我 nslog 它们)。这些地方有文档吗?

编辑:

CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(locManager.location.coordinate.latitude, locManager.location.coordinate.longitude);
geocoder1 = [[MKReverseGeocoder alloc] initWithCoordinate:coord];
geocoder1.delegate = self;
[geocoder1 start];

然后大约有一半的时间返回错误。如果出现错误,我尝试释放并重新分配地理编码器,但这没有帮助。唯一要做的就是重新启动应用程序。

4

6 回答 6

11

在 MapKit 框架的“MKTypes.h”中,定义了以下内容:

Map Kit 框架的错误常量。

enum MKErrorCode {
   MKErrorUnknown = 1,
   MKErrorServerFailure,
   MKErrorLoadingThrottled,
   MKErrorPlacemarkNotFound,
};

...

MKErrorPlacemarkNotFound

找不到指定的地标。

这听起来像您在代码中引用了一些未知的地标?或者可能是 Google 没有您要经过的位置的名称 - 无论坐标是否有效。

于 2010-10-13T18:56:49.457 回答
5

我最近遇到并解决了这个问题。就我而言,当 Apple Map 找不到任何查询结果时,它有时会抛出这个“MKErrorDomain = 4”错误。所以我最终只是将其视为“未找到结果”。

发现这一点很费劲,MapKit 需要一个更好的错误处理系统。

于 2013-11-09T00:47:52.240 回答
3

我反复遇到这个错误,无法弄清楚如何让它停止;但我终于找到了一个很好的解决整个问题的方法,只需要多做一点工作:根本不要使用苹果的MKReverseGeocoder——而是直接调用谷歌的反向地理编码 API(这显然是同一个服务这MKReverseGeocoder在幕后)。您可以取回 JSON 或 XML(您的偏好),然后您必须对其进行解析,但这并不难。

例如,由于我的应用程序使用的是ASIHTTPRequest,这就是它的样子(尽管这也很容易使用 Apple 的原生 API,例如NSURLConnection):

#pragma mark -
#pragma mark CLLocationManagerDelegate

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
           fromLocation:(CLLocation *)oldLocation
{
    // Be careful: My code is passing sensor=true, because I got the lat/long
    // from the iPhone's location services, but if you are passing in a lat/long
    // that was obtained by some other means, you must pass sensor=false.
    NSString* urlStr = [NSString stringWithFormat:
      @"http://maps.googleapis.com/maps/api/geocode/xml?latlng=%f,%f&sensor=true",
      newLocation.coordinate.latitude, newLocation.coordinate.longitude];
    NSURL* url = [NSURL URLWithString:urlStr];
    self.reverseGeocoderRequest = [ASIHTTPRequest requestWithURL:url];
    self.reverseGeocoderRequest.delegate = self;
    [self.reverseGeocoderRequest startAsynchronous];
}

顺便说一句,谷歌的 API 有规则,就像苹果的一样。确保您阅读了文档,尤其是关于配额的文档。

于 2011-01-28T22:39:35.817 回答
2

我遇到了同样的事情(完全相同的代码有时会随机失败),我想我已经找到了答案。来自Apple 的开发人员文档:“每个 Map Kit 应用程序的反向地理编码能力都是有限的,因此谨慎使用反向地理编码请求对您有利。”

所以我的理论是,我们正在受到速率限制......因为没有其他变量正在改变(即我的代码没有改变,我在模拟器上运行它,所以设备的位置没有改变,等等.) 我认为这一定是唯一剩下的原因。

于 2011-01-27T21:45:52.550 回答
1

我刚刚完成了对这个问题的大量研究,它似乎不在我们的控制范围内。我检查了开发者论坛以及 Stack 和其他地方的所有内容,除了使用不同的服务之外,没有人有解决方案。在https://devforums.apple.com/message/154126上有一个非常好的主题。

有些人在一段时间后发现错误,我只是发现它出现了一段时间然后又回来了。我查看了“当前地址”示例代码,但看不出我可能搞砸了。我运行了示例代码,果然,这是 NSLogging 错误而不是返回位置。

这个链接有一些使用谷歌反向地理编码器的代码:http ://www.iphonedevsdk.com/forum/iphone-sdk-development/31883-pbrequestererrordomain-errors-reverse-geocoding.html#post155793

于 2010-10-24T00:55:14.940 回答
0

实际上,我也遇到了这个问题。代码非常紧凑

//1. 向地图询问当前坐标

CLLocationCoordinate2D 用户位置;

userLocation.latitude = [[_theMapView.userLocation location] 坐标].latitude; userLocation.longitude = [[_theMapView.userLocation location] 坐标].longitude;

NSLog(@"%f, %f",userLocation.latitude,userLocation.longitude);

//2。反向地理编码坐标

MKReverseGeocoder *reverseGeocoder = [[MKReverseGeocoder alloc] initWithCoordinate:userLocation];

[reverseGeocoder setDelegate:self];

[reverseGeocoder 开始];

然后简单地 NSLog 失败委托方法中的错误。它第一次或两次有效,然后停止工作

于 2010-10-18T20:21:56.700 回答