Пример JSFiddle
Я создал JSFiddle, демонстрирующий решение вашей проблемы с использованием библиотеки JavaScript Topology Suite (JSTS) (JSTS).
Explaination
Есть два шага к этому подходу. Первый шаг преобразует ваши геометрии Google в выражения геометрии WellKnownText (WKT) , который широко поддерживается. На втором этапе используется JSTS для geometry.intersects()
сравнения JSTS двух геометрий WKT.
Чтобы действительно понять это, вам нужно иметь базовое понимание 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 взять две геометрии 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. Получение кода от их соответствующих Github и включение его в ваш проект - другое упражнение. Но для скрипки я связался с этими библиотеками, сославшись на них в существующем примере JSTS, который я нашел опубликованным Кристофером Мэннингом , а также на собственной демонстрационной странице Wicket . По сути, я открыл страницы, выбрал «Просмотр источника» и собрал соответствующие ссылки на две библиотеки. Это были точные конечные точки библиотеки, которые я использовал:
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