python gdal使用wkt格式面裁剪shp

本文介绍了如何使用Python的osgeo库,通过WKT字符串裁剪ESRIShapefile中的矢量图层,实现地理空间数据的精确裁剪操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用wkt对shp矢量图层进行裁剪
from osgeo import ogr
from osgeo.ogr import (
	Driver,
	DataSource,
    Layer,
    FeatureDefn,
    Feature,
    Geometry
)

wkt = 'MULTIPOLYGON (((10959600.1600258 4491987.15336097,11663148.6944404 4780944.58713839,12448359.1123138 4598775.77019176,12517457.6290866 4203029.71958356,12555147.7291446 3832410.4023473,12203373.4619373 3738185.15220249,11732247.2112132 4133931.20281069,11361627.893977 3782156.9356034,10815121.4431371 3637678.21871469,10815121.4431371 3637678.21871469,10959600.1600258 4491987.15336097)))'
shp_file = '/data/test/province.shp'
output_file = '/data/test/clip.shp'

# wkt创建geometry,要求wkt数据坐标系要与shp坐标系一致
clip_polygon: Geometry = ogr.CreateGeometryFromWkt(wkt)

# 打开shp数据
driver: Driver = ogr.GetDriverByName("ESRI Shapefile")
dataSource: DataSource = driver.Open(shp_file, 0)
layer: Layer = dataSource.GetLayer()
layerDefinition: FeatureDefn = layer.GetLayerDefn()

# 创建目标图层
target_ds: DataSource = driver.CreateDataSource(output_file)
target_layer: Layer = target_ds.CreateLayer("clip", layer.GetSpatialRef(), ogr.wkbUnknown, options=["ENCODING=GBK"])
for i in range(layerDefinition.GetFieldCount()):
    target_layer.CreateField(layerDefinition.GetFieldDefn(i))

# 先过滤,筛选出相交部分
layer.SetSpatialFilter(clip_polygon)

# 对相交部分求相切
for feature in layer:
    feature: Feature = feature
    geom: Geometry = feature.GetGeometryRef()
    intersection = geom.Intersection(clip_polygon)
    feature.SetGeometry(intersection)
    target_layer.CreateFeature(feature.Clone())
    feature.Destroy()
# 关闭数据源
dataSource.Destroy()
target_ds.Destroy()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值