Google Map API, wie setzen Sie die Marke für die aktuelle Position
Ich Lerne google map API und stecken Sie dieses problem, wenn ich versuche, fügen Sie die aktuelle Koordinate in ein array. Hier ist mein code:
var locations = [];
In der initialize () - ich haben:
function initialize() {
infowindow = new google.maps.InfoWindow();
var myOptions = {
zoom: 10,
mapTypeControl: true,
navigationControl: true,
}
map = new google.maps.Map(document.getElementById("map"), myOptions);
add_location('Place 1', 37.2846372, -123.3270422);
set_current_location();
set_markers(new google.maps.LatLngBounds(), map);
}
Den ersten marker gesetzt, während die set_current_location() scheint nicht zu funktionieren. Hier ist der rest des Codes:
//add new location to the locations array
function add_location(description, lastitude, longtitude) {
locations.push([description, lastitude, longtitude]);
}
//Set all the markers in the location arrays and bound/frame the map
function set_markers(bounds, map) {
for (i = 0; i < locations.length; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[i][1], locations[i][2]),
map: map
});
bounds.extend(marker.position);
google.maps.event.addListener(marker, 'click', (function (marker, i) {
return function () {
infowindow.setContent(locations[i][0]);
infowindow.open(map, marker);
}
})(marker, i));
}
map.fitBounds(bounds);
}
//Get current location based on the IP Address
function set_current_location() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function (position) {
var pos = new google.maps.LatLng(position.coords.latitude,
position.coords.longitude);
var myLat = position.coords.latitude;
var myLong = position.coords.longitude;
add_location('My location', position.coords.latitude, position.coords.longitude);
});
} else {
alert("Geolocation is not supported by this browser.");
}
}
Kann jemand helfen oder mir einen Tipp geben? Ich möchte hinzufügen, um die aktuelle Position zu Orten array, so kann ich nachverfolgen, wie viele Orte, die ich Hinzugefügt haben. Ich danke Ihnen so sehr.
- rufen Sie
set_markers
am Ende der callback vongetCurrentPosition
und nicht ininitialize
. Abrufen der Benutzer-Standort ist ein asynchroner Prozess, das Ergebnis noch nicht verfügbar ist, wenn die Initialisierung abgeschlossen ist. - Ich Stimme mit Dr. Molle. Ich sah die gleiche Sache. getCurrentPosition() ist ein asynchroner Aufruf ausgeführt wird, in den hintergrund, so gibt es keine Garantie in dem obigen code, die, wenn set_markers() aufgerufen wird, die getCurrentPosition() beendet wurde. Putting die set_markers () - Aufruf am Ende der getCurrentPosition() wird sichergestellt, dass die Benutzer die geolocation wird beendet, bevor der Marker auf der Karte platziert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie bewegen Sie einfach
set_markers()
zu Endesuccess
Rückruf vongetCurrentPosition()
und Benutzer weigern sich zu teilen, seine Lage, werden Sie nicht bekommen die Karte aber nur graue Fläche. Es gibt keinecenter
für Ihre Karte, die erforderliche Eigenschaft. Besser, es zu definieren wie:Darüber hinaus können Sie auch anrufen
set_markers()
am Endeerror
Rückruf vongetCurrentPosition()
, so in Fall, dass Nutzer verweigern die Freigabe seiner Lage, können Sie zeigen die möglichen Positionen:Sehen Beispiel auf jsbin
initialize()
Funktion nachset_current_location()
dann erhalten Sie falsche Ergebnisse, dagetCurrentPosition()
ist async-Funktion. Sie haben zu prüfen, wielocations
ändern inadd_location()
Funktion. Wenn ich Teile meinen Standort bekomme ich marker und variablelocations
aktualisiert. Siehe aktualisierte jsbin-Beispiel und öffnen Sie die Konsole anmelden.