Python'da bir şekil dosyası nasıl okunur?


23

Benim sorum çokgen şekil dosyasındaki Dikey çizgiler bir uzantısıdır . Lütfen önce bu soruya bakın.

Göreceğiniz şey, kullanıcı tanımlı aralıkta, sınırlayıcı kutuya göre dikey çizgiler oluşturma yöntemidir. OGR, Fiona, Shapely vs.'nin bir sonraki kırpma adımında kullanılabileceğini anlıyorum, ancak kullanımlarını anlamıyorum.

Çokgen şekil dosyasının bir satırını nasıl okurum? Shapely kullanan her uygulama, LineString, Point veya Polygon'un nasıl oluşturulacağını gösterir, ancak asla mevcut bir şekil dosyasını okumaz

En azından iskelet yapısıyla bana yardım et, böylece üzerine inşa edebilirim.

Yanıtlar:


40

1) geo_interface protokolünü (GeoJSON) kullanarak şekil dosyanızı Fiona , PyShp , ogr veya ... ile okuyun :

Fiona ile

import fiona
shape = fiona.open("my_shapefile.shp")
print shape.schema
{'geometry': 'LineString', 'properties': OrderedDict([(u'FID', 'float:11')])}
#first feature of the shapefile
first = shape.next()
print first # (GeoJSON format)
{'geometry': {'type': 'LineString', 'coordinates': [(0.0, 0.0), (25.0, 10.0), (50.0, 50.0)]}, 'type': 'Feature', 'id': '0', 'properties': OrderedDict([(u'FID', 0.0)])}

PyShp ile

import shapefile
shape = shapefile.Reader("my_shapefile.shp")
#first feature of the shapefile
feature = shape.shapeRecords()[0]
first = feature.shape.__geo_interface__  
print first # (GeoJSON format)
{'type': 'LineString', 'coordinates': ((0.0, 0.0), (25.0, 10.0), (50.0, 50.0))}

ogr ile:

from osgeo import ogr
file = ogr.Open("my_shapefile.shp")
shape = file.GetLayer(0)
#first feature of the shapefile
feature = shape.GetFeature(0)
first = feature.ExportToJson()
print first # (GeoJSON format)
{"geometry": {"type": "LineString", "coordinates": [[0.0, 0.0], [25.0, 10.0], [50.0, 50.0]]}, "type": "Feature", "properties": {"FID": 0.0}, "id": 0}

2) Düzgün geometriye dönüştürme ( şekil fonksiyonu ile)

# now use the shape function of Shapely
from shapely.geometry import shape
shp_geom = shape(first['geometry']) # or shp_geom = shape(first) with PyShp)
print shp_geom
LINESTRING (0 0, 25 10, 50 50)
print type(shp_geom)
<class 'shapely.geometry.linestring.LineString'>

3) Hesaplamalar

4) Ortaya çıkan şekil dosyasını kaydedin


5
Listeye geopandas eklerdim:geopandas.read_file("my_shapefile.shp")
joris

GDAL 2.0'dan itibaren osgeo.ogr.Openkullanın osgeo.gdal.OpenEx( ayrıntılar ).
Kevin

1
ogr ile, ilk önce düzgün bir şekilde daha fazla işleyebilmek için json'u bir json olarak tanımlamak zorunda kaldım: 'first = json.loads (ilk)'
Leo

11

Geopandas'ı burada en iyi sanatçı olarak görüyorum. Kod:

import geopandas as gpd
shapefile = gpd.read_file("shapefile.shp")
print(shapefile)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.