ページに既存のマップがあります。document.getElementById() の行に沿って何かを使用してその要素を選択し、HTMLElement javascript オブジェクトを取得できます。地図が初期化されたときに作成された google.maps.Map のインスタンスを取得することは可能ですか?つまり、それは HTMLElement オブジェクトのプロパティですか、それともプロトタイプですか?
5 に答える
Google マップ オブジェクトが構築されているgoogle.maps.Map
からオブジェクトを取得できません。マップの表示を制御する単なるラッパーであり、その要素はそのラッパーへの参照を持っていません。DOM Element
google.maps.Map
DOM Element
問題がスコープのみの場合は、オブジェクトmap
のプロパティとして作成すると、ページのどこからでもアクセスできるようになります。次のいずれかを使用して、グローバルにするwindow
ことができます。'map'
window.map = new google.maps.Map(..)
また
map = new google.maps.Map(...) //AVOID 'var'
ちょっとしたトリックでgoogle.maps.Map
からオブジェクトを取得できます。DOM Element
マップ オブジェクトを初期化するときは、要素の data 属性にオブジェクトを格納する必要があります。
例:
$.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;
};
マップ要素を定義した後、たとえば:
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();
次に、要素の ID を使用して、後でマップ オブジェクトを取得できます。
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')
));
}
});
この方法を使用すると、ページ上で異なる動作をする複数のマップを使用できます。
同様の問題がありました。私がやりたかったのは、マップが作成された後にマップを操作することだけでした。私はそのようなことを試しました(あなたにも役立つと思います)。関数を作成しました(多かれ少なかれこのように):
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
});
}
この関数が行うことは、それを呼び出してコンテナにマップを作成した後です。
var mapa = load_map('mapa_container', 53.779845, 20.485712);
関数は、マップの作成中に使用されるデータを含むオブジェクトを返します。マップ自体を作成した後、私の場合は、mapa
オブジェクトを使用して各マップ上のマーカーを個別に操作できます。次に例を示します。
mapa.marker.setPosition(new google.maps.LatLng(20,30));
mapa.mapa.setCenter(new google.maps.LatLng(20,30));
これにより、マーカーの位置と中心マップが同じ座標に変更されます。マップを作成する関数を呼び出すときlng
と値が異なることに注意してください。lat
それが役立つことを願っています。
マップを初期化するときにインスタンスを作成します。
var map = new google.maps.Map(document.getElementById("map_element"), options);
マーカーを置いたり、場所を変更したりしたいときはいつでも、そのインスタンスを使用します。これは HTMLElement オブジェクトではありません。ただし、getDiv()
操作対象の html 要素を提供するメソッドがあります。
map.getDiv(); // in this case it returns the element with the id 'map_element'
Polymer プロジェクトの Google マップ コンポーネントを使用している場合は、次のようにして既存のマップ Dom を取得できます。
var map = document.querySelector('google-map');
それを取得したら、マップの現在のインスタンスに次の方法でアクセスできます。
var currentMapInstance = map.map;