Приклад JSFiddle
Я створив JSFiddle, що демонструє рішення вашої проблеми за допомогою бібліотеки JavaScript Topology Suite (JSTS) (JSTS).
Пояснення
До цього підходу є два кроки. Перший крок перетворює ваші геометрії Google у вирази геометрії WellK knownText (WKT) , що є широко підтримуваним форматом. Другий крок використовує JSTS для geometry.intersects()
порівняння JSTS двох геометрий WKT.
Щоб реально зрозуміти це, вам потрібно мати базове розуміння WKT. Оскільки геометрія багатокутника у вашій карті Google не підтримується широко, я негайно перетворюю їх у геометрию WKT, щоб ми могли працювати з ними в JSTS.
Щоб зробити це легко, я використав бібліотеку Вікет . Звичайно, ви завжди можете передати домашній власний метод Google-Polygon-W-WKT, або ви можете використовувати той, про який я писав один раз , або ви можете використати якесь інше рішення, яке ви можете знайти. Особисто в ці дні я просто використовую калитку, яка, як ви бачите, є безбожною:
// 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 взяти дві геометричні характеристики 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.');
}
}
Як я пов’язав бібліотеки у Скрипці
Згадана вище скрипка та рішення, яке я продемонстрував, вимагає додати до свого проекту дві бібліотеки сторонніх організацій - JSTS та Wicket. Отримати код від відповідних Githubs та включити його у свій проект - це інша вправа. Але для загадки я пов’язав ці бібліотеки, посилаючись на них у наявному прикладі JSTS, який я знайшов, розміщеному Крістофером Меннінг , а також на власній демонстраційній сторінці Віккета . В основному я відкрив сторінки, вибрав "Переглянути джерело" і вищипав відповідні посилання на дві бібліотеки. Це були точні кінцеві точки бібліотеки, які я використовував:
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