Przykład JSFiddle
Stworzyłem JSFiddle demonstrujący rozwiązanie twojego problemu za pomocą biblioteki JavaScript Topology Suite (JSTS) (JSTS).
Wyjaśnienie
Istnieją dwa kroki do tego podejścia. Pierwszy krok konwertuje geometrie Google na wyrażenia geometryczne WellKnownText (WKT) , który jest powszechnie obsługiwanym formatem. Drugi krok wykorzystuje JSTS do geometry.intersects()
porównania JSTS dwóch geometrii WKT.
Aby naprawdę to zrozumieć, musisz mieć podstawową wiedzę na temat WKT. Ponieważ geometrie wielokątów na mapie Google nie są powszechnie obsługiwanym formatem, natychmiast przekonwertowałem je na geometrie WKT, abyśmy mogli z nimi pracować w JSTS.
Aby to zrobić łatwo, skorzystałem z biblioteki Wicket . Oczywiście zawsze możesz rzucić do domu własną metodę Google-Polygon-do-WKT, możesz też użyć metody, którą napisałem dawno temu , lub możesz użyć innego rozwiązania, które możesz znaleźć. Osobiście w dzisiejszych czasach używam Wicket, który, jak widać, jest niesamowicie prosty:
// 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];
}
Następne jest mięso i ziemniaki - używając JSTS do pobrania dwóch geometrii WKT i sprawdzenia, czy się przecinają. Po raz kolejny, opierając się na bibliotece, nie ma w niej wiele:
// 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.');
}
}
Jak połączyłem biblioteki w skrzypcach
Skrzypce połączone powyżej, a rozwiązanie, które pokazałem, wymaga dodania dwóch bibliotek zewnętrznych do twojego projektu - JSTS i Wicket. Pobieranie kodu z odpowiednich Githubów i włączanie go do projektu to inne ćwiczenie. Ale na skrzypce, podłączyłem do tych bibliotek, odwołując się do nich w istniejącym przykładzie JSTS opublikowanym przez Christophera Manninga , a także na własnej stronie demo Wicket . Zasadniczo otworzyłem strony, wybrałem „Wyświetl źródło” i zebrałem odpowiednie odniesienia do dwóch bibliotek. To były dokładne punkty końcowe biblioteki, których użyłem:
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