谷歌地图反向地理编码的自然地标

时间:2018-04-11 02:12:19

标签: google-maps-api-3

在我的网络应用中,我有一个包含Google地图的页面。在地图上,我希望用户能够点击世界上的任意位置,获取点击事件返回的纬度/经度,并使用Google Maps API地理编码服务反向地理编码,如here所示,返回任何内容谷歌有关该位置的信息。就城镇,街道和国家而言;这种方法效果很好,但它对海洋,河流等自然地标不起作用。如果你试图在湖中间反转地理编码一个纬度和长,它将返回像湖的哪个县或州的信息位于湖的名称而不是湖的名称,这在我的情况下会更有帮助。更明确的是,如果我在密歇根湖中间给出一个纬度/经度,反向地理编码将返回:"美国密歇根州梅森县"而不是"密歇根湖"。但是,如果我在https://www.google.com/maps点击密歇根湖中间的某个位置,它将创建一个标记为"密歇根湖"的标记。

我是否应该使用Google地图api服务,除了地理编码服务将返回密歇根湖而不是"美国密歇根州梅森县"如果我给它一个纬度/长。或者是否有其他方式可以获得"密歇根湖"从点击事件返回而不必传入Lat / Long。 Places服务似乎区分了" natural"和政治"地方(家庭住址,商业地址,国家,城市等)似乎都属于"政治和#34;类别。所以我想知道是否有一些参数我可以从一个返回Places对象的click事件传递给Places服务,因为Geocode服务似乎没有区分" political"和#34;自然"地方。

以下是我到目前为止使用GeoCode服务编写的代码:

const initMap = () => {
  var map = new google.maps.Map(document.getElementById('location-map'), {
    zoom: 3,
    center: {lat: .433014, lng: 0.752724 }
  });

  var marker = new google.maps.Marker({
    map: map,
    anchorPoint: new google.maps.Point(0, -29)
  });

  var geocoder = new google.maps.Geocoder;
  var infowindow = new google.maps.InfoWindow;

  function geocodeLatLng(latLng) {
    geocoder.geocode({'location': latLng}, function(results, status) {
      console.log(results);
      if (status === 'OK') {
        if (results[0]) {

          map.setZoom(10);
          var marker = new google.maps.Marker({
            position: latLng,
            map: map
          });
          infowindow.setContent(results[0].formatted_address);
          infowindow.open(map, marker);
        }
      }
    })
  }

  map.addListener('click', function(e) {
    geocodeLatLng(e.latLng);
  });
}

1 个答案:

答案 0 :(得分:2)

地理编码API的反向地理编码功能,如documentation

中所述
  

执行相反的过程,将地图上的位置转换为人类可读的地址,称为反向地理编码。

因此,不在湖中间返回地址的API正在按预期工作。同样,Places API专为查找商家和兴趣点而设计,如Google公共问题跟踪器中bug所述。

也就是说,有一个long-standing feature request可以将功能添加到地理编码API,类似于maps.google.com返回地理要素名称,例如"北大西洋"单击地图时。如果/何时实施此功能,则没有时间表,但您可以解决问题,以表示对该功能更感兴趣并接收更新。