Ich habe eine Seite mit einer ersten Google-Karte (einer Stadt) und einer Combobox. Der Benutzer kann einen Standort auswählen, indem er eine Markierung auf die Karte zieht. Anschließend wird dieser Wert (lang, lang) in einem ausgeblendeten Feld gespeichert und an den Server übergeben. Die Combo liste jedoch einige Stadtgebiete auf. Wenn ein Benutzer einen Bereich auswählt, wird die Google Map geändert: Der Stadtplan verschwindet und die Karte des ausgewählten Bereichs wird angezeigt. Dies geschieht über getJSON, und alles funktioniert gut.Google Maps Javascript
Mein Problem ist, wie diese zweite Karte, die Gebietskarte, mit der gleichen Funktionalität zu aktivieren (aktualisieren Sie die Position der ziehbaren Marker). Ich verstehe, dass die Zuhörer anfänglich an die ursprüngliche Karte gebunden sind, ich weiß einfach nicht genug Javascript, um zu verstehen, wo diese Funktionen platziert werden, um die Funktionalität auf den neuen Karten zu aktivieren, vielleicht etwas mit jquery live?
Ich fand große Hilfe in this answer, aber es löst nicht mein Problem.
Der Code ist der folgende
<script type="text/javascript" src="/site_media/js/jquery-1.6.2.min.js"></script>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
$(function() {
$("#id_area").change(function() {
var url = '/areageo/'+this.value;
$.getJSON(url, function(data) {
if (data.lat){
$('#mapCanvas').empty();
// map options
var options = {
zoom: 14,
center: new google.maps.LatLng(data.lat, data.lon),
mapTypeId: google.maps.MapTypeId.ROADMAP
};
// Creating the map
var map = new google.maps.Map(document.getElementById('mapCanvas'), options);
// Adding a marker to the map
var marker = new google.maps.Marker({
position: new google.maps.LatLng(data.lat, data.lon),
map: map,
title: 'Some title',
draggable: true,
});
}
}); //getJSON end function
}); //id_area change end function
});
var geocoder = new google.maps.Geocoder();
function geocodePosition(pos) {
geocoder.geocode({
latLng: pos
}, function(responses) {
if (responses && responses.length > 0) {
updateMarkerAddress(responses[0].formatted_address);
} else {
updateMarkerAddress('Cannot determine address at this location.');
}
});
}
function updateMarkerStatus(str) {
document.getElementById('markerStatus').innerHTML = str;
}
function updateMarkerPosition(latLng) {
document.getElementById('info').innerHTML = [
latLng.lat(),
latLng.lng()
].join(', ');
id_lat.value = [
latLng.lat()];
id_lon.value = [
latLng.lng()];
}
function updateMarkerAddress(str) {
document.getElementById('address').innerHTML = str;
}
// initial setup
function initialize() {
var latLng = new google.maps.LatLng(44.77184334415235, 20.55164378320319); // initial map position
var map = new google.maps.Map(document.getElementById('mapCanvas'), {
zoom: 12, // initial zoom
center: latLng,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var marker = new google.maps.Marker({
position: latLng,
title: 'Point A',
map: map,
draggable: true,
});
// Update current position info.
updateMarkerPosition(latLng);
geocodePosition(latLng);
// Add dragging event listeners.
google.maps.event.addListener(marker, 'dragstart', function() {
updateMarkerAddress('Dragging...');
});
google.maps.event.addListener(marker, 'drag', function() {
updateMarkerStatus('Dragging...');
updateMarkerPosition(marker.getPosition());
});
google.maps.event.addListener(marker, 'dragend', function() {
updateMarkerStatus('Drag ended');
geocodePosition(marker.getPosition());
});
}
// Onload handler to fire off the app.
google.maps.event.addDomListener(window, 'load', initialize);
</script>
das klingt sehr gut und logisch, ich benutze nur die gleiche Karte und dynamisch ändern Sie es? – freethrow
Entschuldigung, nur noch eine Frage, ist meine anfängliche Karte sichtbar für den äußeren Code, wenn ich es mit Funktion initialisieren() { var latLng = neue google.maps.LatLng (44.77184,20.55164); var map = neue google.maps.Map (document.getElementById ('mapCanvas'), {... – freethrow
Wenn 'var map' innerhalb einer Funktion auftritt, ist es lokal für diese Funktion und nirgendwo anders verfügbar. Verwenden' var map; 'im globalen Bereich (außerhalb jeder Funktion) und dann das Map-Objekt dem mit 'map = new google.maps.Map (...);' innerhalb einer Funktion zuweisen –