ご協力いただきありがとうございます。JSON オブジェクトから約 2000 個のマーカーを運転ルート案内ツールと組み合わせています。何を試しても、初期化の問題が発生し続けます。
試み:
上部の「$(function(){」と下部の関連する括弧を削除すると、私の $('#mapall').change(function() は機能しません。
body タグの「onload="initialize()">」を削除すると、コンソールに「ReferenceError: calcRoute が定義されていません。これは私の jquery ボタンに関連しているようです (以下のコード):
$("#showmapview").click(function() { $("#map-form-page").hide(); $("#map-route-page").show(); window.location.hash = '#new-map-page'; google.maps.event.trigger(map, 'resize'); });
これが私のJSです。私の HTML 本文には body onload="initialize()" が含まれています
<script type='text/javascript'>
$(function(){
var directionsDisplay;
var directionsService = new google.maps.DirectionsService();
var map;
var arrMarkers = [];
var arrInfoWindows = null;
function clearOverlays() {
if (arrMarkers) {
for( var i = 0, n = arrMarkers.length; i < n; ++i ) {
arrMarkers[i].setMap(null);
}
}
}
function showOverlays() {
if (arrMarkers) {
for( var i = 0, n = arrMarkers.length; i < n; ++i ) {
arrMarkers[i].setMap(map);
}
}
}
$('#mapall').change(function() {
if( $('#mapall').attr("checked")) {
showOverlays();
}
else {
clearOverlays();
}
});
function initialize() {
var rendererOptions = {
CODE
};
directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);
CODE HERE
}
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
$.getJSON( "CODE HERE", {}, function( data ) {
$.each( data, function( i, item ) {
var loc = item.masterlocation;
var marker = new google.maps.Marker({
position: new google.maps.LatLng(+loc.latitude, +loc.longitude),
map: map,
title: loc.nickname,
});
arrMarkers.push(marker);
CODE
});
});
directionsDisplay.setMap(map);
}
ENDS INITIALIZE
function calcRoute() {
CODE HERE
var request = {
origin: start,
destination: end,
waypoints: waypts,
optimizeWaypoints: optimize,
travelMode: google.maps.TravelMode.DRIVING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
var route = response.routes[0];
var summaryPanel = document.getElementById("directions_panel");
CODE HERE
}
STATUS WARNINGS HERE
});
}
google.maps.event.addDomListener(window, 'load', initialize);
});
</script>
編集1
@bnz のコメントに基づいて、コードを並べ替え、本文のオンロードを削除しました。これが新しいコードですが、チェックボックスをオフにしてからもう一度オンにしようとすると、マーカーが再表示されません。コンソールにエラーがないので、どこに問題があるのかわかりません。
<script>
$(function(){
var directionsDisplay;
var map;
function clearOverlays() {
if (arrMarkers) {
for( var i = 0, n = arrMarkers.length; i < n; ++i ) {
arrMarkers[i].setMap(null);
}
}
}
function showOverlays() {
if (arrMarkers) {
for( var i = 0, n = arrMarkers.length; i < n; ++i ) {
arrMarkers[i].setMap(map);
}
}
}
$('#mapall').change(function() {
if( $('#mapall').attr("checked")) {
showOverlays();
}
else {
clearOverlays();
}
});
google.maps.event.addDomListener(window, 'load', initialize);
});
var directionsService = new google.maps.DirectionsService();
var arrMarkers = [];
var arrInfoWindows = null;
function initialize() {
CODE
}
function calcRoute() {
CODE
};
</script>
** 編集 2 **
チェックボックスがマーカーのオンとオフを切り替えない問題を解決しました。何らかの理由で、JavaScript の設定に使用する必要がありました
arrMarkers[i].setVisible(false);
と
arrMarkers[i].setVisible(true);
私の最初の質問は初期化関数を扱っていたので、@bnz のコメントはこの問題を解決するのに役立ち、@bnz に答えを与えました。arrMarkers を setMap(null) で動作させることができない他の人がこのメソッドを使用できるようになることを願っています。