Ich teste die Point-in-Polygon-Funktion mit Matplotlib und formschön.
Hier ist eine Karte , die ein Bermuda-Dreieck-Polygon enthält.
DieGoogle Maps Point-in-Polygon-Funktionen zeigen deutlich, dass testingPoint und testingPoint2 innerhalb des Polygons liegen, was ein korrektes Ergebnis ist.
Wenn ich die beiden Punkte in matplotlib und formschön teste, besteht nur point2 den Test.
%Vor%formschön zeigt dasselbe Ergebnis wie matplotlib.
%Vor%Was geht hier eigentlich vor? Ist Googles Algorithmus besser als diese beiden?
Danke
Denken Sie daran: Die Welt ist nicht flach! Wenn die Projektion von Google Maps die gewünschte Antwort ist, müssen Sie die geografischen Koordinaten auf sphärischer Mercator , um einen anderen Satz von X- und Y-Koordinaten zu erhalten. Pyproj kann dabei helfen, stellen Sie sicher, dass Sie Ihre Koordinatenachsen vorher umkehren (zB: X, Y oder Längengrad, Breitengrad) ).
%Vor%Scheint die richtige Antwort zu erhalten.
Obwohl Sie bereits eine Antwort akzeptiert haben, aber zusätzlich zu @ MikeTs Antwort werde ich dies für zukünftige Besucher hinzufügen, die dasselbe mit matplotlib
und Grundkarte in mpl_toolkit
:
Ich habe das gerade getan, um zu testen, ob die Punkte tatsächlich innerhalb des Dreiecks liegen:
%Vor%
Wenn Sie jetzt Google Maps verwenden und das Polygon auf sphärische Koordinaten abgebildet wird, wird das Dreieck verformt, was zu beachten ist.
Wie auch immer, wenn Sie Ihre Daten mit kml in Gookle Earth darstellen, wird der Punkt auch außerhalb des Dreiecks angezeigt?!
%Vor%Gleiches Aussehen wie im Matplotlib-Bild, Punkt 1 ist leicht außerhalb des Dreiecks, wenn er in euklidischen 2D-Koordinaten gezeichnet wird. Für geometrische Berechnungen in Geokoordinaten überprüfen Sie QGIS Python Console oder GDAL / OGR Tools. Oder Sie verwenden die Google Maps API, genau wie im Beispiel, das auf dieser Seite verlinkt ist. wo das Thema 2D-Geometrien vs. geodätische Geometrien abgedeckt ist.
Um zu überprüfen, ob ein Polygon mehrere Punkte enthält, würde ich matplotlib contains_points
verwenden, das hier dokumentiert ist: Ссылка
Dies macht einen großen Aufruf unter Verwendung eines numpigen Arrays, deshalb ist es effizient. Beachten Sie, dass Sie einen Radius übergeben können, der das Polygon tatsächlich aufbläst oder deletiert. Sie können auch (Projektionen ...) transformieren, bevor Sie die Überprüfung durchführen.
Tags und Links python matplotlib google-maps-api-3 shapely point-in-polygon