Contoh JSFiddle
Saya telah membuat JSFiddle yang menunjukkan solusi untuk masalah Anda menggunakan pustaka JavaScript Topology Suite (JSTS) (JSTS).
Penjelasan
Ada dua langkah untuk pendekatan ini. Langkah pertama mengubah geometri Google Anda menjadi ekspresi geometri WellKnownText (WKT) , yang merupakan format yang didukung secara luas. Langkah kedua menggunakan JSTS untuk melakukan geometry.intersects()
perbandingan JSTS dari dua geometri WKT.
Untuk benar-benar memahami ini, Anda harus memiliki pemahaman dasar tentang WKT. Karena geometri poligon di Google Map Anda bukan format yang didukung secara luas, saya segera mengonversinya menjadi geometri WKT sehingga kami dapat bekerja dengannya dalam JSTS.
Untuk melakukan ini dengan mudah, saya menggunakan perpustakaan Wicket . Tentu saja Anda selalu dapat melakukan home-roll metode Google-Polygon-to-WKT Anda sendiri, atau Anda dipersilakan untuk menggunakan metode yang saya tulis sekali waktu , atau Anda dapat menggunakan beberapa solusi lain yang mungkin Anda temukan. Secara pribadi, hari ini saya hanya menggunakan Wicket, yang seperti yang Anda lihat, adalah jahat-sederhana:
// 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];
}
Berikutnya adalah daging dan kentang - menggunakan JSTS untuk mengambil dua geometri WKT dan menguji apakah mereka berpotongan atau tidak. Sekali lagi, dengan mengandalkan perpustakaan, tidak banyak yang bisa dilakukan:
// 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.');
}
}
Bagaimana saya menautkan perpustakaan di Fiddle
Biola yang ditautkan di atas, dan solusi yang saya contohkan memerlukan penambahan dua perpustakaan pihak ke-3 untuk proyek Anda - JSTS, dan Wicket. Mendapatkan kode dari Githubs masing-masing dan memasukkannya ke dalam proyek Anda adalah latihan yang berbeda. Tetapi untuk biola, saya menautkan ke perpustakaan-perpustakaan itu dengan mereferensikannya dalam contoh JSTS yang ada yang saya temukan diposting oleh Christopher Manning , serta halaman demo Wicket sendiri . Pada dasarnya saya membuka halaman, memilih "Lihat Sumber", dan memetik referensi yang relevan ke dua perpustakaan. Ini adalah titik akhir perpustakaan persis yang saya gunakan:
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