こんにちは。ご協力ありがとうございます。
次のテスト コード:
1) PHP を使用して mySQL データベースから緯度/経度データを取得し、そのデータを使用して初期化データを含む JavaScript 配列を形成します。正常に動作します。
2) 初期化された JavaScript 配列を使用してマーカーを作成します。正常に動作します。
3) (左) クリックで新しいマーカーを作成できるようにします (これらの新しいマーカーの位置をデータベースに戻すためのコードを後で追加します)。正常に動作します。
4) 右クリックで、marker.setMap(null) を使用してマーカーを削除できます - データベースからプリロードされたマーカー、または新しく作成されたユーザー マーカーのいずれかです。ユーザー マーカーは適切に削除されますが、プリロードされたマーカーは適切に削除されません。これについては、以下で説明します。
5) プリロードされたマーカーと新しく作成されたマーカーの両方が、markers.push(marker) ステートメントを使用して配列「markers」に格納されます。大丈夫そうです。
PRELOADED マーカーの右クリックによる削除を除いて、すべてが機能します。(ユーザーが作成したマーカーの右クリックによる削除は正常に機能します。) プリロードされたマーカーを右クリックすると、最後にプリロードされたマーカーのみが削除されます。削除イベント リスナーは、プリロードされたマーカーを設定するループの外側と後にあるかのようですが、そのループの内側にあります。
問題のあるセクションは、「データベース内の前のクリックを表示する」という先頭のコメントがあるセクションだと思います。どんなアイデアでも大歓迎です!私は Google Maps API v3 で非常に新しいので、おそらく私が見逃しているか誤解していることは明らかです。再度、感謝します!
<!DOCTYPE html>
<html>
<head>
<title>Marker Test</title>
<style>
html, body {
height: 100%;
margin: 0;
padding: 0;
}
#map-canvas, #map_canvas {
height: 100%;
}
</style>
<script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
<?
// Generate JavaScript array initialization from database
$username="REDACTED";
$password="REDACTED";
$database="REDACTED";
$con=mysql_connect(localhost,$username,$password);
@mysql_select_db($database,$con) or die( "Unable to select database");
$query="SELECT * FROM pool where (record_id >= 1765) AND (record_id <= 1769)";
/*
$query="SELECT * FROM pool where (record_id <= '$marker_end') AND (record_id >= '$marker_start')";
$query="SELECT * FROM pool where session = '$session'";
*/
$result=mysql_query($query,$con);
$length=mysql_num_rows($result);
$length_count=1;
if ($result) {
echo "var PreviousClicks = [\n";
while($row = mysql_fetch_array($result)) {
$_lat=$row['google_lat'];
$_lng=$row['google_lng'];
$_record_id=$row['record_id'];
echo "{\n";
echo "lat: $_lat,\n";
echo "lng: $_lng,\n";
echo "title: \"$_record_id\"\n";
echo "}";
if($length_count<$length) {echo ",\n";} else {echo "\n";}
$length_count++;
} // end while
echo "];";
} // end if
mysql_close();
?>
</script>
<script type="text/javascript">
var map;
var markers = [];
function addMarker(location) {
var marker = new google.maps.Marker({
position: location,
title: "A",
map: map
});
google.maps.event.addListener(marker, 'rightclick', function(event) {
marker.setMap(null);
});
markers.push(marker);
} //end addMarker function
function initialize() {
// currently manual center initialization
var startLoc = new google.maps.LatLng(33.037380,-117.090431);
var mapOptions = {
zoom: 16,
center: startLoc,
mapTypeId: google.maps.MapTypeId.TRAFFIC
};
map = new google.maps.Map(document.getElementById('map-canvas'),mapOptions);
google.maps.event.addListener(map, 'click', function(event) {
addMarker(event.latLng);
});
// show prev clicks in database ------------------------------------------------------------------
for (i = 0; i < PreviousClicks.length; i++) {
var marker = new google.maps.Marker({
position: new google.maps.LatLng(PreviousClicks[i].lat, PreviousClicks[i].lng),
title: PreviousClicks[i].title,
map: map
});
google.maps.event.addListener(marker, 'rightclick', function(event) {
marker.setMap(null);
});
markers.push(marker);
} // end for
// end "show prev clicks in database" section ----------------------------------------------------
} // end function initialize
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map-canvas">
</div>
</body>
</html>