0

私は、経度、緯度を含むポイントの MYSQL データベースを持っています。データベースを読み取り、javascript Google API ルート案内サービス用の XML を生成して、ポイントを最寄りの道路にスナップします。これは、出発地と目的地をそれ自体に設定することからです。

問題:

1 つのポイントのみが通りにスナップされ、残りはまったく表示されず、マップもそのポイントにズームインします。これはルート案内サービスが非同期であるためだと思いますが、この問題を修正する方法がわからないため、すべてのポイントがデータベースから最も近い通りにスナップされます。

ルート案内サービスを使用して通りにスナップしないと、db コードが機能し、すべてのポイントが表示されます。

Javascript ソース コード:

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>PHP GOOGLE MAPS POINTS</title>
    <script src="http://maps.google.com/maps/api/js?sensor=false"
            type="text/javascript"></script>
    <script type="text/javascript">
    //<![CDATA[



var directionsDisplay;
var directionsService = new google.maps.DirectionsService();

    function load() {

      directionsDisplay = new google.maps.DirectionsRenderer();

      var map = new google.maps.Map(document.getElementById("map"), {
        center: new google.maps.LatLng(40.06761, -79.9022),
        zoom: 7,
        mapTypeId: google.maps.MapTypeId.ROADMAP
      });

      directionsDisplay.setMap(map);


      // read in Long, lat from MYSQL DB from PHP file generated XML
      downloadUrl("phpmap.php", function(data) {
        var xml = data.responseXML;
        var markers = xml.documentElement.getElementsByTagName("marker");

        for (var i = 0; i < markers.length; i++) {
          var name = markers[i].getAttribute("name");
          var address = markers[i].getAttribute("address");
          var type = markers[i].getAttribute("type");
          var point = new google.maps.LatLng(
              parseFloat(markers[i].getAttribute("lat")),
              parseFloat(markers[i].getAttribute("lng")));

          var request = {
          origin:point,
          destination:point,
          travelMode: google.maps.TravelMode.DRIVING
          };
  directionsService.route(request, function(result, status) {
    if (status == google.maps.DirectionsStatus.OK) {
      directionsDisplay.setDirections(result);
    }
  });

           //






        }
      });


    }



    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, request.status);
        }
      };

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

    function doNothing() {}

    //]]>
  </script>
  </head>

 <body onload="load()">
<div style="width: 600px; height: 600px;" id="map"></div>
</body>
</html>
4

1 に答える 1

1
  1. 方向Renderer は、preserveViewport オプションを true に設定しない限り、表示された方向に合わせてマップをズームします。
  2. データベース内のすべてのポイントを最寄りの道路にスナップする必要があるのはなぜですか? これは、ルート案内サービスが意図したものではありません。これは非同期であり、クォータとレート制限の対象となります (「ステータス」の値を確認してください。結果が 1 つしか得られない理由が説明されているはずです)。最も近い道路にスナップされたデータベース内の各エントリのポイントが必要な場合は、それらをオフラインで取得し、データベースにも保存します。
于 2013-03-13T01:00:43.173 に答える