Геокодер найдет ближайший адрес. Если вы хотите «место», используйте Google Places API поблизостиПоиск .
var searchOrigin = new google.maps.LatLng(40.6892494, -74.0445); // Statue of Liberty
var request = {
location: searchOrigin,
fields: ['name', 'geometry'],
radius: 100
};
service = new google.maps.places.PlacesService(map);
service.nearbySearch(request, function(results, status) {
if (status === google.maps.places.PlacesServiceStatus.OK) {
var distance = 10000;
for (var i = 0; i < results.length; i++) {
var marker = createMarker(results[i], i);
// find closest result
var thisDist = google.maps.geometry.spherical.computeDistanceBetween(searchOrigin, marker.getPosition());
if (thisDist < distance) {
closest = marker;
distance = thisDist;
}
}
map.setCenter(closest.getPosition());
google.maps.event.trigger(closest, "click");
}
});
подтверждение концепции скрипта
![screenshot of resulting map](https://i.stack.imgur.com/R2Xs7.png)
фрагмент кода:
// This example requires the Places library. Include the libraries=places
// parameter when you first load the API. For example:
// <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places">
var map;
var service;
var infowindow;
function initMap() {
var sydney = new google.maps.LatLng(-33.867, 151.195);
infowindow = new google.maps.InfoWindow();
map = new google.maps.Map(
document.getElementById('map'), {
center: sydney,
zoom: 15
});
var searchOrigin = new google.maps.LatLng(40.6892494, -74.0445);
var request = {
location: searchOrigin,
fields: ['name', 'geometry'],
radius: 100
};
service = new google.maps.places.PlacesService(map);
service.nearbySearch(request, function(results, status) {
if (status === google.maps.places.PlacesServiceStatus.OK) {
var distance = 10000;
for (var i = 0; i < results.length; i++) {
console.log(results[i]);
var marker = createMarker(results[i], i);
var thisDist = google.maps.geometry.spherical.computeDistanceBetween(searchOrigin, marker.getPosition());
if (thisDist < distance) {
closest = marker;
distance = thisDist;
}
}
map.setCenter(closest.getPosition());
google.maps.event.trigger(closest, "click");
}
});
}
function createMarker(place, i) {
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);
});
return marker;
}
html,
body,
#map {
height: 100%;
margin: 0;
padding: 0;
}
<div id="map"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&libraries=places,geometry&callback=initMap" async defer></script>