6

マーカーが KmlLayer でカバーされる領域に入ったかどうかを判断する方法はありますか? 私の .kml は、ほとんどが<Polygon>、境界を定義する一連の座標で構成されています。

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

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

アイデアをありがとう!

4

4 に答える 4

10

KmlLayer にはそのような機能はありません。ただし、ポリゴンの境界を抽出してポリゴンを作成できる場合は、Maps API の Geometry ライブラリを使用して、ポイントがポリゴンの内側にあるかどうかを判断できます: https://developers.google.com/maps/documentation/javascript/参照#ポリ

于 2012-04-25T20:59:37.693 に答える
6

これをどのように実装したかについて、より詳細な情報を提供してほしいというリクエストがありました。ここで例を見ることができます: http://www.usinternet.com/fiber-info/map.php

マップ上にいくつかのマーカーがあり、それらが境界の内側にあるか外側にあるかをテストしたいと考えています。私はそれらを次のように設定しました:

        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
        });

ポリゴンを作成するには、KML ファイルを読み取って一連の座標を作成する必要があります。これをポリゴンの paths: プロパティに追加できます。残念ながら、Google Maps API だけを使用して KML から Polygon に移行することはできないようですが、間違っていたら誰か訂正してください!

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 からポリゴンのパスを解析したところ、パスを構成する座標は次のようにネストされていました (パスを閉じている場合、最後の座標ペアは必要ありません)。

<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>

次に、取得したマーカーがポリゴンの内側にあるか外側にあるかをテストします。

        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);

次に、KML レイヤーをポリゴンに変換するために少し回り道がありましたが、KML レイヤーの内側または外側にいるかどうかの真偽テストを行います。

于 2012-07-13T22:33:59.940 に答える
5

KML を Google マップ V3 に変換する方法については、次のような優れた回答があります。

ポイントが KML ポリゴン (GIS シェープファイル) 内にあるかどうかを確認する方法

geoxml3 や geoxml-v3 などのサード パーティのパーサーを使用して、KML をネイティブの Google Maps API v3 ポリゴンとしてレンダリングしてから、既知の方法を使用します。geoxml3 を使用した例

以下の例では、KML をポリゴンに変換し、入力として住所を取得し、地理位置情報を取得して緯度/経度を取得し、ポイントがどのポリゴンにあるかを判断します。

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

于 2013-09-12T14:20:44.273 に答える
0

LatLngBoundary をAPI から直接KML レイヤーに取得できるようになりました

これは単純な KML レイヤーでのみ機能すると思いますが、レイヤーをロードすると、getDefaultViewportで境界を取得し、そのcontainsメソッドを使用して、LatLng オブジェクトが境界内にあるかどうかを確認できます。これは、座標のペアが KML レイヤーに適合するかどうかを確認する非常に簡単な方法です。

于 2018-12-01T11:37:44.157 に答える