日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python使用gdal對(duì)shp讀取,新建和更新的實(shí)例

瀏覽:25日期:2022-08-02 17:52:00

昨天要處理一個(gè)shp文件,讀取里面的信息,做個(gè)計(jì)算然后寫到后面新建的field里面。先寫個(gè)外面網(wǎng)上都能找到的新建和讀取吧。

1.讀取shp文件

#-*- coding: cp936 -*-try: from osgeo import gdal from osgeo import ogrexceptImportError: import gdal import ogr defReadVectorFile(): # 為了支持中文路徑,請(qǐng)?zhí)砑酉旅孢@句代碼 gdal.SetConfigOption('GDAL_FILENAME_IS_UTF8','NO') # 為了使屬性表字段支持中文,請(qǐng)?zhí)砑酉旅孢@句 gdal.SetConfigOption('SHAPE_ENCODING','') strVectorFile ='E:DatumGDALCsTestDebugbeijing.shp' # 注冊(cè)所有的驅(qū)動(dòng) ogr.RegisterAll() #打開數(shù)據(jù) ds = ogr.Open(strVectorFile, 0) if ds == None: print('打開文件【%s】失敗!', strVectorFile) return print('打開文件【%s】成功!', strVectorFile) # 獲取該數(shù)據(jù)源中的圖層個(gè)數(shù),一般shp數(shù)據(jù)圖層只有一個(gè),如果是mdb、dxf等圖層就會(huì)有多個(gè) iLayerCount = ds.GetLayerCount() # 獲取第一個(gè)圖層 oLayer = ds.GetLayerByIndex(0) if oLayer == None: print('獲取第%d個(gè)圖層失??!n', 0) return # 對(duì)圖層進(jìn)行初始化,如果對(duì)圖層進(jìn)行了過濾操作,執(zhí)行這句后,之前的過濾全部清空 oLayer.ResetReading() # 通過屬性表的SQL語句對(duì)圖層中的要素進(jìn)行篩選,這部分詳細(xì)參考SQL查詢章節(jié)內(nèi)容 oLayer.SetAttributeFilter(''NAME99'LIKE '北京市市轄區(qū)'') # 通過指定的幾何對(duì)象對(duì)圖層中的要素進(jìn)行篩選 #oLayer.SetSpatialFilter() # 通過指定的四至范圍對(duì)圖層中的要素進(jìn)行篩選 #oLayer.SetSpatialFilterRect() # 獲取圖層中的屬性表表頭并輸出 print('屬性表結(jié)構(gòu)信息:') oDefn = oLayer.GetLayerDefn() iFieldCount = oDefn.GetFieldCount() for iAttr in range(iFieldCount): oField =oDefn.GetFieldDefn(iAttr) print( '%s: %s(%d.%d)' % ( oField.GetNameRef(), oField.GetFieldTypeName(oField.GetType() ), oField.GetWidth(), oField.GetPrecision())) # 輸出圖層中的要素個(gè)數(shù) print('要素個(gè)數(shù) = %d', oLayer.GetFeatureCount(0)) oFeature = oLayer.GetNextFeature() # 下面開始遍歷圖層中的要素 while oFeature is not None: print('當(dāng)前處理第%d個(gè): n屬性值:', oFeature.GetFID()) # 獲取要素中的屬性表內(nèi)容 for iField inrange(iFieldCount): oFieldDefn =oDefn.GetFieldDefn(iField) line = ' %s (%s) = ' % ( oFieldDefn.GetNameRef(), ogr.GetFieldTypeName(oFieldDefn.GetType()))ifoFeature.IsFieldSet( iField ): line = line+ '%s' % (oFeature.GetFieldAsString( iField ) ) else: line = line+ '(null)'print(line) # 獲取要素中的幾何體 oGeometry =oFeature.GetGeometryRef() # 為了演示,只輸出一個(gè)要素信息 break print('數(shù)據(jù)集關(guān)閉!')

2.新建shp文件

#-*- coding: cp936 -*-try: from osgeo import gdal from osgeo import ogrexceptImportError: import gdal import ogr defWriteVectorFile(): # 為了支持中文路徑,請(qǐng)?zhí)砑酉旅孢@句代碼 gdal.SetConfigOption('GDAL_FILENAME_IS_UTF8','NO') # 為了使屬性表字段支持中文,請(qǐng)?zhí)砑酉旅孢@句 gdal.SetConfigOption('SHAPE_ENCODING','') strVectorFile ='E:TestPolygon.shp' # 注冊(cè)所有的驅(qū)動(dòng) ogr.RegisterAll() # 創(chuàng)建數(shù)據(jù),這里以創(chuàng)建ESRI的shp文件為例 strDriverName = 'ESRIShapefile' oDriver =ogr.GetDriverByName(strDriverName) if oDriver == None: print('%s 驅(qū)動(dòng)不可用!n', strDriverName) return # 創(chuàng)建數(shù)據(jù)源 oDS =oDriver.CreateDataSource(strVectorFile) if oDS == None: print('創(chuàng)建文件【%s】失??!', strVectorFile) return # 創(chuàng)建圖層,創(chuàng)建一個(gè)多邊形圖層,這里沒有指定空間參考,如果需要的話,需要在這里進(jìn)行指定 papszLCO = [] oLayer =oDS.CreateLayer('TestPolygon', None, ogr.wkbPolygon, papszLCO) if oLayer == None: print('圖層創(chuàng)建失敗!n') return # 下面創(chuàng)建屬性表 # 先創(chuàng)建一個(gè)叫FieldID的整型屬性 oFieldID =ogr.FieldDefn('FieldID', ogr.OFTInteger) oLayer.CreateField(oFieldID, 1) # 再創(chuàng)建一個(gè)叫FeatureName的字符型屬性,字符長(zhǎng)度為50 oFieldName =ogr.FieldDefn('FieldName', ogr.OFTString) oFieldName.SetWidth(100) oLayer.CreateField(oFieldName, 1) oDefn = oLayer.GetLayerDefn() # 創(chuàng)建三角形要素 oFeatureTriangle = ogr.Feature(oDefn) oFeatureTriangle.SetField(0, 0) oFeatureTriangle.SetField(1, '三角形') geomTriangle =ogr.CreateGeometryFromWkt('POLYGON ((0 0,20 0,10 15,0 0))') oFeatureTriangle.SetGeometry(geomTriangle) oLayer.CreateFeature(oFeatureTriangle) # 創(chuàng)建矩形要素 oFeatureRectangle = ogr.Feature(oDefn) oFeatureRectangle.SetField(0, 1) oFeatureRectangle.SetField(1, '矩形') geomRectangle =ogr.CreateGeometryFromWkt('POLYGON ((30 0,60 0,60 30,30 30,30 0))') oFeatureRectangle.SetGeometry(geomRectangle) oLayer.CreateFeature(oFeatureRectangle) # 創(chuàng)建五角形要素 oFeaturePentagon = ogr.Feature(oDefn) oFeaturePentagon.SetField(0, 2) oFeaturePentagon.SetField(1, '五角形') geomPentagon =ogr.CreateGeometryFromWkt('POLYGON ((70 0,85 0,90 15,80 30,65 15,700))') oFeaturePentagon.SetGeometry(geomPentagon) oLayer.CreateFeature(oFeaturePentagon) oDS.Destroy() print('數(shù)據(jù)集創(chuàng)建完成!n')

3.更新

其實(shí)更新無非就是獲取到field然后設(shè)置新值就可以了

其實(shí)用SetField()方法就行

import os,sysfrom osgeo import gdalfrom osgeo import ogrfrom osgeo import osrimport numpyimport transformer# 為了支持中文路徑,請(qǐng)?zhí)砑酉旅孢@句代碼 pathname = sys.argv[1]choose = sys.argv[2]gdal.SetConfigOption('GDAL_FILENAME_IS_UTF8', 'NO')# 為了使屬性表字段支持中文,請(qǐng)?zhí)砑酉旅孢@句gdal.SetConfigOption('SHAPE_ENCODING', '')# 注冊(cè)所有的驅(qū)動(dòng)ogr.RegisterAll()# 數(shù)據(jù)格式的驅(qū)動(dòng)driver = ogr.GetDriverByName(’ESRI Shapefile’)ds = driver.Open(pathname, update=1)if ds is None: print ’Could not open %s’%pathname sys.exit(1)# 獲取第0個(gè)圖層layer0 = ds.GetLayerByIndex(0);# 投影spatialRef = layer0.GetSpatialRef();# 輸出圖層中的要素個(gè)數(shù)print ’要素個(gè)數(shù)=%d’%(layer0.GetFeatureCount(0))print ’屬性表結(jié)構(gòu)信息’defn = layer0.GetLayerDefn()fieldindex = defn.GetFieldIndex(’x’)xfield = defn.GetFieldDefn(fieldindex)#新建fieldfieldDefn = ogr.FieldDefn(’newx’, xfield.GetType())fieldDefn.SetWidth(32)fieldDefn.SetPrecision(6)layer0.CreateField(fieldDefn,1)fieldDefn = ogr.FieldDefn(’newy’, xfield.GetType())fieldDefn.SetWidth(32)fieldDefn.SetPrecision(6)layer0.CreateField(fieldDefn,1)feature = layer0.GetNextFeature()# 下面開始遍歷圖層中的要素while feature is not None: # 獲取要素中的屬性表內(nèi)容 x = feature.GetFieldAsDouble(’x’) y = feature.GetFieldAsDouble(’y’) newx, newy = transformer.begintrans(choose, x, y) feature.SetField(’newx’, newx) feature.SetField(’newy’, newy) layer0.SetFeature(feature) feature = layer0.GetNextFeature()feature.Destroy()ds.Destroy()

這里我其實(shí)想說最重要的是這個(gè)SetFeature(),就是你更新好了field的feature一定要重新set一下,不然是根本起不到任何改變的。新建的時(shí)候有createfeature,已經(jīng)設(shè)置了,所以不需要set。

網(wǎng)上的教程都是新建和讀取,都沒有提到這個(gè),結(jié)果自己蠢到試了好久都沒有發(fā)現(xiàn)問題在哪,以為是什么數(shù)據(jù)類型與設(shè)置字段屬性不匹配,一頭霧水哈哈哈。

補(bǔ)充知識(shí):python使用GDAL生成shp文件

GDAL是一個(gè)開源的地理工具包,其支持基本所有的地理操作,其有python、java、c等語言包,是地理信息C端開發(fā)不可越過的工具,鑒于python語言的簡(jiǎn)單性,這里使用python中GDAL包來進(jìn)行shp文件的生成,這里本質(zhì)是利用ogc地理標(biāo)準(zhǔn)的坐標(biāo)字符串來生成shp。

第一步:安裝GDAL環(huán)境,建議下載后,本地安裝,注意與python版本號(hào)要對(duì)應(yīng),可參考網(wǎng)上教程。

第二部:代碼分析

引入GDAL工具包

import osgeo.ogr as ogrimport osgeo.osr as osr

注冊(cè)驅(qū)動(dòng),這里是ESRI Shapefile類型,并設(shè)置shp文件名稱

driver = ogr.GetDriverByName('ESRI Shapefile')data_source = driver.CreateDataSource('ceshi.shp')

注入投影信息,這里使用的4326,表示經(jīng)緯度坐標(biāo),根據(jù)情況可以自行更改

srs = osr.SpatialReference()srs.ImportFromEPSG(4326)

這里定義的是,生成的要素類型,包括點(diǎn)、線、面

#ogr.wkbPoint 點(diǎn)#ogr.wkbLineString 線#ogr.wkbMultiPolygon 面

這里的圖層名稱要與上面注冊(cè)驅(qū)動(dòng)的shp名稱一致

layer = data_source.CreateLayer('ceshi', srs, ogr.wkbLineString)

這里設(shè)置要素的屬性字段,其中設(shè)置了兩個(gè)字段,分別是Name、data,其中ogr.OFTString表示字符串類型,其長(zhǎng)度都是14字節(jié),可自行設(shè)置寬度

python使用gdal對(duì)shp讀取,新建和更新的實(shí)例

field_name = ogr.FieldDefn('Name', ogr.OFTString)field_name.SetWidth(14)layer.CreateField(field_name)

field_name = ogr.FieldDefn('data', ogr.OFTString)field_name.SetWidth(14)layer.CreateField(field_name)

在生成的字段名中插入要素值,即屬性表中每行的值

feature = ogr.Feature(layer.GetLayerDefn())feature.SetField('Name', 'ceshi')feature.SetField('data', '1.2')

核心部分,生成line數(shù)據(jù)

其中各要素格式如下:

POINT(6 10)LINESTRING(3 4,10 50,20 25)POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2))MULTIPOINT(3.5 5.6, 4.8 10.5)MULTILINESTRING((3 4,10 50,20 25),(-5 -8,-10 -8,-15 -4))MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)),((6 3,9 2,9 4,6 3)))GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))POINT ZM (1 1 5 60)POINT M (1 1 80)

需要注意的是,這里應(yīng)該與上面定義的生成要素的類型保持一致,最后是清空緩存,這里多說一句,字符串語法與postgis等開源gis一致,都遵循ogc國(guó)際標(biāo)準(zhǔn)

wkt = ’LINESTRING(3 4,10 50,20 25)’line = ogr.CreateGeometryFromWkt(wkt)feature.SetGeometry(line)layer.CreateFeature(feature)feature = Nonedata_source = None

結(jié)果如下:

python使用gdal對(duì)shp讀取,新建和更新的實(shí)例

用arcgis打開

python使用gdal對(duì)shp讀取,新建和更新的實(shí)例

可以使用該方法,下載在線shp數(shù)據(jù),只需要知道所需要素的geojson格式數(shù)據(jù)中坐標(biāo)串即可?;蛘邎D像識(shí)別中獲取的矢量邊界賦予經(jīng)緯度。

以上這篇python使用gdal對(duì)shp讀取,新建和更新的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产一区二区三区四区大秀| 国内一区二区三区| 国产一区国产二区国产三区| 国产日韩中文在线中文字幕| 在线精品视频一区| 免费观看不卡av| 亚洲不卡系列| sm捆绑调教国产免费网站在线观看 | av一区二区高清| 99久久夜色精品国产亚洲狼 | 久久国产直播| 三上悠亚国产精品一区二区三区 | 久久国际精品| 国产欧美日韩精品一区二区免费 | 久久一二三区| 亚洲精品高潮| 日韩二区三区四区| 国产精品一线| 精品久久美女| 丝袜av一区| 欧美久久久网站| 日韩成人午夜精品| 亚洲一区导航| 欧美日韩视频免费看| 日韩精品中文字幕一区二区| 亚洲视频国产| 蜜臀国产一区二区三区在线播放| 国产精品美女久久久浪潮软件| 1000部精品久久久久久久久| 久久精品亚洲人成影院| 久久精品影视| 日韩一区二区免费看| 9色精品在线| 玖玖玖国产精品| 免费在线视频一区| 视频在线观看一区二区三区| 伊人久久亚洲热| 国产亚洲欧洲| 日韩在线观看一区二区| 久色成人在线| 日本99精品| 亚洲精品乱码日韩| 热久久久久久久| 日韩**一区毛片| 伊人久久一区| 日韩动漫一区| 国产一区丝袜| 久久精品高清| 视频一区中文字幕| 日韩欧美在线精品| 国产精品亚洲欧美一级在线| 亚洲最新av| 视频一区中文字幕精品| 国产精品欧美三级在线观看| 久久免费福利| 美女福利一区二区三区| 久久一区二区三区喷水| 国产精品毛片| 亚洲区欧美区| 国产精品综合色区在线观看| 日韩成人a**站| 免费黄色成人| 日韩激情啪啪| 成人国产精品一区二区网站| 欧美日韩色图| 亚洲久久视频| 国产精品欧美一区二区三区不卡| 亚洲综合电影| 亚洲欧美日韩精品一区二区| 久久国产精品色av免费看| 欧美1区二区| 黄色aa久久| 激情久久婷婷| 日韩欧美四区| 亚洲夜间福利| 日韩黄色av| 久久久精品网| 亚洲免费毛片| 欧洲亚洲一区二区三区| 日本亚洲视频| 国产精品国产三级国产在线观看| 亚洲成人精品| 日韩av中文字幕一区| 日韩一区二区免费看| 国产精品毛片视频| 亚洲精品护士| 群体交乱之放荡娇妻一区二区| 日本在线不卡视频| 国产精品麻豆成人av电影艾秋| 亚洲五月婷婷| 免费在线观看一区| 在线精品视频在线观看高清| av高清一区| 麻豆精品91| 国产aa精品| 亚洲区第一页| 精品一区二区三区亚洲| 热久久免费视频| 激情五月色综合国产精品| 久久激情综合网| 亚洲乱码视频| 1000部精品久久久久久久久| 色爱综合网欧美| 国产色噜噜噜91在线精品| 中文字幕亚洲影视| 成人羞羞视频播放网站| 粉嫩av一区二区三区四区五区| 亚洲综合福利| 在线精品国产亚洲| 久久久久中文| 久久97视频| 99成人在线| 欧美日韩在线播放视频| 久久中文字幕一区二区三区| 欧美一区影院| 日本午夜精品视频在线观看| 久久最新视频| 亚洲欧美伊人| 黄色精品视频| 91成人在线精品视频| 亚洲国产一区二区三区在线播放| 亚洲尤物av| 国精品一区二区| 欧美日本不卡| 伊人久久大香线蕉av超碰演员| 久久一区国产| 精品美女在线视频| 青青青国产精品| 久久午夜影视| 五月婷婷六月综合| 福利在线免费视频| 国产精品白丝一区二区三区| 欧美精品第一区| 最新国产精品视频| 91一区二区| 国产精品羞羞答答在线观看| 影音先锋久久精品| 久久高清免费观看| 亚洲欧美一区在线| 黄色日韩精品| 蜜桃精品在线| 在线视频观看日韩| 亚洲神马久久| 亚洲精品无播放器在线播放| 日韩国产91| 国产精品高清一区二区| 精品国产亚洲一区二区三区大结局 | 免费不卡在线视频| 丝袜美腿亚洲色图| 免费美女久久99| 久久精品 人人爱| 久久精品一区二区国产| 精品一区av| 亚洲va中文在线播放免费| 欧美a级片一区| 亚洲精品在线观看91| 日韩中文字幕1| 国产精选久久| 蜜桃视频在线网站| 亚洲一区二区网站| 欧美一区=区三区| 国产精品久久久久久久久久白浆 | 一区二区三区四区日本视频| 日韩欧美中文| 亚洲在线成人| 日韩高清在线一区| 国产成人久久精品一区二区三区| 伊人久久视频| 国产亚洲精品久久久久婷婷瑜伽| 久久精品97| 亚洲综合电影| aa国产精品| 国产欧美日韩在线观看视频| 国产成人精品三级高清久久91| 久久精品国产大片免费观看| 亚洲天堂日韩在线| 精品中文在线| 国产综合亚洲精品一区二| 亚洲1区在线观看| 日本v片在线高清不卡在线观看| 国产精品男女| 精品欧美一区二区三区在线观看| 久久先锋影音| 精品一区二区三区的国产在线观看| 久久久久久久久久久妇女| 亚洲aⅴ网站| 91欧美在线| 午夜日韩在线| 国产精品黄色| 欧美va天堂在线| 日韩和欧美的一区| 欧美精选视频一区二区| 亚洲人成亚洲精品| 蜜臀国产一区| 日本成人手机在线| 午夜影院一区| 欧美久久精品| 九色精品91| 久久这里只有| 石原莉奈一区二区三区在线观看|