最近需要使用GDAL实现shape面数据批量将中心点提取为点shape文件,并复制所有的属性信息。整体的逻辑不是非常复杂,但是在网上现成的代码也找不到。

实现思路

具体思路如下:

#mermaid-svg-8m1tffzStNM4t1hK {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8m1tffzStNM4t1hK .error-icon{fill:#552222;}#mermaid-svg-8m1tffzStNM4t1hK .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-8m1tffzStNM4t1hK .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-8m1tffzStNM4t1hK .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-8m1tffzStNM4t1hK .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-8m1tffzStNM4t1hK .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-8m1tffzStNM4t1hK .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-8m1tffzStNM4t1hK .marker{fill:#333333;stroke:#333333;}#mermaid-svg-8m1tffzStNM4t1hK .marker.cross{stroke:#333333;}#mermaid-svg-8m1tffzStNM4t1hK svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-8m1tffzStNM4t1hK .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-8m1tffzStNM4t1hK .cluster-label text{fill:#333;}#mermaid-svg-8m1tffzStNM4t1hK .cluster-label span{color:#333;}#mermaid-svg-8m1tffzStNM4t1hK .label text,#mermaid-svg-8m1tffzStNM4t1hK span{fill:#333;color:#333;}#mermaid-svg-8m1tffzStNM4t1hK .node rect,#mermaid-svg-8m1tffzStNM4t1hK .node circle,#mermaid-svg-8m1tffzStNM4t1hK .node ellipse,#mermaid-svg-8m1tffzStNM4t1hK .node polygon,#mermaid-svg-8m1tffzStNM4t1hK .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-8m1tffzStNM4t1hK .node .label{text-align:center;}#mermaid-svg-8m1tffzStNM4t1hK .node.clickable{cursor:pointer;}#mermaid-svg-8m1tffzStNM4t1hK .arrowheadPath{fill:#333333;}#mermaid-svg-8m1tffzStNM4t1hK .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-8m1tffzStNM4t1hK .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-8m1tffzStNM4t1hK .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-8m1tffzStNM4t1hK .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-8m1tffzStNM4t1hK .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-8m1tffzStNM4t1hK .cluster text{fill:#333;}#mermaid-svg-8m1tffzStNM4t1hK .cluster span{color:#333;}#mermaid-svg-8m1tffzStNM4t1hK div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-8m1tffzStNM4t1hK :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

面shp文件
坐标系信息提取
字段信息提取
创建点shp文件
遍历要素
字段值提取
中心点提取
写入新shp文件

实现代码

from osgeo import ogr
from osgeo import gdaldef area_to_point(in_path,out_path):# 解决中文字符问题# 为了支持中文路径,请添加下面这句代码gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES")# 为了使属性表字段支持中文,请添加下面这句gdal.SetConfigOption("SHAPE_ENCODING", "CP936")# 注册所有的驱动ogr.RegisterAll()ds = ogr.Open(in_path, 0)if ds is None:  # 打开失败print("打开失败")# 获取该数据源中的图层个数,一般shp数据图层只有一个,如果是mdb、dxf等图层就会有多个layer_count = ds.GetLayerCount()if layer_count != 1:print("图层数量异常")driver = ogr.GetDriverByName("ESRI Shapefile")out_ds = driver.CreateDataSource(out_path)in_lyr = ds.GetLayer()out_lyr = out_ds.CreateLayer('Point', in_lyr.GetSpatialRef(), geom_type=ogr.wkbPoint)# 获取文件字段属性in_feature = in_lyr.GetNextFeature()# 复制全部的字段in_feature_defn = in_lyr.GetLayerDefn()field_names = []for i in range(0, in_feature_defn.GetFieldCount()):field_defn = in_feature_defn.GetFieldDefn(i)field_name = field_defn.namefield_names.append(field_name)# 输出layer创建字段out_lyr.CreateField(field_defn)# 获取输出图层属性表信息out_feature_defn = out_lyr.GetLayerDefn()feature = in_lyr.GetFeature(0)# 遍历要素while feature:new_feature = ogr.Feature(out_feature_defn)# 添加点要素geom = feature.GetGeometryRef()center = geom.Centroid()new_feature.SetGeometry(center)# 复制所有字段属性for field_name in field_names:area = feature.GetField(field_name)# 添加点的字段值new_feature.SetField(field_name, area)# 添加要素到图层out_lyr.CreateFeature(new_feature)feature = in_lyr.GetNextFeature()out_ds.Destroy()if __name__ == '__main__':shp_path = "E:/测试数据/DK4107262017.shp"out_path = "E:/测试数据/out.shp"area_to_point(shp_path,out_path)

提取效果

Python+GDAL面数据中心点提取为单独shape文件,并复制属性数据相关推荐

  1. Python Re 正则表达式 数据匹配提取 基本使用

    Python re 正则表达式 数据匹配提取 基本使用 小洲提示:代码可直接复制在编译器中运行,方便更好的理解 文章目录 Python re 正则表达式 数据匹配提取 基本使用 前言 一.导入库,内置 ...

  2. halcon边缘提取颜色相近_初学者福利!三种用Python从图像数据中提取特征的技术...

    全文共4073字,预计学习时长8分钟 你之前是否使用过图像数据?也许你想建立自己的物体检测模型,或者仅仅是想统计走进某栋建筑物的人数,使用计算机视觉技术处理图像拥有无穷无尽的可能性. 但数据科学家最近 ...

  3. html怎么拿json数据,如何使用Python从HTML数据中提取JSON数据?

    我正在尝试制作一个python脚本,可以在outlook中读取JSON数据电子邮件.但是问题是如何从HTML数据中提取JSON数据.这是我要提取的原始JSON数据.在{ "vpn_detai ...

  4. Python对json数据的提取

    JSON的全称是"JavaScript Object Notation",意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.XML也是一种数据 ...

  5. Python新手的数据批量处理教程(TXT文件)

    最近想用python批量处理数据,把自己网上找答案的过程整理了一下,希望对大家有用. 问题: 一个文件夹中有38个txt文件,这38个txt的命名各不相同,要把这38个txt文件中的数据整合到一个tx ...

  6. Python将txt数据转换为xls(表格)文件,方便后面做数据分析

    Python我们做数据分析的时候有时候获得数据是txt文件,这时候我们该怎么办呢?下面我给大家教一下这时候应该怎么做? 1.读取txt数据查看:我们就可以看到使用逗号隔开的数据. "&quo ...

  7. python指定时间范围数据_Python提取特定时间段内数据的方法实例

    Python提取特定时间段内数据的方法实例 发布时间:2020-09-24 05:46:06 来源:脚本之家 阅读:75 作者:淮南草 python提取特定时间段内的数据 尝试一下: data['Da ...

  8. Python爬虫之数据解析/提取(二)

    文章目录 前言 数据分析分类 数据解析原理概述 一.正则re进行数据解析 1.1 爬取糗事百科中糗图板块下所有的糗图图片⭐ 二.bs4解析概述 2.1 获取整个标签 2.2 获取标签属性或者存储的文本 ...

  9. python获取同花顺数据_Python提取Wind数据

    果然是中文编码的问题.搞定了,新鲜出炉一个小脚本.谢谢各位大神的解答. """ @Author: wenrongli @Date: 2014-11-18 @Version ...

最新文章

  1. ORB-SLAM中的ORB特征(提取)
  2. linux下uptime命令详解
  3. git reset 命令详解(一)—— Git 学习笔记 07
  4. linux 编译 freescale arm 的gdb server
  5. React开发(231):常见手机号邮箱的正则
  6. win10设置默认输入法_个性化设置技巧
  7. 文件上传java逻辑_Java 文件上传 实例
  8. oracle 删除行记录,使用实体框架从oracle数据库中删除记录
  9. Spring启动的流程
  10. ASP.NET2.0小技巧--内部控件权限的实现
  11. Java 在匿名内部函数中为外部函数变量赋值的解决方案
  12. Java 方法的反射
  13. json格式化工具有哪些?在项目中使用什么工具来格式化JSON数据?
  14. 高等数学辅导讲义_历年真题,复习讲义的经验分享(数二127分)
  15. 显卡刷bios改型号_A卡修改BIOS软件/刷显卡BIOS软件
  16. [李景山php] ddos 防御基础
  17. JS实现随机抽奖功能
  18. Java选择题(八)
  19. 翻译Deep Learning and the Game of Go(3)第2章:围棋是一个机器学习难题(规则部分就不翻了)
  20. 2022支付宝集五福活动开始了 有哪些集福方法你知道吗?

热门文章

  1. led显示屏十大品牌
  2. 面试题:构造方法中可不可以有return语句呢?
  3. 格式化————format
  4. C语言 N个人围圈报数,数到3退出
  5. 正则表达式(手机号前带区号)
  6. 大数据培训需要有基础吗
  7. 消除ImageList 图片锯齿
  8. 2017.7.10 noi2008 假面舞会
  9. VMWare虚拟机和主机共享/传输/拷贝文件三种方法
  10. es6通过Map对象对数组去重