如何从地址获取纬度/经度?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

如何使用iPhoneSDK 3.x从用户输入的完整地址(街道、城市等)获取纬度和经度?

提问于
用户回答回答于

下面是一个更新的、更紧凑的Unfreed代码版本,它使用了最新的v3API:

- (CLLocationCoordinate2D) geoCodeUsingAddress:(NSString *)address
{
    double latitude = 0, longitude = 0;
    NSString *esc_addr =  [address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSString *req = [NSString stringWithFormat:@"http://maps.google.com/maps/api/geocode/json?sensor=false&address=%@", esc_addr];
    NSString *result = [NSString stringWithContentsOfURL:[NSURL URLWithString:req] encoding:NSUTF8StringEncoding error:NULL];
    if (result) {
        NSScanner *scanner = [NSScanner scannerWithString:result];
        if ([scanner scanUpToString:@"\"lat\" :" intoString:nil] && [scanner scanString:@"\"lat\" :" intoString:nil]) {
            [scanner scanDouble:&latitude];
            if ([scanner scanUpToString:@"\"lng\" :" intoString:nil] && [scanner scanString:@"\"lng\" :" intoString:nil]) {
                [scanner scanDouble:&longitude];
            }
        }
    }
    CLLocationCoordinate2D center;
    center.latitude = latitude;
    center.longitude = longitude;
    return center;
}

它假设“位置”的坐标优先,例如“viewport”的坐标,因为它只需要在“lng”和“lat”键下找到的第一个弦。如果担心这里使用的这种简单的扫描技术,可以随意使用适当的JSON扫描仪(例如SBJSON)。

用户回答回答于

可以使用谷歌地理编码。它就像通过HTTP获取数据并解析它一样简单(它可以返回JSONKML、XML、CSV)。

扫码关注云+社区