【发布时间】:2011-12-20 05:41:32
【问题描述】:
我正在使用 Google 获取地址以获取其经纬度。我运行了大约 60-65 个地址。每次我都会随机获得 5 或 6 个返回 0,0 坐标对。
每次失败的索引都是不同的,所以我确定这不是地址问题。
这是我用来返回经纬度的代码
可能是我从 for 循环内部调用此方法吗?也许如此快速地一遍又一遍地调用它有时会导致它打嗝?
-(CLLocationCoordinate2D)addressLocation:(NSString*)_address city:(NSString*)_city state:(NSString*)_state {
NSString *temp = [NSString stringWithFormat:@"%@, %@, %@", _address, _city, _state];
NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@&output=csv", [temp stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSError* error = nil;
NSString *locationString = [NSString stringWithContentsOfURL:[NSURL URLWithString:urlString ] encoding:NSASCIIStringEncoding error:&error];
NSArray *listItems = [locationString componentsSeparatedByString:@","];
double latitude = 0.0;
double longitude = 0.0;
if([listItems count] >= 4 && [[listItems objectAtIndex:0] isEqualToString:@"200"]) {
latitude = [[listItems objectAtIndex:2] doubleValue];
longitude = [[listItems objectAtIndex:3] doubleValue];
}
else {
NSLog(@"Error: %@", [error description]);;
}
CLLocationCoordinate2D location;
location.latitude = latitude;
location.longitude = longitude;
return location;
}
编辑
如果其他人遇到此问题,我暂时找到了解决方法。
一旦找到每个地址的经纬度,我就会浏览我的列表。
如果 Google 查询返回错误,我会将该地址添加到保存数组中。 意味着我通过了 Firoze 提到的速率限制。
在完成初始运行后,我遍历保存数组并找到每个地址的位置。
我确信有一个更简洁的实现方式,但对于任何无法获得营业执照的人来说,这是一种被黑的方式。
我希望这会有所帮助, 科里
【问题讨论】:
-
Google 对该服务的使用方式有严格的限制,并且会不断更新其算法以检测滥用情况并暂时(或永久)阻止对其的访问。您可以尝试降低系统速度,但明天可能会停止工作。也许您没有将服务用于其预期目的,应该寻找其他地址查找服务。
-
建议进行哪些更改?也许检测到您已受到速率限制,然后等待几秒钟,然后继续进行查找。或者,如果您指的是建议的替代服务,那么“Google Maps API For Business”服务可能非常适合您。或者您可以将 openstreetmap.org 数据库下载到您自己的服务器,然后执行您自己的地理编码。
-
你会推荐雅虎地图服务吗?我觉得谷歌更稳定一些。
-
我认为 Yahoo 和 免费 Google 地图服务都不可靠。他们是大钱坑(地图数据非常昂贵)。两家公司都可以(并且经常这样做)更改或删除免费服务的功能。如果你想要可靠,你真的需要为数据付费,或者使用 openstreetmap.org。
标签: objective-c ios xcode google-maps geolocation