Ich möchte ein Shapefile aus einem Pandas Data Frame mit den Lon & Lat-Zeilen erstellen.
Ich habe eine CSV-Datei und verarbeite sie mit Pandas, um einen Datenrahmen zu erstellen, der einfacher zu handhaben ist
Ist es möglich, das zu tun, ohne eine Schleife Zeile für Zeile zu machen?
Antworten:
Ein bisschen spät, aber vielleicht auch nützlich für andere. Ja, das geht mit
shapely
undgeopandas
.Angenommen, Ihr Pandas-Datenframe sieht ungefähr so aus:
Stellen Sie zunächst sicher, dass
geopandas
undshapely
ordnungsgemäß installiert sind, was manchmal nicht einfach ist, da einige Abhängigkeiten bestehen (z. B. GEOS und GDAL). Wenn dies beim ersten Versuch über nicht funktioniertpip install geopandas shapely
, suchen Sie in Google oder StackOverflow / Gis.Stackexchange nach dem Fehler, da höchstwahrscheinlich eine Antwort verfügbar ist, die das Problem für Sie löst.Dann müssen Sie lediglich eine neue Geometriespalte in Ihrem Datenrahmen erstellen, in der die Werte lat und lon zu einem
shapely Point()
Objekt kombiniert werden. Beachten Sie, dass derPoint()
Konstruktor ein Tupel von Gleitkommawerten erwartet. Daher muss die Konvertierung eingeschlossen werden, wenn die Spaltentypen des Datenrahmens nicht bereits auf festgelegt sindfloat
.Konvertieren Sie nun den pandas DataFrame in einen
GeoDataFrame
. Der Geopandas-Konstruktor erwartet eine Geometriespalte, die aus formschönen Geometrieobjekten bestehen kann. Die von uns erstellte Spalte ist also in Ordnung:Um dieses GeoDataFrame in eine Shape - Datei Dump, Verwendung geopandas'
to_file()
Methode (andere Treiber unterstützt von Fiona wieGeoJSON
sollte auch Arbeit):Und so sieht das resultierende Shapefile aus, wenn es mit QGIS visualisiert wird :
quelle
Für ArcMap müssen Sie die Projektion definieren, bevor Sie nach Shapefile exportieren.
quelle
df.crs= "+init=epsg:27700"
ich mein Shapefile nach dem British National Grid projiziert habe. Wenn ich es jedoch in ArcGIS öffne, ist das Koordinatensystem unbekannt. Was mache ich falsch?