4

Google Maps API v3 を使用して Web ページを開発しています。現在、機能マップと検索バーがあります。検索した住所から最も近い目印までの距離を、地図上の KML ファイルの 1 つに表示できるようにする必要があります。これどうやってするの?

ページのコードは次のとおりです。

<script type="text/javascript">
    var geocoder;
    var map; 
    var marker;
    var layers = [];
  function initialize() {
    geocoder = new google.maps.Geocoder ();
    var latlng = new google.maps.LatLng (41, -73.4);
    var myOptions = {
      zoom: 7,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
        }
      map = new google.maps.Map(document.getElementById("map_canvas"),
        myOptions);
      marker = new google.maps.Marker({map:map});


        layers[0] = new google.maps.KmlLayer('http://dl.dropbox.com/u/80233620/South-and-North-County-Trailway.kml',
            {preserveViewport: true});
        layers[1] = new google.maps.KmlLayer('http://www.nyc.gov/html/dot/downloads/misc/cityracks.kml', 
            {preserveViewport: true});
        layers[2] = new google.maps.KmlLayer('http://dl.dropbox.com/u/80233620/NWS%20Radar%20Images.kmz', 
            {preserveViewport: true});
    for (var i = 0; i < layers.length; i++) {
                layers[i].setMap(map);
              }
        }

    function codeAddress () {
        var address = document.getElementById ("address").value;
        geocoder.geocode ( { 'address': address}, function(results, status)  {
        if (status == google.maps.GeocoderStatus.OK)  {
            map.setCenter(results [0].geometry.location);
            marker.setPosition(results [0].geometry.location);
            map.setZoom(14);
            } 
        else {
            alert("Geocode was not successful for the following reason: " + status);
                }
        }); 
                            }
    function toggleLayer(i) {
      if(layers[i].getMap() === null) {
        layers[i].setMap(map);
      }
      else {
        layers[i].setMap(null);}
    }

</script>
4

1 に答える 1

1

そのようなKMLレイヤーのデータにアクセスすることはできません

https://developers.google.com/maps/documentation/javascript/layers#KMLLayers

KMLには多数の機能が含まれている可能性があるため、KmlLayerオブジェクトから機能データに直接アクセスすることはできません。代わりに、フィーチャが表示されると、クリック可能なMapsAPIオーバーレイのようにレンダリングされます。

代わりに、XMLを処理してマーカーを手動で追加してから、ジオメトリライブラリ を使用しcomputeDistanceBetween()て距離を取得できます。私は通常、ターンを考慮して距離にいくつかの数値を掛けます(距離の式は直線距離を取得します)。周り1.2が最も正確だったと思います。

于 2012-05-30T21:08:27.350 に答える