python中geometry用法_pythongdal教程之:几何形状geometry与投影projection
建立空的geometry对象:ogr.Geometry
定义各种不同的geometry使用的方法是不一样的(point, line, polygon, etc)
新建点point,使用方法AddPoint( , , [])。其中的z坐标一般是省略的,默认值是0
例如:
point = ogr.Geometry(ogr.wkbPoint)
point.AddPoint(10,20)
新建line
使用AddPoint(, , [])添加点
使用SetPoint(, , , [])更改点的坐标
例如下面这段代码,更改了0号点的坐标:
line = ogr.Geometry(ogr.wkbLineString)
line.AddPoint(10,10)
line.AddPoint(20,20)
line.SetPoint(0,30,30) #(10,10) -> (30,30)
统计所有点的数目
print line.GetPointCount()
读取0号点的x坐标和y坐标
print line.GetX(0)
print line.GetY(0)
新建多边形,首先要新建环(ring),然后把环添加到多边形对象中。
如何创建一个ring?先新建一个ring对象,然后向里面逐个添加点。
ring = ogr.Geometry(ogr.wkbLinearRing)
ring.AddPoint(0,0)
ring.AddPoint(100,0)
ring.AddPoint(100,100)
ring.AddPoint(0,100)
结束的时候,用CloseRings关闭ring,或者将最后一个点的坐标设定为与第一个点相同。
ring.CloseRings()
ring.AddPoint(0,0)
下面举一个例子,创建一个方框。这是个polygon对象,又例外两层ring构成。
outring = ogr.Geometry(ogr.wkbLinearRing)
outring.AddPoint(0,0)
outring.AddPoint(100,0)
outring.AddPoint(100,100)
outring.AddPoint(0,100)
outring.AddPoint(0,0)
inring = ogr.Geometry(ogr.wkbLinearRing)inring = ogr.Geometry(ogr.wkbLinearRing)
inring.AddPoint(25,25)
inring.AddPoint(75,25)
inring.AddPoint(75,75)
inring.AddPoint(25,75)
inring.CloseRings()
polygon = ogr.Geometry(ogr.wkbPolygon)
polygon.AddGeometry(outring)
polygon.AddGeometry(inring)
最后三句话比较重要,就是先建立一个polygon对象,然后添加外层ring和内层ring
下面这句话可以帮你数数你的polygon能有几个ring
print polygon.GetGeometryCount()
从polygon中读取ring,index的顺序和创建polygon时添加ring的顺序相同
outring = polygon.GetGeometryRef(0)
inring = polygon.GetGeometryRef(1)
创建复合几何形状multi geometry
例如MultiPoint, MultiLineString, MultiPolygon
用AddGeometry把普通的几何形状加到复合几何形状中,例如:
multipoint = ogr.Geometry(ogr.wkbMultiPoint)
point = ogr.Geometry(ogr.wkbPoint)point = ogr.Geometry(ogr.wkbPoint)
point.AddPoint(10,10)
multipoint.AddGeometry(point)
point.AddPoint(20,20)
multipoint.AddGeometry(point)
读取MultiGeometry中的Geometry,方法和从Polygon中读取ring是一样的,可以说Polygon是一种内置的MultiGeometry。
不要删除一个已存在的Feature的Geometry,会把python搞崩溃的
只能删除脚本运行期间创建的Geometry,比方说手工创建出来的,或者调用其他函数自动创建的。就算这个Geometry已经用来创建别的Feature,你还是可以删除它。
例如:Polygon.Destroy()
关于投影Projections,使用SpatialReference对象
多种多样的Projections,GDAL支持WKT, PROJ.4, ESPG, USGS, ESRI.prj
可以从layer和Geometry中读取Projections,例如:
spatialRef = layer.GetSpatialRef()
spatialRef = geom.GetSpatialReference()
投影信息一般存储在.prj文件中,如果没有这个文件,上述函数返回None
建立一个新的Projection:
首先导入osr库,之后使用osr.SpatialReference()创建SpatialReference对象
之后用下列语句向SpatialReference对象导入投影信息
•ImportFromWkt()
•ImportFromEPSG()
•ImportFromProj4()
•ImportFromESRI()
•ImportFromPCI(, ,
)
•ImportFromUSGS(, )
•ImportFromXML()
导出Projection,使用下面的语句可以导出为字符串
•ExportToWkt()
•ExportToPrettyWkt()
•ExportToProj4()
•ExportToPCI()
•ExportToUSGS()
•ExportToXML()
对一个几何形状Geometry进行投影变换,要先初始化两个Projection,然后创建一个CoordinateTransformation对象,用它来做变换
sourceSR = osr.SpatialReference()
sourceSR.ImportFromEPSG(32612) #UTM 12N WGS84
targetSR = osr.SpatialReference()
targetSR.ImportFromEPSG(4326) #Geo WGS84
coordTrans = osr.CoordinateTransformation(sourceSR, targetSR)
geom.Transform(coordTrans)
但是这段代码很让人蛋疼!在windows里面跑不通。老外的论坛里面有讨论,说在linux里面没问题,windows死活不行,哎。。。
另外还有几个要注意的地方:
要在适当的时候编辑Geometry,投影变换之后最好就不要再动了吧。
对一个数据源DataSource里面的所有Geometry做投影变换,你得一个一个来。用个循环吧。
将你的投影写入.prj文件,其实很简单。首先MorphToESRI(),转成字符串,然后开个文本文件往里面写就行了。例如:
targetSR.MorphToESRI()
file = open('test.prj', 'w')
file.write(targetSR.ExportToWkt())
ffile.close()
以上就是python gdal教程之:几何形状geometry与投影projection的内容,更多相关内容请关注PHP中文网(www.gxlcms.com)!
本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉
本文系统来源:php中文网
python中geometry用法_pythongdal教程之:几何形状geometry与投影projection相关推荐
- python修饰符用法_c#教程之C#语言中的修饰符汇总
https://www.xin3721.com/eschool/python.html 修饰符是用于限定类型以及类型成员的申明的一种符号. 下面主要从C#中的访问修饰符,作用于类和结构的修饰符,用在方 ...
- python 几何教学_python gdal教程之:几何形状geometry与投影projection
建立空的geometry对象:ogr.Geometry 定义各种不同的geometry使用的方法是不一样的(point, line, polygon, etc) 新建点point,使用方法AddPoi ...
- Python中self用法详解
Python中self用法详解 https://blog.csdn.net/CLHugh/article/details/75000104 首页 博客 学院 下载 图文课 论坛 APP 问答 商城 V ...
- 简单介绍Python中异常处理用法
这篇文章主要给大家分享的是 Python中异常处理用法,为了保证程序的健壮性与容错性,即在遇到错误时候程序不会崩溃,我们需要对异常进行处理,下面来看看文章对此的用法,需要的朋友可以参考一下 为了保证程 ...
- python中 的用法_详解python中@的用法
python中@的用法 @是一个装饰器,针对函数,起调用传参的作用. 有修饰和被修饰的区别,@function作为一个装饰器,用来修饰紧跟着的函数(可以是另一个装饰器,也可以是函数定义). 代码1 结 ...
- python讲解-详解python中@的用法
python中@的用法 @是一个装饰器,针对函数,起调用传参的作用. 有修饰和被修饰的区别,"@function"作为一个装饰器,用来修饰紧跟着的函数(可以是另一个装饰器,也可以是 ...
- 【 Python 中 int 用法详解】(转载)
Python 中 int 用法详解 欢迎转载,转载请注明出处! 文章目录 Python 中 int 用法详解 0. 参考资料 1. int 的无参数调用 2. int 接收数字作为参数 3. int ...
- Python 中 int 用法详解
Python 中 int 用法详解 欢迎转载,转载请注明出处! 文章目录 Python 中 int 用法详解 0. 参考资料 1. int 的无参数调用 2. int 接收数字作为参数 3. int ...
- python中“end=”用法
python中"end="用法:例如print("#",end=" \n"),默认换行,print("#",end=&q ...
最新文章
- C++难题之多态性详细解释
- IntellIJ IDEA 导入 Java 项目后无法运行 main 方法的解决方案
- android语音播放工具类,Android开发之MediaPlayer多媒体(音频,视频)播放工具类
- OS_FLAG.C(3)
- Hlg 1750 【树的最长路径】.cpp
- 【每日一题】4月27日题目精讲 Removal
- 大数据之-Hadoop之HDFS_HDFS的内容介绍---大数据之hadoop工作笔记0047
- 【SKILLS】About the phonetics
- 计算机软考网络工程师,软考之网络工程师总结
- 2021大厂Java面试真题(分布式 )
- POJ题目分类(转)
- 扫描仪 无线 打印服务器,树莓派搭建网络打印机 扫描仪服务器
- reference to ‘ max‘ is ambiguous
- 电脑网络经常掉线怎么办
- Unity3D 异步加载
- 企业/工作室官网 期末作业
- 华为matebook笔记本鸿蒙,聊聊鸿蒙对笔记本电脑行业的影响
- CICE海冰模式的编译
- 关于国家计算机二级C程序设计考点
- MediaPlayer基础
热门文章
- Java安全-注入漏洞(SQL注入、命令注入、表达式注入、模板注入)
- Matlab:实现绘制启动超音速风洞的稳定条件(附完整源码)
- 关于weight_decay的设定
- html表单新增类型,HTML5表单设计——新增输入类型和新增表单属性
- URLEncoder.encode(String url)和URLDecoder.decode(String url)
- 教程 | 使用小O地图制作文字标注地图
- 手机刷机是什么意思?快速了解手机刷机基本概念
- 计算机视觉公司「诠视科技 」获千万级Pre-A轮融资,君盛投资领投
- 全国马术场地障碍锦标赛
- VS中无法解析的外部命令的解决办法