【问题标题】:Google Maps SDK iOS Getting co-ordinates from a user inputGoogle Maps SDK iOS 从用户输入中获取坐标
【发布时间】:2015-03-20 13:05:37
【问题描述】:

我希望向我的应用程序添加功能,用户可以在其中输入位置名称,例如“伦敦”或“纽约”,我希望它可以在谷歌地图上搜索坐标。类似于谷歌地图应用中使用的方法。

获得坐标后,我可以添加标记 我只是不确定如何搜索用户输入以查找地点纬度和经度。

任何帮助,

谢谢

【问题讨论】:

    标签: ios objective-c google-maps location latitude-longitude


    【解决方案1】:

    为此,您需要使用 Google Geocoding 。它就像通过 HTTP 获取数据并解析它一样简单(它可以返回 JSON ) 检查这个apihttps://developers.google.com/maps/documentation/geocoding/?csw=1#GeocodingRequests

    这样试试

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

    【讨论】:

    • 这让我很接近!我得到了一些奇怪的输出,所以我需要调试它,但我觉得它很接近。谢谢!
    • 谢谢,我找到了问题。它很好地得到了纬度和经度。并将它们存储在双精度值中。但是当我调用 newLocation.latitude 或 newLocation.longitude (从这个方法新创建的)时,它会以 inf 或奇怪的形式出现。有什么想法吗?
    • 以这种方式测试它很好,但我会提醒您不要像上图所示同步执行此操作。它将阻塞主线程直到它返回。
    • 而且由于服务返回的是 JSON,你应该使用 NSJSONSerialization 来获取数据而不是扫描字符串。
    • 我明白了。我在谷歌的文档上看到了。似乎有点难以理解。我不了解 JSON 可能无济于事
    【解决方案2】:

    您使用的是 GoogleMaps,所以我建议您使用 googleAPI 进行地理编码。

    例子

    https://maps.googleapis.com/maps/api/geocode/json?address=London&key=API_KEY

    文档:

    https://developers.google.com/maps/documentation/geocoding/#GeocodingRequests

    希望对你有帮助......

    【讨论】:

      【解决方案3】:

      将位置转换为纬度/经度坐标的过程称为地理编码。实际上有数十个提供此信息的提供者,一些免费的其他付费的。只需搜索“地理编码 API”即可。

      我最喜欢的一个是ArcGIS。只要您不将结果存储在数据库中,它就提供免费的地理编码服务。

      【讨论】:

        【解决方案4】:

        如果您不习惯使用 Google,您可以直接从 MapKit 使用 CLGeocoder。 它的方法geocodeAddressString:completionHandler: 完全符合您的要求。

        【讨论】:

        • 此方法内置于 MapKit 中。它使用 Apple 的服务器而不是 Google 的服务器来确定坐标。
        • 即使在使用 Google 的地图时,您也可以使用 CLGeocoder。根据 Apple 的说法:“您可以结合或独立于 Map Kit 框架的类使用地理编码器对象。”
        • @picciano 是的,没错。但是,CLGeocoder 使用 Apple 的地图服务来确定位置,它们可能与 Google 找到的位置不同。
        猜你喜欢
        • 1970-01-01
        • 2015-01-02
        • 2014-01-24
        • 1970-01-01
        • 2013-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多