Anda bisa meneruskan json langsung ke konstruktor GeoDataFrame:
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()
Output:
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
Untuk format file tunggal yang didukung atau bentuk file zip, Anda dapat menggunakan fiona.BytesCollection
dan 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())
dan untuk shapefile zip (didukung pada
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())
Anda dapat mengetahui format apa yang didukung Fiona menggunakan sesuatu seperti:
import fiona
for name, access in fiona.supported_drivers.items():
print('{}: {}'.format(name, access))
Dan solusi peretasan untuk membaca data zip di memori dalam fiona 1.7.1 atau sebelumnya:
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
benar-benar berfungsi, tetapi mungkin akan dihapus dalam versi masa depan demi salah satu opsi di github.com/Toblerity/Fiona/issues/409 .geopandas
, atau apakah lebih baik menunggu perubahan yang Anda sebutkan di sini ?DriverError: unsupported driver: 'KML'
dinaikkan ketika mencoba untuk membuka KML karena tidak ada dalamsupported_drivers
dikt (menggunakan Fiona 1.7.1) dan saya melihat beberapa masalah kembali. kurangnya dukungan KML (# 23 & # 97). Apakah Fiona mendukung KML?from_features
metode ini. Selamatkan hari saya!Karena
fiona.BytesCollection
sepertinya tidak bekerja untuk diTopoJSON
sini solusi yang bekerja untuk semua tanpa perlugdal
:sumber
geopandas==0.4.0
,Fiona==1.8.4
dan Python 3, saya mengertiDriverError: unsupported driver: 'TopoJSON'
.1.7.13
dariFiona
gdf = gpd.read_file(counties, driver='TopoJSON')
. Saya pikir menggunakanwith fiona.Collection...
mungkin berhasil tetapi sayangnya tidak.Ya, sekarang dimungkinkan dengan Fiona (lihat https://github.com/Toblerity/Fiona/issues/409 ). Saya tidak yakin apakah fitur ini terungkap di Geopandas.
sumber
Saat menggunakan Fiona 1.8, ini dapat (harus?) Dilakukan dengan menggunakan proyek itu
MemoryFile
atauZipMemoryFile
.Sebagai contoh:
sumber
Cara termudah adalah memasukkan URL GeoJSON langsung ke gpd.read (). Saya sudah mencoba mengekstraksi shapefile dari zip sebelum ini menggunakan BytesIO & zipfile dan memiliki masalah dengan gpd (khususnya Fiona) menerima objek seperti file.
sumber
Saya lebih suka hasil yang diperoleh dengan menggunakan yang tidak terdokumentasi
GeoDataFrame.from_features()
daripada meneruskan GeoJSON ke konstruktor GDF secara langsung:Keluaran
GeoDataFrame yang dihasilkan memiliki kolom geometri yang diatur dengan benar dan semua kolom seperti yang saya harapkan, tanpa perlu membatalkan fitur apapun.
sumber