Mam istniejącą mapę na stronie. Mogę wybrać ten element za pomocą czegoś wzdłuż linii document.getElementById(), aby uzyskać obiekt javascript HTMLElement. Czy można uzyskać instancję google.maps.Map utworzoną podczas inicjowania mapy, tj. Czy jest to właściwość obiektu HTMLElement lub jego prototypu?Uzyskaj instancję google.maps.Map z pliku HTMLElement
Odpowiedz
Nie można dostać google.maps.Map
obiekt z DOM Element
, na której Google Maps obiektu zostały skonstruowane. google.maps.Map
to tylko opakowanie, które kontroluje DOM Element
do przeglądania mapy, a ten element nie ma odniesienia do jego opakowania.
Jeśli problem dotyczy tylko zakresu, należy uczynić map
jako właściwość obiektu window
i będzie on dostępny z dowolnego miejsca na twojej stronie. Można dokonać 'map'
jako globalny za pomocą jednego z nich:
window.map = new google.maps.Map(..)
lub
map = new google.maps.Map(...) //AVOID 'var'
Utworzenie instancji podczas inicjowania mapy;
var map = new google.maps.Map(document.getElementById("map_element"), options);
użyć tego wystąpienia, gdy chcesz zrobić coś jak umieszczenie znacznika, zmieniając lokalizację itp To nie jest przedmiot HTMLElement. Jednak ma on metodę getDiv()
, która daje ci element html, na którym działa.
map.getDiv(); // in this case it returns the element with the id 'map_element'
ale w jaki sposób mogę dostać się do tej instancji spoza zakresu? Jeśli chodzi o moje pytania, mapa została zainicjowana z linii javascript, której nie mogę zmienić i wygląda następująco: new google.maps.Map (el, options); Zwróć uwagę, że instancja nie jest zapisana w zmiennej, czy możliwe jest uzyskanie dostępu do tej instancji? –
Nie jestem do końca pewien, czy można to zrobić. – keune
To działa świetnie e.h. w detektorze zdarzeń: 'marker.map.getDiv()'. –
miałem podobny problem. Chciałem tylko manipulować mapami po ich utworzeniu. Próbowałem czegoś takiego (myślę, że to też ci pomoże). Stworzyłem funkcję (mniej więcej tak):
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
});
}
Funkcja ta działa po wywołaniu jej w celu utworzenia mapy w jakimś pojemniku.
var mapa = load_map('mapa_container', 53.779845, 20.485712);
Funkcja zwróci obiekt zawierający niektóre dane użyte podczas tworzenia mapy. Po utworzeniu mapy sam mogę po prostu manipulować, w moim przypadku, marker na każdej mapie oddzielnie przy użyciu mapa
obiektu, na przykład:
mapa.marker.setPosition(new google.maps.LatLng(20,30));
mapa.mapa.setCenter(new google.maps.LatLng(20,30));
to zmieni pozycję markera i centrum mapy do tych samych coords. Zauważ, że wartości lng
i lat
są inne niż podczas wywoływania funkcji, która tworzy mapę.
Nadzieję, że pomaga.
To jest dobra i bardziej modułowa odpowiedź, niż eksponowanie zmiennej mapy w oknie. – apebeast
Możesz dostać obiekt google.maps.Map
z DOM Element
, z niewielką sztuczką.
Po zainicjowaniu obiektu mapy należy zapisać obiekt na atrybucie danych elementu.
Przykład:
$.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;
};
Po zdefiniowaniu element mapy, np
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();
można następnie uzyskać obiekt mapy później za pomocą elementu ID, np
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')
));
}
});
Korzystając z tej metody, możesz mieć wiele map z różnymi zachowaniami na stronie.
Miałeś mnie na 'możesz mieć wiele map o różnych zachowań na stronie'. niesamowite dokładnie to, czego szukałem. jesteś moim bohaterem. – Stone
świetne rozwiązanie! dzięki – emjay
Zakłada się, że ludzie używają jQuery. Choć zapewnia rozwiązanie odpowiedzi, nie robi tego w sposób bezpośredni. – Andrew
Jeśli używasz Google map komponent z projektu Polymer, można uzyskać istniejącej mapy Dom tak:
var map = document.querySelector('google-map');
Kiedy już, że bieżąca instancja mapy można uzyskać przez:
var currentMapInstance = map.map;
Za pomocą var map = $("#map_canvas").gmap('get','map')
można uzyskać mapę do zmiennej i za pomocą tej zmiennej można zmienić istniejącą mapę.
Pozdrawiam
skąd pochodzi 'gmap ('get', 'map')'? –
- 1. Pobierz HTMLElement z elementu
- 2. Uzyskaj instancję/obiekt Dropzone przy użyciu jQuery
- 3. hasOwnProperty HTMLElement Firefox
- 4. Uzyskaj nazwę pliku z pliku wejściowego Angular2
- 5. Uzyskaj lokalizację pliku JAR
- 6. Uzyskaj typ zmiennej i utworzyć nową instancję tego typu
- 7. Uzyskaj przestrzeń nazw z pliku xml C#
- 8. AJAX/Jquery - Uzyskaj odpowiedź z pliku php
- 9. Uzyskaj ścieżkę z otwartego pliku w Pythonie
- 10. Uzyskaj dużą ikonę z rozszerzenia pliku
- 11. Uzyskaj identyfikator pakunku z pliku p12/pem
- 12. Uzyskaj nazwę pliku z lokalizacji pliku w języku Java
- 13. Co robię we HTMLDocument i HTMLElement
- 14. Błąd składniowy, nierozpoznane wyrażenie: # [obiekt HTMLElement] Błąd
- 15. Użyj getElementById na HTMLElement zamiast HTMLDocument
- 16. Usuwanie obiektów HtmlElement programowo za pomocą C#
- 17. Powershell Uzyskaj folder nadrzędny pliku
- 18. Uzyskaj domyślne/preferowane rozszerzenie pliku
- 19. Uzyskaj nazwę pliku od FileOutputStream
- 20. Jak zwrócić instancję z Enum?
- 21. Utwórz instancję klasy React z ciągu znaków
- 22. Uzyskaj ciąg kwerendy o nazwie pliku JavaScript
- 23. powershell Uzyskaj liczbę linii dużego (dużego) pliku
- 24. Uzyskaj nazwę pliku pliku, który działał PHP to
- 25. Uzyskaj powiązaną ikonę z pliku, folderu lub dysku bez WinAPI
- 26. Uzyskaj zawartość adresu URL w pliku Node.js z usługą Express
- 27. Uzyskaj hasło z danych wejściowych za pomocą pliku node.js
- 28. Uzyskaj odpowiedź z pliku PHP za pomocą AJAX
- 29. Uzyskaj nazwę serwera z ciągu połączenia zdefiniowanego w pliku App.config?
- 30. Uzyskaj ścieżkę i nazwę pliku z wyniku zamiaru kamery
Dlaczego należy unikać "var"? (w ostatnim wierszu) – ZenOut
Ponieważ 'var' utworzy nową zmienną lokalną (np. jeśli zostanie użyta wewnątrz funkcji, zmienna zostanie odrzucona, gdy funkcja powróci) zamiast nadpisywać wartość globalną (jeśli jest obecna). Na przykład. jeśli posiadasz globalną zmienną o nazwie 'map' i używasz' map = 'anything'' wewnątrz dowolnej funkcji, zmienna globalna będzie miała od teraz wartość "cokolwiek". –