2015-11-19 39 views
7

Czy można określić, czy punkt GeoJSON w danym łacie, lon znajduje się w danym poligonie GeoJSON, używając tylko JavaScript (albo przez d3, topojson, albo w jakikolwiek inny sposób)?Czy można określić, czy punkt GeoJSON znajduje się wewnątrz wieloboku GeoJSON przy użyciu JavaScriptScript?

Na przykład mogę narysować mapę pokazującą kraje w Wielkiej Brytanii w oparciu o samouczek: here.

Mam kilka punktów, które mają współrzędne, ale nie wskazują, w którym kraju się znajdują.

Chciałbym wyświetlić całkowitą liczbę punktów dla każdego kraju.

Czy mogę sprawdzić, który kraj zawiera każdy punkt w przeglądarce, czy też muszę przetworzyć dane punktu na serwerze za pomocą PostGIS lub podobnego?

+1

Zobacz bibliotekę [* "Node.js/Javascript, aby sprawdzić, czy punkt jest w geojson multipolygon" *] (/ q/20379194). – altocumulus

+0

@altocumulus - Twój komentarz doprowadził mnie do [Clipper JavaScript] (http://sourceforge.net/projects/jsclipper/) - wygląda interesująco. Ponadto nigdy nie przyszło mi do głowy, że "punkt w wielokącie" będzie tagiem. – user5325596

+0

Zgadzam się, że tag [tag: point-in-polygon] zabrał mnie całkowicie przez zaskoczenie ;-) I jest z tym prawie 120 pytań. Jeśli sam wymyślisz rozwiązanie swojego problemu, opublikuj odpowiedź na to pytanie. – altocumulus

Odpowiedz

6

Wygląda d3 pozwoli Ci: https://github.com/d3/d3-geo#geoContains

d3.geoContains (obiekt, punkt)

Zwraca true wtedy i tylko wtedy, gdy określony obiekt GeoJSON zawiera określony punkt, lub false, jeśli obiekt nie zawiera punktu. Punkt musi być określony jako dwuelementowa tablica [długość i szerokość geograficzna] w stopniach. W przypadku geometrii Point i MultiPoint stosuje się dokładny test; w przypadku Sfery wartość true jest zawsze zwracana; w przypadku innych geometrii stosuje się próg epsilon.

+1

To jest poprawne. Należy jednak zauważyć, że jest to nowa metoda D3 ** v4 ** i nie była dostępna w momencie opublikowania pytania. Jednakże, ponieważ pytanie nie dotyczy konkretnej wersji, ta odpowiedź jest całkowicie uzasadniona. – altocumulus

+0

Nie mogę dostać tej pracy. 'geoContains' zwraca' false' dla punktu, który jest faktycznie centrum obszaru. Zatwierdziłem geoJson tego obszaru (jest on ważny) i sprawdziłem na mapach google, jeśli dany punkt należy do tego obszaru (należy). – surfrider

+1

Wydaje mi się, że mój wielokąt jest przeciwny do ruchu wskazówek zegara, ale 'd3' oczekuje zgodnie z ruchem wskazówek zegara. Przetestowałem bibliotekę 'turf' (do komentarza Jonatasa Walkera) i" zje "wielokąt w lewo. – surfrider

0

rozszerzając @thedude odpowiedź może również użyć geojson-lookup jeśli trzeba zrobić to sprawdzić więcej niż jeden raz w danym GeoJSON.

+1

Lepiej jest użyć linku jako odnośnika i umieścić kluczowe punkty w swojej odpowiedzi. –