【问题标题】:Fetching place from location从位置获取地点
【发布时间】:2014-01-21 20:36:45
【问题描述】:

如果我知道某个位置的经度和纬度,我可以使用反向 geocoding 来获取有关位置的基本信息(例如地址),但我想要更多信息。我将 Places API 用于搜索栏,它会返回大量数据,但我无法从纬度和经度中获取位置。

我发现places API 支持place details,但为此我需要一个我无法从任何地方获得的参考。

注意:我是用 dart 编写的,但 dart api 只是 javascript 的一个包装器,这就是为什么我将其标记为两者。

【问题讨论】:

  • 你能从一个地址得到一个地方吗?如果是这样,那么先从纬度/经度获取地址...
  • 我已经考虑过了,但似乎效率低下。必须有更好的方法。
  • 嗯。我可以看到你的网名很合适...

标签: javascript dart google-places-api google-geocoding-api


【解决方案1】:

PlaceResult 对象包含一个reference 属性,该属性应在提供给PlacesService.getDetailsPlaceDetailsRequest 中使用。

【讨论】:

  • 我没有 PlaceResult 开始,我只有 LatLng 对象。
  • 您首先需要使用PlaceService 执行nearbySearchradarSearch
  • 我可以指望一个地方的引用是静态的吗?
  • 我认为通过看到the Place details example,引用总是相同的。
  • 刚查了文档,我第一次肯定错过了。不能保证同一个地方的引用是相同的,但是同一个引用应该总是返回同一个地方。这是一种单向保证。
【解决方案2】:

我最终选择了PlaceService.textSearch 路线。这并不像我预期的那么脏。我最终得到的函数如下所示:

void placeFromLocation(LatLng location, void callback(PlaceResult)) {
    GeocoderRequest geocoderRequest = new GeocoderRequest()
        ..location = location;
    geocoder.geocode(geocoderRequest, (List<GeocoderResult> results, GeocoderStatus status) {
        if(status == GeocoderStatus.OK) {
            TextSearchRequest request = new TextSearchRequest()
                ..query = results[0].formattedAddress
                ..location = results[0].geometry.location
                ..radius = 40;
            placeService.textSearch(request, (List<PlaceResult> results, PlacesServiceStatus status) {
                if(status == PlacesServiceStatus.OK) {
                    callback(results[0]);
                }else{
                    print("Not place found");
                }
            });
        }else{
            print("Error geocoding address");
        }
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多