日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

OGR几何要素处理(创建编辑点线面)——Python地理数据处理学习分享

發(fā)布時(shí)間:2023/12/15 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OGR几何要素处理(创建编辑点线面)——Python地理数据处理学习分享 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄:

一、處理點(diǎn)要素

1.創(chuàng)建編輯單點(diǎn)

?2.在一個(gè)要素中創(chuàng)建多點(diǎn)

二、處理線要素

1.創(chuàng)建和編輯單條線

2.創(chuàng)建和編輯多線為一個(gè)要素

三、處理面要素

1.創(chuàng)建和編輯環(huán)行線和單個(gè)多邊形

2.創(chuàng)建多個(gè)多邊形為一個(gè)要素


一、處理點(diǎn)要素

1.創(chuàng)建編輯單點(diǎn)

? ? ? ? 對(duì)于創(chuàng)建單點(diǎn)的操作,我們需要OGR庫(kù)中的幾個(gè)函數(shù)。ogr.Geometry(ogr.__)表示用來(lái)創(chuàng)建一個(gè)幾何對(duì)象要素,括號(hào)內(nèi)__參數(shù)如下:

? ? ? ? 對(duì)于創(chuàng)建單點(diǎn)對(duì)象要素的操作,我們這里對(duì)于輸入ogr.wkbPoint確認(rèn)幾何類型為2D的點(diǎn)。在點(diǎn)創(chuàng)建完成后可以使用Add.Point()來(lái)創(chuàng)建一個(gè)新的單點(diǎn),同時(shí)可以采用.GetX/Y()獲取他的X/Y值,或直接打印該點(diǎn)查看。此外可以用SetPoint(point,x,y,[z])來(lái)編輯這個(gè)點(diǎn),其中point代表對(duì)象中點(diǎn)的幾何索引FID(如:0、1、2....,如果只有一個(gè)點(diǎn),則僅有唯一FID為0),X/Y/Z分別代表他的三個(gè)坐標(biāo)。

實(shí)例代碼如下:

# 導(dǎo)入模板 from osgeo import ogr import os from ospybook.vectorplotter import VectorPlotter # 創(chuàng)建點(diǎn) new_point = ogr.Geometry(ogr.wkbPoint) new_point.AddPoint(100,20) # 查看創(chuàng)建點(diǎn)信息 x,y=new_point.GetX(),new_point.GetY() print(x,y,new_point) # 打印到圖像上 vp=VectorPlotter(False) vp.plot(new_point,'rs') vp.draw() # 編輯第一個(gè)點(diǎn),FID索引為0 new_point.SetPoint(0,10,20) print(new_point)

?2.在一個(gè)要素中創(chuàng)建多點(diǎn)

? ? ? ? 前面我們使用過(guò)單點(diǎn)要素的創(chuàng)建,但有時(shí)我們有時(shí)讓一個(gè)變量(要素)包含多個(gè)點(diǎn)。對(duì)于該操作我們至少需要?jiǎng)?chuàng)建兩個(gè)幾何對(duì)象。至少需要一個(gè)點(diǎn)對(duì)象和一個(gè)多點(diǎn)對(duì)象來(lái)容納。

# 導(dǎo)入模板 from osgeo import ogr import os from ospybook.vectorplotter import VectorPlotter # 創(chuàng)建單點(diǎn)和多點(diǎn)要素 new_points=ogr.Geometry(ogr.wkbMultiPoint) new_point=ogr.Geometry(ogr.wkbPoint) # 多次將單點(diǎn)導(dǎo)入單點(diǎn) new_point.AddPoint(10,20) new_points.AddGeometry(new_point) new_point.AddPoint(20,30) new_points.AddGeometry(new_point) new_point.AddPoint(50,10) new_points.AddGeometry(new_point) # 將多點(diǎn)打印在圖像上 vp=VectorPlotter(False) vp.plot(new_points,'bo') vp.draw()

二、處理線要素

1.創(chuàng)建和編輯單條線

? ? ? ? 線要素是通過(guò)直線將多個(gè)頂點(diǎn)或點(diǎn)相連。創(chuàng)建線的第一步就是創(chuàng)建一個(gè)空的幾何對(duì)象,然后添加頂點(diǎn)(按順序)。

# 導(dǎo)入模板 from osgeo import ogr import os from ospybook.vectorplotter import VectorPlotter # 第一部分創(chuàng)建單線 # 創(chuàng)建單條線 new_line=ogr.Geometry(ogr.wkbLineString) new_line.AddPoint(5,6) new_line.AddPoint(7,9) new_line.AddPoint(10,14) new_line.AddPoint(1,5) # 打印在圖像中 vp=VectorPlotter(False) vp.plot(new_line,'b-') vp.draw() print(new_line) # 第二部分修改點(diǎn) # 更改第四個(gè)頂點(diǎn)位置并打印 new_line.SetPoint(3,12,16) vp.plot(new_line,'y--') vp.draw() print(new_line.GetPoints()) # 第三部分在兩個(gè)點(diǎn)之間增加一個(gè)點(diǎn) # 添加一個(gè)點(diǎn)_將頂點(diǎn)轉(zhuǎn)為元組 line_list=new_line.GetPoints() line_list[2:2]=[(30,40)] print(line_list) # 添加一個(gè)點(diǎn)_元組導(dǎo)成頂點(diǎn) add_line=ogr.Geometry(ogr.wkbLineString) for i in line_list:add_line.AddPoint(*i) vp.plot(add_line,'r:') vp.draw() print(add_line)

? ? ? ? 在代碼第一個(gè)部分中,首先我們利用ogr.Geometry(ogr.wkbLineString)創(chuàng)建了一個(gè)線要素,然后挨個(gè)添加頂點(diǎn)(在線要素中,不會(huì)頂替上一個(gè)點(diǎn)的信息,這一點(diǎn)與點(diǎn)不同),增加的頂點(diǎn)會(huì)自己連成線,然后輸出打印。

? ? ? ? 在第二部分修改點(diǎn)坐標(biāo)中,與點(diǎn)要素類似,通過(guò)SetPoint(索引FID,X,Y)來(lái)修改點(diǎn)的信息。

? ? ? ? 第三部分則實(shí)現(xiàn)了在兩點(diǎn)之間增加新點(diǎn)的操作。首先通過(guò) 對(duì)象.GetPoints()來(lái)獲取一個(gè)新的元組列表,用list[a:a]=[坐標(biāo)元組],將新的坐標(biāo)值以元組形式傳入列表中。然后創(chuàng)建一個(gè)新的線要素,利用for循環(huán)將列表的元組轉(zhuǎn)化為坐標(biāo)加入到新線要素中(注意:for循環(huán)時(shí)使用*將頂點(diǎn)炸開為兩個(gè)參數(shù),而一個(gè)元組整體是不能應(yīng)用于AddPoint()函數(shù)的),并打印出圖。

2.創(chuàng)建和編輯多線為一個(gè)要素

? ? ? ? 對(duì)于多線的操作與點(diǎn)類似,分別建立不同的單線要素,再將這些要素添加到多線要素中。

# 導(dǎo)入模板 from osgeo import ogr import os from ospybook.vectorplotter import VectorPlotter import ospybook as pb # 創(chuàng)建單條線3組 new_line1=ogr.Geometry(ogr.wkbLineString) new_line1.AddPoint(5,6) new_line1.AddPoint(7,9) new_line1.AddPoint(10,14) new_line1.AddPoint(1,5) new_line2=ogr.Geometry(ogr.wkbLineString) new_line2.AddPoint(8,6) new_line2.AddPoint(7,4) new_line2.AddPoint(20,14) new_line3=ogr.Geometry(ogr.wkbLineString) new_line3.AddPoint(15,16) new_line3.AddPoint(4,9) new_line3.AddPoint(10,14) new_line3.AddPoint(11,5) # 創(chuàng)立多線要素,并將單線添加到里面 line=ogr.Geometry(ogr.wkbMultiLineString) line.AddGeometry(new_line1) line.AddGeometry(new_line2) line.AddGeometry(new_line3) # 結(jié)果顯示 vp=VectorPlotter(False) vp.plot(line,'b-') vp.draw() print(line)

三、處理面要素

1.創(chuàng)建和編輯環(huán)行線和單個(gè)多邊形

? ? ? ? 簡(jiǎn)單來(lái)看,多邊形是由線構(gòu)成,我們把這些線稱為環(huán)形線,因此當(dāng)我們想構(gòu)建一個(gè)多邊形就要先構(gòu)建圍城多邊形的環(huán)形線。

? ? ? ? 開始構(gòu)建環(huán)形線的操作與線相同,逐個(gè)添加頂點(diǎn)并形成線。這里注意的時(shí),環(huán)形線需要閉合,在構(gòu)建環(huán)形線時(shí)確定第一個(gè)點(diǎn)和最后一個(gè)點(diǎn)的坐標(biāo)相同或環(huán)形或多邊形上調(diào)用CloseRings()函數(shù)使其閉合。??

? ? ? ? 環(huán)形線構(gòu)成后添加到新建的面要素中即可完成對(duì)單面的創(chuàng)建。

# 導(dǎo)入模板 from osgeo import ogr import os from ospybook.vectorplotter import VectorPlotter import ospybook as pb # 創(chuàng)建環(huán)形線 new_ring=ogr.Geometry(ogr.wkbLinearRing) new_ring.AddPoint(10,14) new_ring.AddPoint(15,14) new_ring.AddPoint(15,22) new_ring.AddPoint(10,22) # 創(chuàng)建單個(gè)多邊形 new_polygon=ogr.Geometry(ogr.wkbPolygon) new_polygon.AddGeometry(new_ring) # 閉合多邊形,如果在環(huán)形線添加最后一個(gè)點(diǎn)也第一個(gè)點(diǎn)坐標(biāo)相同可不進(jìn)行此操作 new_polygon.CloseRings() # 繪制圖形 vp=VectorPlotter(False) vp.plot(new_polygon,'b') vp.draw()

? ? ? ? 對(duì)于多邊形的編輯我們首先要改變他的環(huán)形線,再對(duì)多邊形進(jìn)行編輯。

# 導(dǎo)入模板 from osgeo import ogr import os from ospybook.vectorplotter import VectorPlotter import ospybook as pb # 此操作同創(chuàng)建單個(gè)多邊形 # 創(chuàng)建環(huán)形線 new_ring=ogr.Geometry(ogr.wkbLinearRing) new_ring.AddPoint(10,14) new_ring.AddPoint(15,14) new_ring.AddPoint(15,22) new_ring.AddPoint(10,22) # 創(chuàng)建單個(gè)多邊形 new_polygon=ogr.Geometry(ogr.wkbPolygon) new_polygon.AddGeometry(new_ring) # 閉合多邊形,如果在環(huán)形線添加最后一個(gè)點(diǎn)也第一個(gè)點(diǎn)坐標(biāo)相同可不進(jìn)行此操作 new_polygon.CloseRings() # 繪制圖形 vp=VectorPlotter(False) vp.plot(new_polygon,'b') vp.draw() # 編輯多邊形 # 改變某個(gè)點(diǎn)位置改變多邊形 ring=new_polygon.GetGeometryRef(0) ring.SetPoint(0,9,14) # 通過(guò)列表轉(zhuǎn)換,用兩個(gè)頂點(diǎn)代替第三個(gè)頂點(diǎn) list=ring.GetPoints() list[2:3]=((16,14),(16,23)) for i in range(len(list)):ring.SetPoint(i,*list[i]) polygon=ogr.Geometry(ogr.wkbPolygon) polygon.AddGeometry(ring) vp.plot(polygon,'b') vp.draw()

2.創(chuàng)建多個(gè)多邊形為一個(gè)要素

? ? ? ? 創(chuàng)建多個(gè)多邊形的操作與線相同,分別創(chuàng)建不同的多邊形進(jìn)行加入。

# 導(dǎo)入模板 from osgeo import ogr import os from ospybook.vectorplotter import VectorPlotter import ospybook as pb # 創(chuàng)建兩個(gè)多邊形 ring1=ogr.Geometry(ogr.wkbLinearRing) ring1.AddPoint(10,10) ring1.AddPoint(10,15) ring1.AddPoint(15,15) polygon1=ogr.Geometry(ogr.wkbPolygon) polygon1.AddGeometry(ring1) ring2=ogr.Geometry(ogr.wkbLinearRing) ring2.AddPoint(10,12) ring2.AddPoint(15,5) ring2.AddPoint(10,4) polygon2=ogr.Geometry(ogr.wkbPolygon) polygon2.AddGeometry(ring2) # 創(chuàng)建一個(gè)要素多個(gè)多邊形 polygon=ogr.Geometry(ogr.wkbMultiPolygon) polygon.AddGeometry(polygon1) polygon.AddGeometry(polygon2) polygon.CloseRings() vp=VectorPlotter(False) vp.plot(polygon,fill=False,ec='b') vp.draw()

總結(jié)

以上是生活随笔為你收集整理的OGR几何要素处理(创建编辑点线面)——Python地理数据处理学习分享的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品理论片| 国产ts在线观看 | 黄色一级片免费在线观看 | 五月天婷婷在线观看 | 精品视频在线播放 | 怡红院精品视频 | 青青草97国产精品麻豆 | 91精产国品 | 美女日批在线观看 | 奇米影视在线视频 | 午夜一级在线 | 欧美日韩精品一区二区三区 | 国产成人精品一区二区三区在线 | 日本欧美一区二区三区 | 高清一区二区 | 夜久久久 | 日韩综合在线视频 | 99re99| 成人黄色在线观看视频 | 免费日本黄色 | 午夜爽爽爽视频 | 96免费视频 | 国产欧美日韩综合精品一区 | 免费毛片一级 | 在线视频一二区 | 激情麻豆 | 青青草免费公开视频 | 亚洲欧洲自拍 | 激情综| 亚洲区成人 | www.国产在线视频 | 亚洲在线中文字幕 | 国产精品麻豆入口 | 337p日本大胆噜噜噜鲁 | 一级片亚洲 | 日韩在线中文字幕视频 | 性一交一乱一色一视频麻豆 | 97久久综合| 日本高清xxx | 玩弄人妻少妇500系列视频 | 国产在线播放一区二区 | 亚洲成人精品久久久 | 这里只有精品视频 | 九九热播视频 | 秋霞成人午夜伦在线观看 | 免费在线欧美 | 猛1被调教成公厕尿便失禁网站 | 99色婷婷| 天堂一区在线 | 亚洲人无码成www久久 | av观看免费在线 | 久久五月天综合 | a级片免费看 | 性xxxx狂欢老少配o | 日皮毛片 | 日皮在线观看 | 中文字字幕在线观看 | 亚洲福利国产 | 一区二区三区播放 | 中文字幕在线三区 | 亚洲色图视频在线观看 | 噜噜噜视频 | 天堂在线观看免费视频 | 激情国产一区 | 久久久久久久久久久久久久久久久久久久 | 国产特黄| 久久久久久久中文字幕 | 亚洲激情一区二区 | 神马午夜伦理 | 激情综合色 | 美女扒开腿让男人操 | 国内自拍视频网站 | 久久午夜神器 | 最新av中文字幕 | 欧洲黄色片 | 国产精品熟妇一区二区三区四区 | jzzjzzjzz亚洲成熟少妇 | 国产午夜福利视频在线观看 | 久久精品视频免费看 | 视频一区二区三 | 青青草原一区二区 | 日本a在线 | 91成人在线免费观看 | a在线观看视频 | h部分肌肉警猛淫文 | 亚洲男女av | 免费黄视频网站 | 亚洲午夜av在线 | 日韩在线第三页 | 成人久久久精品乱码一区二区三区 | 成人黄色小说视频 | 国产精品va无码一区二区三区 | 香蕉av777xxx色综合一区 | 尤物最新网址 | 久草最新 | 中文永久免费观看 | 日本美女全裸 | 久久99视频精品 | 国产欧美精品一区二区三区app |