在做图像数据处理时,经常会有栅格数据转矢量数据的操作,转换后的矢量文件会存在锯齿状边缘,不太美观,因此常常需要对矢量(shp)文件做平滑处理。
1 利用arcgis实现shp的平滑和简化
ArcToolbox / Cartography Tool / Generalization / Smooth Polygon,或者,制图工具 / 制图综合 / 平滑面。
2 基于GDAL矢量文件边界平滑
import sys from osgeo import ogr, gdal, osr #平滑函数 def smooth(shp,out,name,smooth_size): driver = ogr.GetDriverByName('ESRI Shapefile') dataSource = driver.Open(shp, 0) # 0是只读,1可写 if dataSource is None: print('could not open') sys.exit(1) # 获取图层 layer = dataSource.GetLayer(0) t = int(layer.GetFeatureCount()) drv = ogr.GetDriverByName('ESRI Shapefile') Polygon = drv.CreateDataSource(out) # oLayer = Polygon.CreateLayer(name, srs=prj, geom_type=ogr.wkbMultiPolygon) oLayer = Polygon.CreateLayer(name, layer.GetSpatialRef(), geom_type=ogr.wkbPolygon) oFieldID = ogr.FieldDefn("ID", ogr.OFTInteger) # 创建一个叫ID的整型属性 oLayer.CreateField(oFieldID, 1) feature = ogr.Feature(oLayer.GetLayerDefn()) ID=0 for i in range(0, t): feat = layer.GetFeature(i) geom = feat.GetGeometryRef() ID = ID+1 buffer = geom.Buffer(smooth_size).Buffer(-smooth_size) feature.SetGeometry(buffer) ## 设置面 feature.SetField(0, ID) oLayer.CreateFeature(feature) if __name__ == '__main__': # shp路径 shp=r"E:\成果\landsat8成果\LC08_L2SP_141039_20170214_20200905_02_T1.shp" # 输出路径 out=r"E:\成果\修复" # 输出名称 name=r"20170214" # 平滑尺度,投影为经纬度选择0.001为宜,投影为坐标选择100为宜。 smooth_size = 0.001 smooth(shp, out, name, smooth_size)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人