2012-04-25 4 views
4

マーカーがKmlLayerで覆われた領域に入ったかどうかを判断する方法はありますか?私の.kmlは大部分が<Polygon>で構成され、境界を定義する一連の座標があります。Google Maps API V3を使用して、マーカーがKMLレイヤの境界内にあるかどうかを確認します。

私は、それは私が探しているものにいくつかの類似した記述見つかったオーバーレイを使用して作成された記事があります:http://www.paulmcilwaine.com/api/google-maps-detecting-markers-in-a-particular-boundary

方法はのgetBoundsを(使用する利点を持っていること)が、私は方法を探していますが、 KmlLayerの境界でこれを行う。 KmlLayerはgetBounds()のような便利な機能を持っていないようですが、KMLファイル自体にすべての座標がありますので、独自のgetBounds()関数を作成する方法があると思います。マーカー(またはlatlang)がKMLファイル内の座標内にあるかどうかを判断する方法が必要です。

ありがとうございました!

答えて

8

KmlLayerにはこのような機能はありません。ただし、ポリゴンの境界を抽出し、あなたはポイントが多角形内にあるかどうかを判断するためにマップのAPIのジオメトリライブラリを使用することができ、多角形を作成することができた場合: https://developers.google.com/maps/documentation/javascript/reference#poly

+0

私はkmlから座標を取り出し、そこからポリゴンを作成し、google.maps.geometry.poly.containsLocation()を使ってマーカの位置が境界の内側か外側かを調べることができます。ありがとう! –

6

私はどのように多くの詳細を提供するための要求を持っていました私はこれを実装しました。ここに例を見ることができます:http://www.usinternet.com/fiber-info/map.php

私はマップ上にいくつかのマーカーを持っており、境界内か境界外かをテストしたいと思います。プロパティ:あなたはKMLファイルを読み込んでポリゴンのパスに追加することができる座標のセットを、構築するために何かを必要とポリゴンを作成するには

 var userLocation = new google.maps.LatLng(44.928633,-93.298919); //Lyndale Park 

     var wendysLocation = new google.maps.LatLng(44.948056,-93.282222); //Wendy's on Lake St 

     var userMarker = new google.maps.Marker({ 
      position: userLocation, 
      map: map, 
      title:"Your Location", 
      draggable: true 
     }); 

     var wendysMarker = new google.maps.Marker({ 
      position: wendysLocation, 
      map: map, 
      title:"Wendy's on Lake St", 
      draggable: true 
     }); 

:私はこのようにそれらを設定します。残念ながら、Google Maps APIを使用するだけでKMLからPolygonに移行することはできないようですが、間違っていると誰かが私を修正します。私がダウンしてKMLからポリゴンのパスを解析され

var sector3PillburyPleasant = new google.maps.KmlLayer('http://usinternet.com/fiber-info/kml/Sector3Pillbury-Pleasant.kml', kmlOptions); 
      sector3PillburyPleasant.setMap(map); 

      var coordsSector3PillburyPleasant = [ 
       new google.maps.LatLng(44.91615269014508, -93.28382953316716), 
       new google.maps.LatLng(44.91619137463104, -93.28120338511586), 
       new google.maps.LatLng(44.93046751403393, -93.28114057929436), 
       new google.maps.LatLng(44.93046991974436, -93.28055243604703), 
       new google.maps.LatLng(44.94815274527994, -93.28053962401711), 
       new google.maps.LatLng(44.94815856171297, -93.28364017122617), 
      ]; 

      var polySector3PillburyPleasant = new google.maps.Polygon({ 
       paths: coordsSector3PillburyPleasant, 
       strokeColor: "#FFFFFF", 
       strokeOpacity: 0.0, 
       fillColor: "#FFFFFF", 
       fillOpacity: 0.0 
      }); 

、パスを構成する座標は次のように入れ子になった:(。あなたがパスを閉じている場合は、最後の座標ペアが必要とされていない)

<kml> 
<Document> 
    <Placemark> 
     <Polygon> 
      <tessellate>1</tessellate> 
      <outerBoundaryIs> 
       <LinearRing> 
        <coordinates> 
         -93.28382953316716,44.91615269014508,0 -93.28120338511586,44.91619137463104,0 -93.28114057929436,44.93046751403393,0 -93.28055243604703,44.93046991974436,0 -93.28053962401711,44.94815274527994,0 -93.28364017122617,44.94815856171297,0 -93.28382953316716,44.91615269014508,0 
        </coordinates> 
       </LinearRing> 
      </outerBoundaryIs> 
     </Polygon> 
    </Placemark> 
</Document> 
</kml> 

その後、私はマーカーの私が持っているかどうかをテストするには、内部または多角形の外にある:あなたがKMLレイヤ、あなたの内側か外側にある場合

 var markerIn = google.maps.geometry.poly.containsLocation(wendysMarker.getPosition(), polySector3PillburyPleasant); 

     var markerOut = google.maps.geometry.poly.containsLocation(userMarker.getPosition(), polySector3PillburyPleasant); 

     console.log(markerIn); 

     console.log(markerOut); 

は、その後、あなたは自分自身の真または偽のテストを持っていますghでは、KMLレイヤーをポリゴンに変えるための迂回路がありました。ここで

4

はGoogleマップV3にKMLを変換する方法のための偉大な答えです:

How to Check if a Point is in KML Polygon (GIS Shapefile)

は、ネイティブのGoogleマップAPI v3ではポリゴンとしてあなたKMLをレンダリングするためにgeoxml3またはgeoxml-v3のようなサードパーティ製のパーサーを使用しますあなたが知っている方法を使用してください。geoxml3

与えられた例では、ポリゴンにKMLに変換を使用した例では、緯度/経度を取得することをgeolocates、入力としてアドレスを取得し、その後にポイントがあるポリゴンが決まり:それは素晴らしい作品

http://www.geocodezip.com/geoxml3_test/v3_collection-map2e.html

関連する問題