จะอ่าน Shapefile ใน Python ได้อย่างไร?


23

คำถามของฉันเป็นส่วนขยายของเส้นแนวตั้งใน shapefile โปรดอ้างถึงคำถามนั้นก่อน

สิ่งที่คุณจะเห็นคือวิธีการสร้างเส้นแนวตั้งที่เกี่ยวกับกล่อง bounding ที่ระยะห่างที่ผู้ใช้กำหนด ฉันเข้าใจว่า OGR, Fiona, Shapely ฯลฯ สามารถใช้ในการทำขั้นตอนต่อไปของการคลิป แต่ฉันไม่เข้าใจการใช้งานของพวกเขา

ฉันจะอ่านไฟล์ polygon shape หนึ่งบรรทัดได้อย่างไร ทุกแอปพลิเคชันที่ใช้ Shapely แสดงวิธีสร้าง LineString, Point หรือ Polygon แต่จะไม่อ่านรูปร่างไฟล์ที่มีอยู่

กรุณาช่วยฉันด้วยโครงสร้างโครงกระดูกอย่างน้อยที่สุดฉันจึงสามารถสร้างมันได้

คำตอบ:


40

1) อ่าน shapefile ของคุณด้วยFiona , PyShp , ogrหรือ ... โดยใช้ โปรโตคอลgeo_interface (GeoJSON):

กับฟิโอน่า

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

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:

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) การแปลงเป็นรูปร่างรูปทรงเรขาคณิต (ที่มีรูปทรงฟังก์ชั่น)

# 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) การคำนวณ

4) บันทึก shapefile ที่เกิดขึ้น


5
ฉันจะเพิ่ม geopandas ในรายการ:geopandas.read_file("my_shapefile.shp")
Joris

ในฐานะของ GDAL 2.0 แทนที่จะosgeo.ogr.Openใช้osgeo.gdal.OpenEx( รายละเอียด )
เควิน

1
ด้วย ogr ฉันต้องกำหนด json เป็น json ก่อนเพื่อให้สามารถดำเนินการต่อได้ด้วยหุ่นดี: 'first = json.loads (แรก)'
Leo

11

ฉันพบว่า geopandas เป็นนักแสดงที่ดีที่สุดที่นี่ รหัส:

import geopandas as gpd
shapefile = gpd.read_file("shapefile.shp")
print(shapefile)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.