生活随笔
收集整理的這篇文章主要介紹了
GDAL+OGR学习
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
GDAL+OGR學習
每次寫代碼用Arcpy就得切回python2,很麻煩,故來學習一下gdal+ogr。
gdal庫安裝
直接cmd寫pip intsall gdal會報錯
打開該鏈接gdal庫下載,根據python版本下載對應版本的包,我的版本是python3.9+64位,按需下載。
將wheel文件復制到相應文件夾再次運行pip install 安裝成功。
使用OGR篩選數據
分別是高德POI表type結構和POIshp type的結構
將利用表格內含有的POI類型里對shp里的的POI類型進行篩選
#-*- coding:utf-8 -*-
#2022.2.10
'''
將表格里統計的poi進行篩選,然后選出指定區域內的poi類別
'''
import time
import pandas as pd
from osgeo import ogr
import osdef identify(poistr,selectpoilist):if poistr.split(';')[2] in selectpoilist:return 1else:return 0def selectpoi(poitype,lyr):n = lyr.GetFeatureCount()print("共",n,"條poi數據")#添加字段defn = lyr.GetLayerDefn()fieldIndex = defn.GetFieldIndex('selectid')if fieldIndex < 0:# 添加字段lyr.CreateField( # 為圖層添加一個selectid字段ogr.FieldDefn('selectid', ogr.OFTInteger,SetPrecision(3)))fieldIndex2 = defn.GetFieldIndex('selectid')if fieldIndex2 > 0:print("字段創建成功:", fieldIndex)m = 0starttime = time.time()for feat in lyr:name = feat.GetField('name')type = feat.GetField('type')#計算r值判斷是否選取,>0則選取,是0則不選if (type.count("|")>0):r=0for i in range(0,type.count("|")):r =r+identify(type.split('|')[i],poitype)else:r=identify(type,poitype)if r>0:feat.SetField('selectid', 1) # 設置字段的值else:feat.SetField('selectid', 0) # 設置字段的值lyr.SetFeature(feat)m=m+1print("正在運行第",m,"條數據",feat.GetField('selectid'),name,type)if m==n:break;endtime = time.time()print("運行時間共計",endtime-starttime)if __name__=="__main__":#讀取POI類型表格datapath = r'E:\WHDATA\region_data\jianghan_district\database'poifilename = "./細類別POI.xlsx"poitype = pd.read_excel(poifilename)type = poitype['小類'].to_list()#讀取江漢區POIshp數據in_poishp = os.path.join(datapath,"poi.shp")outpath = os.path.join(datapath,"poi_select.shp")ds = ogr.Open(in_poishp,1)#1表示可寫,0表示只讀lyr = ds.GetLayer()selectpoi(type,lyr)
總結
以上是生活随笔為你收集整理的GDAL+OGR学习的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。