JSFiddle Örneği
JavaScript Topology Suite (JSTS) (JSTS) kitaplığını kullanarak sorununuza bir çözüm gösteren bir JSFiddle oluşturdum .
Açıklama
Bu yaklaşımın iki adımı vardır. İlk adım, Google geometrilerinizi , yaygın olarak desteklenen bir biçim olan WellKnownText (WKT) geometri ifadelerine dönüştürür. İkinci adım geometry.intersects()
, iki WKT geometrisinin bir JSTS karşılaştırmasını gerçekleştirmek için JSTS kullanır .
Bunu gerçekten anlamak için WKT hakkında temel bir anlayışa sahip olmanız gerekir. Google Haritanızdaki çokgen geometrileri geniş çapta desteklenmediğinden, JSTS'de onlarla çalışabilmemiz için hemen WKT geometrilerine dönüştürüyorum.
Bunu kolayca yapmak için Wicket kütüphanesini kullandım . Tabii ki her zaman kendi Google-Polygon-WKT yönteminizi evde yuvarlayabilir veya bir kerede yazdığım bir yöntemi kullanabilir veya bulabileceğiniz başka bir çözüm kullanabilirsiniz. Şahsen, bu günlerde gördüğünüz gibi kötü basit olan Wicket kullanıyorum:
// 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];
}
Sıradaki et ve patates - iki WKT geometrisi almak ve kesişip kesişmediklerini test etmek için JSTS kullanmak. Bir kez daha, kütüphaneye dayanarak, çok fazla şey yok:
// 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'daki kütüphaneleri nasıl bağladım
Yukarıda bağlantılı olan keman ve gösterdiğim çözüm, projenize iki adet 3. parti kitaplık eklemenizi gerektirir - JSTS ve Wicket. Kodu ilgili Github'larından almak ve projenize dahil etmek farklı bir alıştırmadır. Ama keman için ben onları başvurarak bu kütüphanelere bağlantılı varolan JSTS örnek ben tarafından gönderildi bulundu Christopher Manning yanı sıra Wicket kendi tanıtım sayfasında . Temelde sayfaları açtım, "Kaynağı Görüntüle" yi seçtim ve iki kütüphaneye ilgili referansları kopardım. Bunlar kullandığım kesin kütüphane uç noktalarıydı:
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