Ho una mappa esistente su una pagina. Posso selezionare quell'elemento usando qualcosa sulla falsariga di document.getElementById() per ottenere l'oggetto javascript HTMLElement. È possibile ottenere l'istanza di google.maps.Map creata quando la mappa è inizializzata, cioè è una proprietà dell'oggetto HTMLElement o del suo prototipo?Ottieni istanza google.maps.Map da un HTMLElement
risposta
Non è possibile ottenere google.maps.Map
oggetto dal DOM Element
, su cui sono stati costruiti Google Maps oggetto. google.maps.Map
è solo un wrapper, che controlla DOM Element
per la visualizzazione della mappa e quell'elemento non ha riferimento al suo wrapper.
Se il tuo problema è solo l'ambito, imposta map
come proprietà dell'oggetto window
e sarà accessibile da qualsiasi punto della pagina. È possibile effettuare 'map'
come globale utilizzando uno di questi:
window.map = new google.maps.Map(..)
o
map = new google.maps.Map(...) //AVOID 'var'
Si crea un'istanza quando si inizializza una mappa;
var map = new google.maps.Map(document.getElementById("map_element"), options);
di utilizzare tale istanza ogni volta che si vuole fare qualcosa come mettere un marcatore, posizione che cambia, ecc Non è un oggetto HTMLElement. Tuttavia ha un metodo getDiv()
, che ti dà l'elemento html su cui sta operando.
map.getDiv(); // in this case it returns the element with the id 'map_element'
ma come si accede a tale istanza dall'esterno? Per quanto riguarda le mie domande, la mappa è stata inizializzata da una riga di javascript che non posso modificare e assomiglia a: new google.maps.Map (el, options); Nota come l'istanza non è salvata in una variabile, è possibile arrivare a quell'istanza? –
Non sono abbastanza sicuro se ciò potrebbe essere fatto. – keune
Funziona bene e.h. in un listener di eventi: 'marker.map.getDiv()'. –
Ho avuto un problema simile. Tutto quello che volevo fare era manipolare le mappe dopo averle create. Ho provato qualcosa del genere (penso che ti aiuterà anche tu).
function load_map(el_id, lat, lng) {
var point = new google.maps.LatLng(lat,lng);
var myMapOptions = {
scrollwheel:false,
zoom: 15,
center: point,
mapTypeControl: true,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.DROPDOWN_MENU,
position: google.maps.ControlPosition.RIGHT_TOP
},
navigationControl: true,
navigationControlOptions: {
style: google.maps.NavigationControlStyle.SMALL,
position: google.maps.ControlPosition.LEFT_CENTER
},
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById(el_id),myMapOptions);
var marker = new google.maps.Marker({
draggable:true,
map: map,
position: point
});
return({
container:map.getDiv(),
marker:marker,
mapa:map
});
}
Cosa questa funzione non fa altro che dopo aver chiamato per creare una mappa in qualche contenitore: Ho la funzione (più o meno come questo) creato.
var mapa = load_map('mapa_container', 53.779845, 20.485712);
La funzione restituirà l'oggetto contenente alcuni dati utilizzati durante la creazione della mappa. Dopo aver creato una mappa stessa posso semplicemente manipolare, nel mio caso, pennarello su ogni mappa separatamente utilizzando mapa
oggetto, ad esempio:
mapa.marker.setPosition(new google.maps.LatLng(20,30));
mapa.mapa.setCenter(new google.maps.LatLng(20,30));
Questo cambierà posizione marcatore e mappa centro alle stesse coordinate. Si noti che i valori lng
e lat
sono diversi, mentre si chiama la funzione che crea una mappa.
Spero che questo aiuti.
Questa è una risposta buona e più modulare piuttosto che esporre la variabile della mappa nella finestra. – apebeast
È possibile ottenere google.maps.Map
oggetto da DOM Element
, con un leggero trucco.
Quando si inizializza l'oggetto mappa, è necessario memorizzare l'oggetto sull'attributo dei dati dell'elemento.
Esempio:
$.fn.googleMap = function (options) {
var _this = this;
var settings = $.extend({}, {
zoom: 5,
centerLat: 0,
centerLon: 0
}, options);
this.initialize = function() {
var mapOptions = {
zoom: settings.zoom
};
var map = new google.maps.Map(_this.get(0), mapOptions);
// do anything with your map object here,
// eg: centering map, adding markers' events
/********************************************
* This is the trick!
* set map object to element's data attribute
********************************************/
_this.data('map', map);
return _this;
};
// ... more methods
return this;
};
Dopo aver definito un elemento della mappa, ad esempio:
var mapCanvas = $('#map-canvas');
var map = mapCanvas.googleMap({
zoom: 5,
centerLat: 0,
centerLong: 0
});
// ... add some pre-load initiation here, eg: add some markers
// then initialize map
map.initialize();
si può quindi ottenere l'oggetto mappa in seguito utilizzando l'ID di elemento, ad esempio:
var mapCanvas = $('#map-canvas');
$('.location').on('click', function() {
// google map takes time to load, so it's better to get
// the data after map is rendered completely
var map = mapCanvas.data("map");
if (map) {
map.panTo(new google.maps.LatLng(
$(this).data('latitude'),
$(this).data('longitude')
));
}
});
Utilizzando questo metodo, è possibile avere più mappe con comportamenti diversi su una pagina.
mi hai avuto a 'puoi avere più mappe con diversi comportamenti su una pagina'. fantastico esattamente quello che stavo cercando. sei il mio eroe. – Stone
ottima soluzione! grazie – emjay
Questo presuppone che le persone stiano usando jQuery. Mentre fornisce una soluzione alla risposta, non lo fa in modo diretto. – Andrew
Se si utilizza Google-map componente dal progetto Polymer, è possibile ottenere la mappa Dom esistente in questo modo:
var map = document.querySelector('google-map');
Una volta che, istanza corrente di mappa si può accedere:
var currentMapInstance = map.map;
Utilizzando var map = $("#map_canvas").gmap('get','map')
è possibile ottenere la mappa in una variabile e utilizzando questa variabile è possibile modificare la mappa esistente.
Cheers
da dove proviene 'gmap ('get', 'map')'? –
- 1. Ottieni HTMLElement dall'elemento
- 2. Ottieni istanza per istanza-id
- 3. Ottieni istanza attività
- 4. Ottieni istanza di ViewController da AppDelegate in Swift
- 5. Ottieni istanza dell'applicazione Excel con C# da Handle
- 6. Derivazione di un oggetto HTMLElement dall'oggetto jQuery
- 7. hasOwnProperty HTMLElement Firefox
- 8. Come convertire un HTMLElement in una stringa
- 9. Ottieni il genitore della classe di istanza
- 10. Ottieni attr_accessor/variabili di istanza in ruby
- 11. Ottieni istanza dell'istanza EC2 tramite Java
- 12. Instantiating nuova HTMLElement a macchina
- 13. Ottieni un IP_ADDRESS_STRING da GetAdaptersAddresses()?
- 14. Ottieni componente da un JScrollPane
- 15. Ottieni MAX da un GRUPPO DA
- 16. Ottieni un TextReader da un flusso?
- 17. Ottieni un TypeTag da un tipo?
- 18. avvio istanza elasticsearch da java?
- 19. Restituisce tutti gli attributi di un HtmlElement nel browser Web
- 20. Definizione di IE su HTMLDocument e HTMLElement
- 21. Utilizzare getElementById su HTMLElement anziché HTMLDocument
- 22. Come aggiungere i miei metodi all'oggetto HTMLElement?
- 23. Ottieni il tipo di ritorno effettivo da un'espressione <Func <T, object>> istanza
- 24. Ottieni l'ID istanza corrente di app-engine in node.js
- 25. Ottieni tutte le variabili di istanza dichiarate nella classe
- 26. Ottieni posizione utente da un MKMapView
- 27. Ottieni ID bundle da un altro target
- 28. Ottieni latitudine longitudine da un indirizzo C#
- 29. Ottieni interruzioni da un elenco di volte
- 30. Ottieni il nome classe da un modulo
Perché evitare 'var'? (nell'ultima riga) – ZenOut
Poiché 'var' creerà una nuova variabile locale (ad esempio se utilizzata all'interno di una funzione, la variabile verrà scartata quando la funzione restituisce) invece di sovrascrivere quella globale (se presente). Per esempio. se hai una variabile globale chiamata 'map' e usi' map = 'anything'' all'interno di qualsiasi funzione, la variabile globale avrà il valore' nulla 'da ora in poi. –