【问题标题】:Finding lat and long returning 0,0查找经纬度返回 0,0
【发布时间】: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


【解决方案1】:

您应该检查 locationString 是否为零。如果是这样,请查看错误。我的猜测是您的通话受到了速率限制。

您可能应该查看 Google 对此服务的服务条款。

【讨论】:

  • 我相信他们受到了速率限制,这是否存在?我有一个地址列表,我需要确定离我最近的地址。我没有看到任何其他方法可以找到他们的位置坐标来确定距离。
  • 嗯,这取决于你的应用程序做什么。这更多的是商业问题而不是技术问题。我确信 Google 可以帮助您确定您的特定用例所需的许可/协议。在此处查看论坛:code.google.com/apis/maps/documentation/premier
  • 我看了看,但恐怕 17,000 美元的营业执照超出预算。您对 Firoze 的其他服务有什么建议吗?
  • 好吧,您假设您甚至需要营业执照。并非所有应用程序都这样做,但这些人在帮助您解决问题方面确实很有帮助。他们比这里的任何人都更了解他们的所有条款和条件。我们使用谷歌,所以我不能评论其他服务。也许这里的其他人可以。但同样,你现在并不是真的在问一个编程问题。
  • 感谢您的帮助,我正在等待他们的消息。希望我们能够解决一些问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多