Googleマップとポリゴンを使用していますが、ポリゴンが互いに重なり合っていないことを確認する必要があります。
ポイント(lat、lng)がポリゴン内にあるときにTRUEを返す関数がありますが、ポリゴンのすべてのポイントが別のポリゴン内にあるかどうかを判断するだけでは不十分です。
なにか提案を?
Googleマップとポリゴンを使用していますが、ポリゴンが互いに重なり合っていないことを確認する必要があります。
ポイント(lat、lng)がポリゴン内にあるときにTRUEを返す関数がありますが、ポリゴンのすべてのポイントが別のポリゴン内にあるかどうかを判断するだけでは不十分です。
なにか提案を?
回答:
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