ズームレベルが変更されると、最後のページが読み込まれてからいつでも地図上にあるすべてのマーカーが地図上に表示されます。これは、ズームレベルの変更がコード内のsetZoom()呼び出しによるものか、ズームスライダーの操作によるものかに関係なく当てはまります。ズームレベルを変更すると、すべてのマーカーがGoogleマップに再表示されます
マップコントロールウィジェットには、さまざまなカテゴリに対応するマーカーを追加するボタンがあります。グループのボタンをクリックすると、グループを表すマーカーがマップに表示されます。その後、[個人]ボタンをクリックすると、グループマーカーが消去され、削除され、個々のマーカーがマップに表示されます。その他のカテゴリでも同様です。しかし、ズームレベルを変更すると、ページが最後に更新されてからマップ上にあったマーカーが返されます。
私はMarkerClustererPlusを使用しています。私はこれがMarkerClustererPlusのバグか、Googleのコードか自分のコードかどうかはわかりません。うまくいけば、後者。 addMarkers関数を以下に紹介します。また
function addMarkers(map,flag) {
clearOverlays();
deleteOverlays();
if ('event' == flag) {
data = himaps_event_data;
} else if ('story' == flag) {
data = himaps_story_data;
} else if ('group' == flag) {
data = himaps_group_data;
} else {
data = himaps_user_data;
}
for (var k in data) {
var item = data[k];
var latLng = new google.maps.LatLng(item.lat, item.lng);
var marker = new google.maps.Marker({'position': latLng});
markersArray.push(marker);
}
var markerCluster = new MarkerClusterer(map, markersArray);
}
私が変更した場合、:I以来の両方をクリアして、新しいマーカーを追加する前にマーカーを削除し、私はズーム変更が帰国を誘発する理由以前のマーカーは用事、戻ってくるすることが可能だかわかりませんズームすると、マーカはもうクリアされません。カテゴリを変更するためにボタンをクリックするだけで、地図上に累積していきます。私がズームレベルを変更しないと、間違いなく起こりません。
がfunction clearOverlays() {
if (markersArray) {
for (var i = 0; i < markersArray.length; i++) {
markersArray[i].setMap(null);
}
}
}
function deleteOverlays() {
if (markersArray) {
for (i in markersArray) {
markersArray[i].setMap(null);
}
markersArray.length = 0;
}
}
/* map controls */
(function($) {
Drupal.behaviors.himaps = {
attach: function(context, settings) {
$('.map-controls button').click(function() {
flag = this.id.replace('map-','');
addMarkers(map,flag);
});
}
}
})(jQuery);
/* homepage map */
function newMap(clat,clng) {
if (!clat) {
clat = 37.65;
}
if (!clng) {
clng = -97.43;
}
var myOptions = {
scrollwheel: false,
mapTypeControl: false,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_CENTER
},
panControl: false,
panControlOptions: {
position: google.maps.ControlPosition.LEFT_CENTER
},
zoomControlOptions: {
style: google.maps.ZoomControlStyle.LARGE,
position: google.maps.ControlPosition.LEFT_CENTER
},
draggable: true,
center: new google.maps.LatLng(clat, clng),
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
return new google.maps.Map(document.getElementById("map-canvas"), myOptions);
}
var map;
var markersArray = [];
var geocoder;
var marker;
var listener;
google.maps.event.addDomListener(window, 'load', initmapping);
function initmapping() { //aka initialize()
map = newMap();
addMarkers(map,'group');
geocoder = new google.maps.Geocoder();
}
なく、少なくとも最後に、ここでMarkerClustererPlusライブラリです:要求することで
は、ここでのコードの多くはでhttp://google-maps-utility-library-v3.googlecode.com/svn/tags/markerclustererplus/2.0.9/src/
リンクを提供できますか、少なくともコードを追加できますか?少なくともclearOverlays()関数とdeleteOverlays()関数はありますか?私はmarkersArrayが作成されクリアされているのだろうかと思います。マーカをクリアしたときにmarkersArrayをクリアしないと、それが説明されます。 – puckhead
puckhead、元の投稿をより多くのコードで更新しました。ありがとうございました。 – arnoldbird