編集:現在は機能していますが、ユーザーが位置情報サービスを許可していないか、持っていない場合は読み込まれません。jsfiddleの例については、受け入れられた回答のコメントを参照してください。
私はいくつかのチュートリアルと質問を調べましたが、何が起こっているのか(またはこの場合は起こっていないのか)を静かに理解することはできません。ユーザーがリンクをクリックしたときに地図を読み込んでいます。これにより、ユーザーの現在の場所が中央にあり、マーカーがユーザーの場所にある地図が読み込まれます。ただし、外部のマーカーはif (navigation.location)
読み込まれないようです。以下は私の現在のコードです:
function initialize() {
// Check if user support geo-location
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
var point = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
var userLat = position.coords.latitude;
var userLong = position.coords.longitude;
var mapOptions = {
zoom: 8,
center: point,
mapTypeId: google.maps.MapTypeId.HYBRID
}
// Initialize the Google Maps API v3
var map = new google.maps.Map(document.getElementById("map"), mapOptions);
// Place a marker
new google.maps.Marker({
position: point,
map: map,
title: 'Your GPS Location'
});
});
} else {
var userLat = 53;
var userLong = 0;
var mapOptions = {
zoom: 8,
center: new google.maps.LatLng(userLat, userLong),
mapTypeId: google.maps.MapTypeId.HYBRID
}
// Place a marker
new google.maps.Marker({
position: point,
map: map,
title: 'Default Location'
});
// Initialize the Google Maps API v3
var map = new google.maps.Map(document.getElementById("map"), mapOptions);
}
<?
for ($i = 0; $i < sizeof($userLocations); $i++) {
?>
var userLatLong = new google.maps.LatLng(<? echo $userLocations[$i]['lat']; ?>, <? echo $userLocations[$i]['long']; ?>);
new google.maps.Marker({
position: userLatLong,
map: map,
title:"<? echo $userLocations[$i]['displayName'] . ', ' . $userLocations[$i]['usertype']; ?>"
});
<?
}
?>
}
function loadMapScript() {
if (typeof(loaded) == "undefined") {
$("#showMap").css("display", "none");
$("#showMapLink").removeAttr("href");
$("#map").css("height", "600px");
$("#map").css("width", "600px");
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://maps.googleapis.com/maps/api/js?key=MY_API_KEY&sensor=true&callback=initialize";
document.body.appendChild(script);
loaded = true;
} else {
alert("Map already loaded!");
}
}
loadMapScript()は、ユーザーがリンクをクリックしたときに呼び出されます。php forループは、すべての情報を含む事前に作成された配列をループします。
私はそれを完全には理解していないと思います。
var userLatLong = new google.maps.LatLng(53, 0);
new google.maps.Marker({
position: userLatLong,
map: map,
title:"Title"
});
コンソール(Google Chrome)に入ると、次のエラーが発生します。
Error: Invalid value for property <map>: [object HTMLDivElement]
ただし、それ以外の場合はエラーは発生しません。どんな助けでも大歓迎です!:)