Google Places API 到 return 查询时是否可以单个对象而不是对象数组?
Is it possible for Google Places API to return one single object instead of an array of objects when querying?
我正在研究 Google 个地点 API,我想知道是否有可能 return 只有一个最接近的结果。在下面的示例中,我可以 return 1 公里半径内的所有体育馆,这很好,但是如果我要 return 最近的警察局或医院,我只想知道最近的有一种方法可以做到这一点。似乎 API 是 return 半径内的所有对象,并且无法更改。我似乎找不到任何强调此问题的文档,而且我所做的任何尝试仍然 return 在该地区的所有地方。
function GymReport(){
// Gets the latitude and longitude of a location searched by a user
$('.search_latitude').val(marker.getPosition().lat());
$('.search_longitude').val(marker.getPosition().lng());
var Lat = marker.getPosition().lat();
console.log(Lat);
var Long = marker.getPosition().lng();
console.log(Long);
var location = {lat: Lat, lng: Long};
var service = new google.maps.places.PlacesService(map);
service.nearbySearch({
location: location,
radius: 1000,
type: ['gym']
}, callback);
}
回调Class
function callback(results, status) {
if (status === google.maps.places.PlacesServiceStatus.OK) {
if(marker)
marker.setMap(null)
for (var i = 0; i < results.length; i++) {
createMarker(results[i]);<-- This calls the function that will create the markers for the array of results from the API.
}
}
}
请注意,您可以按突出度或距离对附近地点搜索的结果进行排序。默认情况下,它是按突出顺序排列的。您可以在代码中使用 rankBy
参数按距离排序:
rankBy - Specifies the ranking method to use when returning results. Defaults to PROMINENCE. Note that when rankBy is set to DISTANCE, you must specify a location but you cannot specify a radius or bounds.
来源:https://developers.google.com/maps/documentation/javascript/3.exp/reference#PlaceSearchRequest
获得按距离排序的结果后,只需从距离最近的数组中获取第一个元素即可。看看我的示例代码
var map;
var infowindow;
function initMap() {
var pyrmont = {lat: -33.867, lng: 151.195};
map = new google.maps.Map(document.getElementById('map'), {
center: pyrmont,
zoom: 15
});
infowindow = new google.maps.InfoWindow();
var service = new google.maps.places.PlacesService(map);
service.nearbySearch({
location: pyrmont,
rankBy: google.maps.places.RankBy.DISTANCE,
type: ['gym']
}, callback);
}
function callback(results, status) {
if (status === google.maps.places.PlacesServiceStatus.OK) {
//Get the first result, it's the closest one
createMarker(results[0]);
}
}
function createMarker(place) {
var placeLoc = place.geometry.location;
var marker = new google.maps.Marker({
map: map,
position: place.geometry.location
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(place.name);
infowindow.open(map, this);
});
}
#map {
height: 100%;
}
html, body {
height: 100%;
margin: 0;
padding: 0;
}
<div id="map"></div>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&key=AIzaSyDztlrk_3CnzGHo7CFvLFqE_2bUKEq1JEU&libraries=places&callback=initMap" async defer></script>
希望对您有所帮助!
我正在研究 Google 个地点 API,我想知道是否有可能 return 只有一个最接近的结果。在下面的示例中,我可以 return 1 公里半径内的所有体育馆,这很好,但是如果我要 return 最近的警察局或医院,我只想知道最近的有一种方法可以做到这一点。似乎 API 是 return 半径内的所有对象,并且无法更改。我似乎找不到任何强调此问题的文档,而且我所做的任何尝试仍然 return 在该地区的所有地方。
function GymReport(){
// Gets the latitude and longitude of a location searched by a user
$('.search_latitude').val(marker.getPosition().lat());
$('.search_longitude').val(marker.getPosition().lng());
var Lat = marker.getPosition().lat();
console.log(Lat);
var Long = marker.getPosition().lng();
console.log(Long);
var location = {lat: Lat, lng: Long};
var service = new google.maps.places.PlacesService(map);
service.nearbySearch({
location: location,
radius: 1000,
type: ['gym']
}, callback);
}
回调Class
function callback(results, status) {
if (status === google.maps.places.PlacesServiceStatus.OK) {
if(marker)
marker.setMap(null)
for (var i = 0; i < results.length; i++) {
createMarker(results[i]);<-- This calls the function that will create the markers for the array of results from the API.
}
}
}
请注意,您可以按突出度或距离对附近地点搜索的结果进行排序。默认情况下,它是按突出顺序排列的。您可以在代码中使用 rankBy
参数按距离排序:
rankBy - Specifies the ranking method to use when returning results. Defaults to PROMINENCE. Note that when rankBy is set to DISTANCE, you must specify a location but you cannot specify a radius or bounds.
来源:https://developers.google.com/maps/documentation/javascript/3.exp/reference#PlaceSearchRequest
获得按距离排序的结果后,只需从距离最近的数组中获取第一个元素即可。看看我的示例代码
var map;
var infowindow;
function initMap() {
var pyrmont = {lat: -33.867, lng: 151.195};
map = new google.maps.Map(document.getElementById('map'), {
center: pyrmont,
zoom: 15
});
infowindow = new google.maps.InfoWindow();
var service = new google.maps.places.PlacesService(map);
service.nearbySearch({
location: pyrmont,
rankBy: google.maps.places.RankBy.DISTANCE,
type: ['gym']
}, callback);
}
function callback(results, status) {
if (status === google.maps.places.PlacesServiceStatus.OK) {
//Get the first result, it's the closest one
createMarker(results[0]);
}
}
function createMarker(place) {
var placeLoc = place.geometry.location;
var marker = new google.maps.Marker({
map: map,
position: place.geometry.location
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(place.name);
infowindow.open(map, this);
});
}
#map {
height: 100%;
}
html, body {
height: 100%;
margin: 0;
padding: 0;
}
<div id="map"></div>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&key=AIzaSyDztlrk_3CnzGHo7CFvLFqE_2bUKEq1JEU&libraries=places&callback=initMap" async defer></script>
希望对您有所帮助!