1

私はURLのプラクティスを開発してきました:https ://developers.google.com/maps/articles/phpsqlinfo_v3そしてそれは機能しますが、別の例では、に表示されるマーカーをクリックすると同じウィンドウのHTMLフォームが表示される必要がありますコードを使用して自分の位置を地理的に特定し、その情報をMySQLデータベースに保存するときにマップします。以下のコードを使用していますが、ジオロケーションデータを保存するためのHTMLフォームウィンドウが表示されません。

これは、Webページで使用されるコードです:phpsqlinfo_add.html(URLサンプルの類似した名前:https://developers.google.com/maps/articles/phpsqlinfo_v3)他の補完的なWebページ:phpsqlinfo_addrow.phpとphpsqlinfo_dbinfo.phpは類似しています例に。

コード:phpsqlinfo_add.html

 <!DOCTYPE html >
 <head>
 <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
 <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
 <title>:: DEMO ::</title>
 <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
 <script type="text/javascript">

 function detectBrowser() {
 var useragent = navigator.userAgent;
 var mapdiv = document.getElementById("map_canvas");

 if (useragent.indexOf('iPhone') != -1 || useragent.indexOf('Android') != -1 ) {
 mapdiv.style.width = '100%';
 mapdiv.style.height = '100%';
 } else {
 mapdiv.style.width = '600px';
 mapdiv.style.height = '800px';
 }
 }

 function init() {
 if (navigator.geolocation) {
 navigator.geolocation.getCurrentPosition(function(position) {
 var pos = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
 var marcador = new google.maps.Marker();

 var map = new google.maps.Map(document.getElementById('map_canvas'), {
 zoom: 16,
 center: pos,
 mapTypeId: google.maps.MapTypeId.ROADMAP
 });

 marcador.setPosition(pos);
 marcador.setMap(map)

 }, function() {
 alert("Su navegador debe soportar geolocalizacion");
 });
 }
 }

 google.maps.event.addDomListener(window, 'load', init);

 var map = new google.maps.Map(document.getElementById("map_canvas"), options);

 var html = "<table>" +
             "<tr><td>Nombre:</td> <td><input type='text' id='name' value='Juan Gomez' readonly='readonly' /> </td> </tr>" +
             "<tr><td>Direccion:</td> <td><input type='text' id='address'/></td> </tr>" +
             "<tr><td>Tipo:</td> <td><select id='type'>" +
             "<option value='Opcion 1' SELECTED>Opcion 1</option>" +
             "<option value='Opcion 2'>Opcion 2</option>" +
             "<option value='Opcion 3'>Opcion 3</option>" +
             "</select> </td></tr>" +
             "<tr><td></td><td><input type='button' value='Registrar' onclick='saveData()'/></td></tr>";
infowindow = new google.maps.InfoWindow({
content: html
});

 google.maps.event.addListener(map, "click", function(event) {
    marker = new google.maps.Marker({
      position: event.latLng,
      map: map_canvas
    });
    google.maps.event.addListener(marker, "click", function() {
      infowindow.open(map, marker);
    });
});


 function saveData() {
 var name = escape(document.getElementById("name").value);
 var address = escape(document.getElementById("address").value);
 var type = document.getElementById("type").value;
 var latlng = marker.getPosition();

 var url = "phpsqlinfo_addrow.php?name=" + name + "&address=" + address +
            "&type=" + type + "&lat=" + latlng.lat() + "&lng=" + latlng.lng();
  downloadUrl(url, function(data, responseCode) {
    if (responseCode == 200 && data.length <= 1) {
      infowindow.close();
      document.getElementById("message").innerHTML = "Ubicacion Registrada.";
    }
  });
}

function downloadUrl(url, callback) {
 var request = window.ActiveXObject ?
 new ActiveXObject('Microsoft.XMLHTTP') :
 new XMLHttpRequest;

 request.onreadystatechange = function() {
 if (request.readyState == 4) {
      request.onreadystatechange = doNothing;
      callback(request.responseText, request.status);
    }
 };

 request.open('GET', url, true);
 request.send(null);
 }

 function doNothing() {}
 </script>

 </head>

 <body style="margin:0px; padding:0px;" onLoad="initialize()">
 <div id="map_canvas" style="width: 500px; height: 300px"></div>
 <div id="message"></div>
 </body>

 </html>
4

1 に答える 1

0

onclick イベント リスナーを追加して情報ウィンドウを作成するコードがアクティブ化されることはありませんでした。また、マップの代わりに map_canvas div を参照しています。これを試してください(// * my comments *変更については参照してください):

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">

function detectBrowser() {
var useragent = navigator.userAgent;
var mapdiv = document.getElementById("map_canvas");

if (useragent.indexOf('iPhone') != -1 || useragent.indexOf('Android') != -1 ) {
mapdiv.style.width = '100%';
mapdiv.style.height = '100%';
} else {
mapdiv.style.width = '600px';
mapdiv.style.height = '800px';
}
}

function init() {
// * adjusted geolocation code for testing *
var pos = new google.maps.LatLng(51.511,0.275);
var marcador = new google.maps.Marker();
var map = new google.maps.Map(document.getElementById('map_canvas'), {
zoom: 16,
center: pos,
mapTypeId: google.maps.MapTypeId.ROADMAP
});

marcador.setPosition(pos);
marcador.setMap(map)



// * infowindow code wasn't being activated, moved inside init() function *
var html = "<table>" +
         "<tr><td>Nombre:</td> <td><input type='text' id='name' value='Juan Gomez' readonly='readonly' /> </td> </tr>" +
         "<tr><td>Direccion:</td> <td><input type='text' id='address'/></td> </tr>" +
         "<tr><td>Tipo:</td> <td><select id='type'>" +
         "<option value='Opcion 1' SELECTED>Opcion 1</option>" +
         "<option value='Opcion 2'>Opcion 2</option>" +
         "<option value='Opcion 3'>Opcion 3</option>" +
         "</select> </td></tr>" +
         "<tr><td></td><td><input type='button' value='Registrar' onclick='saveData()'/></td></tr>";

infowindow = new google.maps.InfoWindow({
content: html
});

// * changed map: map_canvas to map: map *
 google.maps.event.addListener(map, "click", function(event) {
    marker = new google.maps.Marker({
      position: event.latLng,
      map: map
    });
    google.maps.event.addListener(marker, "click", function() {
      infowindow.open(map, marker);
    });
});
google.maps.event.addListener(map, "click", function(event) {
    marker = new google.maps.Marker({
      position: event.latLng,
      map: map
    });

    google.maps.event.addListener(marker, "click", function() {
      infowindow.open(map, marker);
    });
});
}



google.maps.event.addDomListener(window, 'load', init);

// * don't need to create map again *
// var map = new google.maps.Map(document.getElementById("map_canvas"), options);

// * rest of code should be fine... *

これが間違い<body onLoad="initialize()">google.maps.event.addDomListener(window, 'load', init);はなく、initialize() が別のことを行う場合は、init() と initialize() を組み合わせた方がよいでしょう。

于 2013-03-30T11:04:57.130 に答える