Google 个地方 API 中的地名出错
Place name getting wrong in Google Places API
我想找出地名,为此我所做的是:首先在 google 地图上单击我从 Geocoder 中找到 place_id。现在 place_id 我正在传递到 Places API 的函数 PlacesService。现在从那里我收到成功请求,它正在返回地点详细信息,但它的名称不是正确的名称。我得到的是街道名称。
下面是我的代码:
<script>
function initMap() {
var myLatlng = new google.maps.LatLng(37.3132072, -121.9334579);
var myOptions = {
zoom: 10,
center: myLatlng
}
var map = new google.maps.Map(document.getElementById("map"),
myOptions);
var geocoder = new google.maps.Geocoder();
google.maps.event
.addListener(
map,
'click',
function(event) {
geocoder
.geocode({
'latLng': event.latLng
},
function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
getname(results[0].place_id);
}
}
});
});
function getname(place_id) {
var placesService = new google.maps.places.PlacesService(map);
placesService.getDetails({
placeId: place_id
}, function(results, status) {
alert("NAME: " + results.name);
});
}
}
</script>
当我运行这段代码时,我得到的结果如下:
不是获取名称(Walmart Supercenter),而是获取街道地址(5095 Almaden Expy)
如果你点击地图上的 "Icons" 地点,你会得到一个 IconMouseEvent(基本上是一个普通的 MouseEvent 添加了一个 placeId
属性).
对请求使用 placeId
而不是地理编码器的 return 值。
google.maps.event.addListener(map,'click', function(event) {
if (event.placeId) {
getname(event.placeId)
} else {
geocoder.geocode({'latLng': event.latLng},
function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
getname(results[0].place_id);
}
}
});
}
});
代码片段:
function initMap() {
var myLatlng = new google.maps.LatLng(37.329343, -121.863077);
var myOptions = {
zoom: 15,
center: myLatlng
}
var map = new google.maps.Map(document.getElementById("map"),
myOptions);
var geocoder = new google.maps.Geocoder();
google.maps.event
.addListener(
map,
'click',
function(event) {
if (event.placeId) {
getname(event.placeId)
} else {
geocoder
.geocode({
'latLng': event.latLng
},
function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
getname(results[0].place_id);
}
}
});
}
});
function getname(place_id) {
var placesService = new google.maps.places.PlacesService(map);
placesService.getDetails({
placeId: place_id
}, function(results, status) {
alert("NAME: " + results.name);
});
}
}
google.maps.event.addDomListener(window, "load", initMap);
html,
body,
#map {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=places"></script>
<div id="map"></div>
我想找出地名,为此我所做的是:首先在 google 地图上单击我从 Geocoder 中找到 place_id。现在 place_id 我正在传递到 Places API 的函数 PlacesService。现在从那里我收到成功请求,它正在返回地点详细信息,但它的名称不是正确的名称。我得到的是街道名称。
下面是我的代码:
<script>
function initMap() {
var myLatlng = new google.maps.LatLng(37.3132072, -121.9334579);
var myOptions = {
zoom: 10,
center: myLatlng
}
var map = new google.maps.Map(document.getElementById("map"),
myOptions);
var geocoder = new google.maps.Geocoder();
google.maps.event
.addListener(
map,
'click',
function(event) {
geocoder
.geocode({
'latLng': event.latLng
},
function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
getname(results[0].place_id);
}
}
});
});
function getname(place_id) {
var placesService = new google.maps.places.PlacesService(map);
placesService.getDetails({
placeId: place_id
}, function(results, status) {
alert("NAME: " + results.name);
});
}
}
</script>
当我运行这段代码时,我得到的结果如下:
不是获取名称(Walmart Supercenter),而是获取街道地址(5095 Almaden Expy)
如果你点击地图上的 "Icons" 地点,你会得到一个 IconMouseEvent(基本上是一个普通的 MouseEvent 添加了一个 placeId
属性).
对请求使用 placeId
而不是地理编码器的 return 值。
google.maps.event.addListener(map,'click', function(event) {
if (event.placeId) {
getname(event.placeId)
} else {
geocoder.geocode({'latLng': event.latLng},
function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
getname(results[0].place_id);
}
}
});
}
});
代码片段:
function initMap() {
var myLatlng = new google.maps.LatLng(37.329343, -121.863077);
var myOptions = {
zoom: 15,
center: myLatlng
}
var map = new google.maps.Map(document.getElementById("map"),
myOptions);
var geocoder = new google.maps.Geocoder();
google.maps.event
.addListener(
map,
'click',
function(event) {
if (event.placeId) {
getname(event.placeId)
} else {
geocoder
.geocode({
'latLng': event.latLng
},
function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
getname(results[0].place_id);
}
}
});
}
});
function getname(place_id) {
var placesService = new google.maps.places.PlacesService(map);
placesService.getDetails({
placeId: place_id
}, function(results, status) {
alert("NAME: " + results.name);
});
}
}
google.maps.event.addDomListener(window, "load", initMap);
html,
body,
#map {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=places"></script>
<div id="map"></div>