使用ogr裁剪矢量数据
使用ogr裁剪矢量数据
由来:
近期有个需求,内容是这样的:我们有两个矢量数据,现在要求以一个矢量文件为底板,按字段对另一个矢量文件进行分割,生成若干小的shpfile文件
分析:
经过分析之后,将步骤拆解如下:
首先确保两个shpfile投影坐标系统一
如果出现不统一的情况,那么用Arcgis的工具Project进行投影转换。(
Data Management Tools--Projections and Transformations--Project
),链接如下https://www.sohu.com/a/292487012_488161。其次编写按属性字段分割shpfile,生成若干小shpfile的代码
接着编写根据layer创建shpfile的代码(https://www.cnblogs.com/bobird/articles/3079523.html)-->使用ogr中拷贝方法创建新的shpfile
最后进行循环,对每次生成的shpfile和原先的shpfile进行空间查询,得到layer后生成需要的shpfile
核心代码:
from osgeo import ogr, osr
import os
def createShpByLayer(shp, layer, fileType):
'''
根据layer创建shpfile
'''
driver = ogr.GetDriverByName("ESRI Shapefile")
ds = driver.CreateDataSource(shp)
pt_layer = ds.CopyLayer(layer, 'layername')
ds.Destroy()
def splitShp(shpfile, outPath, splitField):
'''
按属性字段分割shpfile
'''
ds = ogr.Open(shpfile)
lyr = ds.GetLayer(0)
for feat in lyr:
cityName = feat.GetField(splitField) # 以字段名为文件名称
outShp = os.path.join(outPath, str(cityName)+'.shp')
geom = feat.GetGeometryRef()
driver = ogr.GetDriverByName("ESRI Shapefile")
outDs = driver.CreateDataSource(outShp)
outLyr = outDs.CreateLayer("layername", lyr.GetSpatialRef(), ogr.wkbMultiPolygon)
outLyr.CreateFields(lyr.schema) # 创建字段属性
outFeat = ogr.Feature(lyr.GetLayerDefn())
for i in range(feat.GetFieldCount()):
val = feat.GetField(i)
outFeat.SetField(i, val)
outFeat.SetGeometry(geom)
outLyr.CreateFeature(outFeat)
outDs = None
def splitShpByShp(covershp, splitshp, outPath):
'''
@desc: 将一个shp按属性分割后,再用来分割另一个shp(空间查询)
'''
ds = ogr.Open(covershp)
lyr = ds.GetLayer(0)
splitDs = ogr.Open(splitshp)
splitLyr = splitDs.GetLayer(0)
for feat in lyr:
cityName = feat.GetField("NAME") # 以字段名为文件名称
outShp = os.path.join(outPath, str(cityName)+'.shp')
geom = feat.GetGeometryRef()
driver = ogr.GetDriverByName("memory")
outDs = driver.CreateDataSource("temp")
outLyr = outDs.CreateLayer("layername", lyr.GetSpatialRef(), ogr.wkbMultiPolygon)
outLyr.CreateFields(lyr.schema) # 创建字段属性
outFeat = ogr.Feature(lyr.GetLayerDefn())
for i in range(feat.GetFieldCount()):
val = feat.GetField(i)
# val = val.encode('utf8') # 将unicode编码转化为中文,还有点问题
outFeat.SetField(i, val)
outFeat.SetGeometry(geom)
outLyr.CreateFeature(outFeat)
outDs = None
splitLyr.SetSpatialFilter(geom) # 按空间查询
createShpByLayer(outShp, splitLyr, "ESRI Shapefile")
print("按空间查询的要素数量:"+ str(splitLyr.GetFeatureCount()))
不足之处
- 转出来的shpfile属性字段中,中文部分乱码,目前未能解决。
使用ogr裁剪矢量数据的更多相关文章
- ArcGIS超级工具SPTOOLS-按属性裁剪,矢量数据批量裁剪,矢量数据批量合库
1.1 按属性裁剪 操作视频: https://weibo.com/tv/v/HwaZRoosq?fid=1034:4376687438183117 按属性裁剪:可以图形表,也可以是非图形表,字段值 ...
- GDAL python教程(1)——用OGR读写矢量数据
本教程的讲义和源码都是取自Utah State University的openGIS课程 相关资料,包括讲义.源码.数据样例,请从此处下载http://www.gis.usu.edu/~chrisg/ ...
- gdal中文路径无法打开问题
在C#中使用OGR读写矢量数据时,需要引用“using OSGeo.OGR;”. 同时为了处理中文路径和中文字段,需要在开始设置下面两个属性,代码如下: //为了支持中文路径,请添加下面这句代码(大多 ...
- Python与开源GIS
https://www.osgeo.cn/pygis/ 这里列出了与 GIS 相关的 Python 开源类库与工具. 基础类库(抽象库) • GDAL/OGR 是大部分开源GIS的基础,也包括如Arc ...
- ogr ogr2ogr 矢量数据格式转换 ogrinfo 矢量数据图层信息操作 ogr gdal的一部分 gdal 命令行 库操作
- ARCGIS多种影像裁剪
在互联网上下载的遥感影像都进行过分幅处理,下载下来的影像多是规则的四方形,而在进行遥感影像研究时,多是针对特定区域来进行,比如研究北京市的遥感影像,不在北京市范围内的影像对于研究者就没有利用意义,如果 ...
- Python中使用面状矢量裁剪栅格影像,并依据Value值更改矢量属性
本文整体思路:在Python中使用Geopandas库,依次读取shp文件的每一个面状要素,获取其空间边界信息并裁剪对应的栅格影像,计算所裁剪影像Value值的众数,将其设置为对应面状要素的NewTY ...
- TerraGate SFS 4.5 版本 发布矢量数据使用的Cache数据如何再返回成shapefile文件
TerraGate SFS 4.5 版本 发布矢量数据使用的Cache数据如何再返回成shapefile文件? 两年前帮一个朋友解决过这个问题: 如果原来用4.5版本的时候,在网络环境下,为了提升调用 ...
- ENVI裁剪
一.basic tools-->resize data进行规则裁剪 虽然是进行图像重采样工具,但也可以用于简单快速的裁剪 1. 选中要裁剪的图像: 对话框下面选择spatial subset(构 ...
随机推荐
- SuperEdge 高可用云边隧道有哪些特点?
作者 作者李腾飞,腾讯容器技术研发工程师,腾讯云TKE后台研发,SuperEdge核心开发成员. 背景 在边缘集群中,边缘端和云端为单向网络,云端无法主动连接边缘端,常见的解决方案是边缘端主动和云端( ...
- 这个大表走索引字段查询的 SQL 怎么就成全扫描了,我TM人傻了
今天收到运营同学的一个 SQL,有点复杂,尤其是这个 SQL explain 都很长时间执行不出来,于是我们后台团队帮忙解决这个 SQL 问题,却正好发现了一个隐藏很深的线上问题. select a. ...
- FreeRTOS-05-队列
说明 本文仅作为学习FreeRTOS的记录文档,作为初学者肯定很多理解不对甚至错误的地方,望网友指正. FreeRTOS是一个RTOS(实时操作系统)系统,支持抢占式.合作式和时间片调度.适用于微处理 ...
- 【Mongodb】数据库备份与还原
Mongodb 备份与还原 Mongodb 备份与还原 文件快照 快照备份 快照直接还原 从压缩文件还原 复制文件 备份文件 从文件还原 mongodump mongodump备份 mongodump ...
- Solon 1.5.24 发布
本次版本主要变化: 修复 solon.extend.sessionstate.jwt 在特定场景下会无限次解析的问题 优化 solon.extend.cors 对头信息的处理 插件 solon.boo ...
- awk-07-IO和printf语句
IO语句 1.getline 2.getline var 把a文件的行,追加到b文件的结尾 把 a 文件的行替换 b 文件的指定字段 把 a 文件的行替换 b 文件的对应字段 3.command | ...
- 过去,我买漫画看;现在,我用Python爬虫来看
原标题:运用Python多线程爬虫下载漫画 前言: 以前,我都是买漫画书看的,那个时候没有电脑.今天,我到网上看了一下,发现网上提供漫画看,但是时时需要网络啊!为什么不将它下载下来呢! 1.怎样实现 ...
- pikachu 不安全的url跳转
不安全的url跳转问题可能发生在一切执行了url地址跳转的地方.如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话就可能发生&q ...
- Skywalking-07:OAL原理——解释器实现
OAL 解释器实现 OAL 解释器是基于 Antlr4 实现的,我们先来了解下 Antlr4 Antlr4 基本介绍 Antlr4 使用案例 参考Antlr4的使用简介这篇文章,我们实现了一个简单的案 ...
- CPU 指令环 ring0,ring1,ring2,ring3
Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3. Windows只使用其中的两个级别RING0和RING3,RING0只给操作系统用,RING3谁都能用.如果 ...