2015-11-19 24 views
7

Ist es möglich zu bestimmen, ob ein GeoJSON-Punkt an einem gegebenen Breitengrad innerhalb eines gegebenen GeoJSON-Polygons nur mit JavaScript (entweder durch d3, topojson oder auf andere Weise) liegt?Kann mit Hilfe von JavasScript festgestellt werden, ob sich ein GeoJSON-Punkt in einem GeoJSON-Polygon befindet?

Zum Beispiel kann ich eine Karte mit Ländern in Großbritannien basierend auf dem Tutorial here zeichnen.

Ich habe dann ein paar Punkte, die Koordinaten haben, aber keinen Hinweis darauf, in welchem ​​Land sie liegen.

Ich möchte eine Gesamtpunktzahl für jedes Land anzeigen.

Kann ich herausfinden, welches Land jeden Punkt im Browser enthält, oder muss ich meine Punktdaten auf dem Server mit PostGIS oder ähnlich vorverarbeiten?

+1

Siehe [* "Node.js/Javascript-Bibliothek, um zu testen, ob der Punkt im Geojson-Multipolygon ist" *] (/ q/20379194). – altocumulus

+0

@altocumulus - Dein Kommentar führte mich zu [JavaScript Clipper] (http://sourceforge.net/projects/jsclipper/) - sieht interessant aus. Es wäre mir auch nie in den Sinn gekommen, dass "Point-in-Polygon" ein Tag wäre. – user5325596

+0

Einverstanden, das [tag: point-in-polygon] -Tag hat mich komplett überrumpelt ;-) Und es sind fast 120 Fragen damit verbunden. Wenn Sie selbst eine Lösung für Ihr Problem finden, schreiben Sie bitte eine Antwort auf diese Frage. – altocumulus

Antwort

6

Scheint, wie d3 hat Sie bedeckt: https://github.com/d3/d3-geo#geoContains

d3.geoContains (Objekt, Punkt)

Gibt true zurück, wenn und nur wenn der angegebene GeoJSON Objekt enthält die Nummer, oder falsch, wenn das Objekt enthält den Punkt nicht. Der Punkt muss als ein aus zwei Elementen bestehendes Array [Längengrad, Breitengrad] in Grad angegeben werden. Bei Point- und MultiPoint-Geometrien wird ein genauer Test verwendet. Für eine Sphäre wird wahr immer zurückgegeben; Für andere Geometrien wird ein Epsilon-Schwellenwert angewendet.

+1

Das ist richtig. Es wäre jedoch fair zu bemerken, dass dies eine neue Methode von D3 ** v4 ** ist und zum Zeitpunkt der Veröffentlichung der Frage nicht verfügbar war. Da die Frage jedoch nicht auf eine bestimmte Version abzielt, ist diese Antwort völlig legitim. – altocumulus

+0

Ich kann diese Arbeit nicht bekommen. 'geoContains' gibt' false' für den Punkt zurück, der eigentlich ein Flächenzentrum ist. Ich habe geoJson dieses Gebietes validiert (es ist gültig) und auf Google Maps überprüft, ob ein bestimmter Punkt zu diesem Bereich gehört (gehört). – surfrider

+1

So scheint es, dass mein Polygon gegen den Uhrzeigersinn ist, aber "d3" erwartet im Uhrzeigersinn. Ich testete die 'turf'-Bibliothek (thx zu Jonatas Walker Kommentar zum Zielen) und es" isst "gegen den Uhrzeigersinn Polygon. – surfrider

0

die Erweiterung @thedude Antwort der Sie auch geojson-lookup verwenden können, wenn Sie diese auf einem bestimmten GeoJSON mehr als einmal überprüfen müssen tun.

+1

Es ist besser, den Link als Referenz zu verwenden und die Schlüsselpunkte in Ihre Antwort einzugeben. –