JSFiddle Ejemplo
He creado un jsFiddle demostrando una solución a su problema usando el JavaScript topología Suite (JSTS) (JSTS) biblioteca.
Explicación
Hay dos pasos para este enfoque. El primer paso convierte sus geometrías de Google en expresiones de geometría WellKnownText (WKT) , que es un formato ampliamente compatible. El segundo paso usa JSTS para realizar una geometry.intersects()
comparación JSTS de dos geometrías WKT.
Para comprender realmente esto, necesitará tener una comprensión básica de WKT. Debido a que las geometrías de polígonos en su mapa de Google no tienen un formato ampliamente compatible, las convierto inmediatamente en geometrías WKT para que podamos trabajar con ellas en JSTS.
Para hacer esto fácilmente, utilicé la biblioteca Wicket . Por supuesto, siempre puede crear su propio método Google-Polygon-to-WKT, o puede usar uno que escribí alguna vez , o puede usar alguna otra solución que pueda encontrar. Personalmente, en estos días solo uso Wicket, que como puedes ver, es muy simple:
// 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];
}
El siguiente es la carne y las papas: usar JSTS para tomar dos geometrías WKT y probar si se cruzan o no. Una vez más, confiando en la biblioteca, no hay mucho:
// 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.');
}
}
Cómo vinculé las bibliotecas en Fiddle
El violín vinculado anteriormente, y la solución que demostré requiere agregar dos bibliotecas de terceros a su proyecto: JSTS y Wicket. Obtener el código de sus respectivos Githubs e incorporarlo a su proyecto es un ejercicio diferente. Pero para el violín, me vinculé a esas bibliotecas haciendo referencia a ellas en un ejemplo JSTS existente que encontré publicado por Christopher Manning , así como a la página de demostración de Wicket . Básicamente, abrí las páginas, seleccioné "Ver código fuente" y seleccioné referencias relevantes a las dos bibliotecas. Estos fueron los puntos finales exactos de la biblioteca que utilicé:
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