Sie können den json direkt an den GeoDataFrame-Konstruktor übergeben:
import geopandas as gpd
import requests
data = requests.get("https://data.cityofnewyork.us/api/geospatial/arq3-7z49?method=export&format=GeoJSON")
gdf = gpd.GeoDataFrame(data.json())
gdf.head()
Ausgänge:
features type
0 {'type': 'Feature', 'geometry': {'type': 'Poin... FeatureCollection
1 {'type': 'Feature', 'geometry': {'type': 'Poin... FeatureCollection
2 {'type': 'Feature', 'geometry': {'type': 'Poin... FeatureCollection
3 {'type': 'Feature', 'geometry': {'type': 'Poin... FeatureCollection
4 {'type': 'Feature', 'geometry': {'type': 'Poin... FeatureCollection
Für Single-File - Formate oder ZIP - Shape - Dateien unterstützt, können Sie fiona.BytesCollection
und GeoDataFrame.from_features
:
import requests
import fiona
import geopandas as gpd
url = 'http://www.geopackage.org/data/gdal_sample.gpkg'
request = requests.get(url)
b = bytes(request.content)
with fiona.BytesCollection(b) as f:
crs = f.crs
gdf = gpd.GeoDataFrame.from_features(f, crs=crs)
print(gdf.head())
und für Shapefiles mit Reißverschluss (unterstützt ab
Fiona 1.7.2 )
url = 'https://www2.census.gov/geo/tiger/TIGER2010/STATE/2010/tl_2010_31_state10.zip'
request = requests.get(url)
b = bytes(request.content)
with fiona.BytesCollection(b) as f:
crs = f.crs
gdf = gpd.GeoDataFrame.from_features(f, crs=crs)
print(gdf.head())
Sie können herausfinden, welche Formate Fiona unterstützt, indem Sie Folgendes verwenden:
import fiona
for name, access in fiona.supported_drivers.items():
print('{}: {}'.format(name, access))
Und eine hackige Problemumgehung zum Lesen von komprimierten In-Memory-Daten in Fiona 1.7.1 oder früher:
import requests
import uuid
import fiona
import geopandas as gpd
from osgeo import gdal
request = requests.get('https://github.com/OSGeo/gdal/blob/trunk/autotest/ogr/data/poly.zip?raw=true')
vsiz = '/vsimem/{}.zip'.format(uuid.uuid4().hex) #gdal/ogr requires a .zip extension
gdal.FileFromMemBuffer(vsiz,bytes(request.content))
with fiona.Collection(vsiz, vsi='zip', layer ='poly') as f:
gdf = gpd.GeoDataFrame.from_features(f, crs=f.crs)
print(gdf.head())
BytesCollection
völlig, wird aber wahrscheinlich in einer zukünftigen Version zugunsten einer der Optionen in github.com/Toblerity/Fiona/issues/409 entfernt .geopandas
, oder ist es besser, auf die Änderungen zu warten, die Sie hier erwähnen ?DriverError: unsupported driver: 'KML'
wird jedoch beim Versuch, KML zu öffnen, ausgelöst, da es nicht imsupported_drivers
Diktat enthalten ist (mit Fiona 1.7.1), und ich habe einige Probleme bezüglich festgestellt. Mangel an KML-Unterstützung (# 23 & # 97). Unterstützt Fiona KML?Da
fiona.BytesCollection
scheintTopoJSON
hier keine Lösung zu funktionieren, die für alle funktioniert, ohne dassgdal
:quelle
geopandas==0.4.0
,Fiona==1.8.4
und Python 3, erhalte ichDriverError: unsupported driver: 'TopoJSON'
.1.7.13
vonFiona
gdf = gpd.read_file(counties, driver='TopoJSON')
. Ich dachte, dass die Verwendungwith fiona.Collection...
funktionieren könnte, aber leider nicht.Ja, mit Fiona ist dies jetzt möglich (siehe https://github.com/Toblerity/Fiona/issues/409 ). Ich bin mir nicht sicher, ob diese Funktion in Geopandas noch verfügbar ist.
quelle
Bei Verwendung von Fiona 1.8 kann (muss?) Dies mit dem Projekt
MemoryFile
oder durchgeführt werdenZipMemoryFile
.Zum Beispiel:
quelle
Am einfachsten ist es, die GeoJSON-URL direkt in gpd.read () einzugeben. Ich hatte zuvor versucht, ein Shapefile mit BytesIO & zipfile aus einer Zip-Datei zu extrahieren, und hatte Probleme damit, dass gpd (insbesondere Fiona) dateiähnliche Objekte akzeptiert.
quelle