我的问题是多边形shapefile中垂直线的扩展。请先参考该问题。

您将看到一种以用户定义的间距相对于边界框生成垂直线的方法。我知道OGR,Fiona,Shapely等可以用于下一步的剪切,但是我不了解它们的用法。

如何读取多边形shapefile的一行?每个使用Shapely的应用程序都显示了如何生成LineString,Point或Polygon,但从未读取过现有的shapefile。

#1 楼


使用geo_interface协议(GeoJSON)通过Fiona,PyShp,ogr或...读取shapefile:

通过Fiona
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}

计算


保存生成的shapefile
如何将Shapely几何图形写入shapefile?
更好的方法
使用Fiona从头开始编写新的shapefile
等。


评论


我会将geopandas添加到列表中:geopandas.read_file(“ my_shapefile.shp”)

– joris
17年8月27日在7:30

从GDAL 2.0开始,使用osgeo.gdal.OpenEx(详细信息)代替osgeo.ogr.Open。

–凯文
17年11月10日在11:28

使用ogr,我首先必须将json定义为json,以便能够通过匀称进一步处理它:

–狮子座
19-09-12在7:41



#2 楼

我发现Geopandas在这里表现最好。
代码:

import geopandas as gpd
shapefile = gpd.read_file("shapefile.shp")
print(shapefile)