Pracuję z mapami Google i wielokątami, ale muszę sprawdzić, czy wielokąty się nie nakładają.
Mam funkcję, która zwraca PRAWDA, gdy punkt (lat, lng) znajduje się wewnątrz wielokąta, ale nie wystarczy ustalić, czy każdy punkt wielokąta znajduje się w innym wielokącie.
Jakieś sugestie?
google-maps
overlapping-features
Marcelo Magarzo
źródło
źródło
Odpowiedzi:
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:
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:
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:
źródło