Ich versuche den Google Maps-API-Dienst zu verwenden, damit meine Website-Besucher ihre Adresse in einem Feld eingeben können. Sobald er eine übereinstimmende Adresse auswählt, möchte ich die latitude
und longitude
Informationen über die angegebene Adresse erhalten.Wie kann ich den Breiten- und Längengrad des ausgewählten Ortes mit Google Maps API ermitteln?
Mit dem Code in der API documentation, bekam ich eine Karte und ein Textfeld auf meiner Website. Sobald Google jedoch eine übereinstimmende Adresse gefunden hat, muss ich nur die Informationen latitude
und longitude
für die ausgewählte Adresse abrufen.
Hier ist die Funktion, die Karte
function initMap() {
var mapElement = document.getElementById('map');
var map = new google.maps.Map(mapElement, {
center: {
lat: -34.397,
lng: 150.644
},
zoom: 6
});
// Create the search box and link it to the UI element.
var input = document.getElementById('pac-input');
var searchBox = new google.maps.places.SearchBox(input);
map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);
var infowindow = new google.maps.InfoWindow();
var marker = new google.maps.Marker({
map: map
});
// Bias the SearchBox results towards current map's viewport.
map.addListener('bounds_changed', function() {
searchBox.setBounds(map.getBounds());
});
var markers = [];
// Listen for the event fired when the user selects a prediction and retrieve
// more details for that place.
searchBox.addListener('places_changed', function() {
var places = searchBox.getPlaces();
console.log(places);
if (places.length == 0) {
return;
}
// Clear out the old markers.
markers.forEach(function(marker) {
marker.setMap(null);
});
markers = [];
// For each place, get the icon, name and location.
var bounds = new google.maps.LatLngBounds();
places.forEach(function(place) {
if (!place.geometry) {
console.log("Returned place contains no geometry");
return;
}
/*
var icon = {
url: place.icon,
size: new google.maps.Size(71, 71),
origin: new google.maps.Point(0, 0),
anchor: new google.maps.Point(17, 34),
scaledSize: new google.maps.Size(25, 25)
};
*/
// Create a marker for each place.
markers.push(new google.maps.Marker({
map: map,
//icon: icon,
title: place.name,
position: place.geometry.location
}));
//coords.latitude
var latitude = place.geometry.location.lat();
var longitude = place.geometry.location.lng();
console.log(latitude, longitude);
if (place.geometry.viewport) {
// Only geocodes have viewport.
bounds.union(place.geometry.viewport);
} else {
bounds.extend(place.geometry.location);
}
});
map.fitBounds(bounds);
});
}
Die folgenden Codezeilen gab mir die Informationen initialisieren, die ich suche. Es scheint jedoch, dass es mehr als einmal angezeigt wird (möglicherweise zeigt es die Informationen für mehrere Adressen an). Wie bekomme ich die latitude
und longitude
Info nur eine Adresse?
var latitude = place.geometry.location.lat();
var longitude = place.geometry.location.lng();
Ich versuchte, ein Klick Zuhörer das Hinzufügen, wo ich die Informationen einer der lecken Ereignis wie dieses jedoch
map.addListener("click", function (event) {
var lat = event.latLng.lat();
var lng = event.latLng.lng();
console.log(lat, lng);
});
greifen kann, gibt dies mir die latitude
und longitude
der Ort, wo ich auf die Karte klicken , nicht die Adresse, die ich aus dem Textfeld nach der automatischen Vervollständigung schlug die übereinstimmenden Adressen
Die 'SearchBox.getPlaces()' Methode gibt eine Reihe von passenden Stellen. Bitte geben Sie ein Beispiel an, wo Sie eine Adresse eingeben und mehrere Ergebnisse erhalten. Vielleicht sollten Sie [Autovervollständigung] (https://developers.google.com/maps/documentation/javascript/reference#Autocomplete) anstelle von [SearchBox] verwenden (https://developers.google.com/maps/documentation/javascript/ Referenz # SearchBox) – geocodezip