Googleマップで2つのポリゴンが重なっているかどうかを判断しますか?


12

Googleマップとポリゴンを使用していますが、ポリゴンが互いに重なり合っていないことを確認する必要があります。

ポイント(lat、lng)がポリゴン内にあるときにTRUEを返す関数がありますが、ポリゴンのすべてのポイントが別のポリゴン内にあるかどうかを判断するだけでは不十分です。

なにか提案を?


1
github.com/tparkin/Google-Maps-Point-in-Polygonを見つけるために約10秒かかりました。何か試してみましたか?
ジョンパウエル

4
彼は、「ポイント(lat、lng)がポリゴン内にあるときにTRUEを返す関数を持っている」と書いています。良い試みだと思いますが、ポリゴン全体が別のポリゴンの内側にある場合は答えません。
user30184

1
Javascript Topology Suiteライブラリをプロジェクトに追加し、このような比較のためにその空間演算子を利用します。プロジェクトにjstsライブラリを含め、2つのポリゴンジオメトリでディゾルブ/ユニオンを実行する方法を示す同様の質問に対する回答を提供しました。役に立つかもしれません。ポリゴン、ライン、またはポイントの2つのジオメトリの交差をテストするサンプルを見つけたり作成したりできる可能性がある場合は、それらが交差するかしないかを確認します。:)
elrobis

回答:


8

JSFiddleの例

JavaScript Topology Suite(JSTS)(JSTS)ライブラリを使用して、問題の解決策を示すJSFiddleを作成しまし

説明

このアプローチには2つのステップがあります。最初のステップでは、GoogleジオメトリをWellKnownText(WKT)ジオメトリ式に変換します。これは広くサポートされている形式です。2番目の手順では、JSTSを使用して、geometry.intersects()2つのWKTジオメトリのJSTS 比較を実行します。

これを本当に理解するには、WKTの基本的な理解が必要です。Googleマップのポリゴンジオメトリは広くサポートされている形式ではないため、すぐにWKTジオメトリに変換して、JSTSで作業できるようにします。

これを簡単に行うために、Wicketライブラリを使用しまし。もちろん、独自のGoogle-Polygon-to-WKTメソッドをいつでもホームロールできます。または私が昔々書いたものを使用することもできますし、他のソリューションを使用することもできます。個人的には、最近、私はWicketを使用しています。

// Pass in two Google Polygon objects.
// It returns two WellKnownText (WKT) geometry expressions.
// 
function UseWicketToGoFromGooglePolysToWKT( poly1, poly2 )
{
    var wicket = new Wkt.Wkt();

    wicket.fromObject(poly1);
    var wkt1 = wicket.write();

    wicket.fromObject(poly2);
    var wkt2 = wicket.write();

    return [wkt1, wkt2];
}

次は肉とジャガイモです。JSTSを使用して2つのWKTジオメトリを取得し、それらが交差するかどうかをテストします。繰り返しになりますが、ライブラリに依存しているため、それほど多くはありません。

// Pass in two WKT geometry expressions.
// It performs a JSTS intersects() comparison.
// 
function UseJstsToTestForIntersection( wkt1, wkt2 )
{
    // Instantiate JSTS WKTReader and get two JSTS geometry objects
    var wktReader = new jsts.io.WKTReader();
    var geom1 = wktReader.read(wkt1);
    var geom2 = wktReader.read(wkt2);

    if (geom2.intersects(geom1)) {
      alert('intersection confirmed!');
    } else {
      alert('..no intersection.');
    }
}

Fiddleでライブラリをリンクする方法

上記のリンクのフィドルと、私が実証したソリューションでは、プロジェクトに2つのサードパーティライブラリ(JSTSとWicket)を追加する必要があります。それぞれのGithubからコードを取得してプロジェクトに組み込むことは、別の課題です。しかしフィドルのために、私はそれらを参照することにより、これらのライブラリにリンクされている既存のJSTS例 Iにより投稿されたクリストファー・マニングと同様に、Wicketの自身のデモページ。基本的に、ページを開き、「ソースの表示」を選択し、2つのライブラリへの関連参照を摘み取りました。これらは、私が使用した正確なライブラリエンドポイントでした。

http://arthur-e.github.io/Wicket/wicket.js
http://arthur-e.github.io/Wicket/wicket-gmap3.js
http://bl.ocks.org/christophermanning/raw/4450188/javascript.util.min.js
http://bl.ocks.org/christophermanning/raw/4450188/jsts.min.js

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.