在我的网络应用中,我有一个包含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);
});
}
答案 0 :(得分:2)
地理编码API的反向地理编码功能,如documentation:
中所述执行相反的过程,将地图上的位置转换为人类可读的地址,称为反向地理编码。
因此,不在湖中间返回地址的API正在按预期工作。同样,Places API专为查找商家和兴趣点而设计,如Google公共问题跟踪器中bug所述。
也就是说,有一个long-standing feature request可以将功能添加到地理编码API,类似于maps.google.com返回地理要素名称,例如"北大西洋"单击地图时。如果/何时实施此功能,则没有时间表,但您可以解决问题,以表示对该功能更感兴趣并接收更新。