python 几何教学_python gdal教程之:几何形状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的内容,更多相关内容请关注龙方网络(www.yzlfxy.com)!
python 几何教学_python gdal教程之:几何形状geometry与投影projection相关推荐
- python中geometry用法_pythongdal教程之:几何形状geometry与投影projection
建立空的geometry对象:ogr.Geometry 定义各种不同的geometry使用的方法是不一样的(point, line, polygon, etc) 新建点point,使用方法AddPoi ...
- python set 原理_Python基础教程之dict和set
1. dict Python中的dict等于js中的 map ,使用键-值(key-value)存储,具有极快的查找速度. 如果 我们要根据同学的姓名去查找他的成绩在不用dict的情况下.就需要两个l ...
- python networkx教程_Python 学习教程之networkx
networkx是Python的一个包,用于构建和操作复杂的图结构,提供分析图的算法.图是由顶点.边和可选的属性构成的数据结构,顶点表示数据,边是由两个顶点唯一确定的,表示两个顶点之间的关系.顶点和边 ...
- python ogr_python gdal教程之:用ogr读写矢量数据
为什么用open source? 优点 1. 免费,适合个人和小公司 2. 强大的开发工具,找bug更容易 3. 跨平台,windows和linux都能用 4. 拉风! 缺点 1. 没有内嵌地理处理器 ...
- python设置mysql外键_python基础教程之MySQL数据库之-foreign key 外键(一
今日重点:外键 一对多 多对多 一对一 -------------------------------------------------------------------------------- ...
- python浮点数运算问题_python基础教程之. 浮点数运算:问题和局限
14. 浮点数运算:问题和局限¶ 浮点数在计算机硬件中表示为以 2 为底(二进制)的小数.例如,十进制小数 0.125 是1/10 + 2/100 + 5/1000 的值,同样二进制小数 0.001 ...
- python入门之字符串处理_python基础教程之python字符串处理方法|python基础教程|python入门|python教程...
https://www.xin3721.com/eschool/pythonxin3721/ 字符和字符串可以用来相加来组合成一个字符串输出: 字符或字符串复制输出. 二.Extract &S ...
- python图像的几何运算_python中图像的几何扭曲
我想用python对图像执行几何变换,沿着给定的曲线"拉直"或校正图像.似乎scikit图像ProjectiveTransform()和{}对于这一点非常好,但是文档很少.我遵循了 ...
- python零基础入门建模_python基础教程之Python 建模步骤|python基础教程|python入门|python教程...
#%%#载入数据 .查看相关信息 importpandas as pdimportnumpy as npfrom sklearn.preprocessing importLabelEncoderpri ...
最新文章
- Outlook Hotmail Connector
- ubuntu 中安装memcache,并给出一个简单的实例·
- 提取LSA密码lsadump
- Pycharm中导入的模块名下出现红色波浪线问题
- 操作系统【信号量集机制、“读者-写者”问题】
- SAP Spartacus CmsPage的加载逻辑
- CentOS 6.5安装VNC server
- (C/C++) 算法,编程题
- Power Shell08当你远程运行powershell指令(不需要管理员权限)
- greenplum管理员日常任务
- jmeter如何看tps_jmeter性能测试疑难杂症解决思路
- java 动态修改prooper_java中OOP自己总结的知识点
- Flutter框架优缺点
- OCR证件识别及其衍生产品介绍
- 【步态识别】GaitMPL
- CC2430基础——LED控制实验
- php 图片 变灰色,php实现给图片加灰色半透明效果的方法_PHP
- Confluence使用教程 用户手册
- python抓取下载https://unsplash.com/的图片
- 抑制广播风暴 各种发包
热门文章
- 那时我们还年轻[转]
- 安卓查看内存读写测试软件_苹果危机,iPhone 的流畅度被安卓超越?
- numpy transpose 和 pytorch transpose
- Android 网络 --framework层面 -two
- 腾讯公司副总裁梁柱:QQ即将上线3D厘米秀等功能 继续强化年轻社交
- ssm+java计算机毕业设计幼儿英语学习平台的设计与实现yofnu(程序+lw+源码+远程部署)
- 什么是ocaml语言之ocaml语言入门
- 命名规范与注释规范概述
- 顺丰2022半年报:成绩单背后的业务韧性
- 【前端实例代码】Html5+css3创建拟物风格昏昏欲睡的云朵动画网页效果~前端开发网页设计基础入门教程~适合初学者~超简单~