環境配置見:
安裝qgis,直接使用qgis帶的python直譯器,就不用了安裝各種環境和配置了,很方便。
**見:
注釋寫的非常詳細。
# -*- coding: utf-8 -*-
try:
from osgeo import gdal
from osgeo import ogr
from osgeo import osr
except importerror:
import gdal
import ogr
import osr
# 寫入shp檔案,polygon
def writeshp():
# 支援中文路徑
gdal.setconfigoption("gdal_filename_is_utf8", "yes")
# 屬性表字段支援中文
gdal.setconfigoption("shape_encoding", "utf-8")
# 註冊驅動
ogr.registerall()
# 建立shp資料
strdrivername = "esri shapefile"
odriver = ogr.getdriverbyname(strdrivername)
if odriver == none:
return "驅動不可用:"+strdrivername
# 建立資料來源
ods = odriver.createdatasource("polygon.shp")
if ods == none:
return "建立檔案失敗:polygon.shp"
# 建立乙個多邊形圖層,指定座標係為wgs84
papszlco =
geosrs = osr.spatialreference()
geosrs.setwellknowngeogcs("wgs84")
# 線:ogr_type = ogr.wkblinestring
# 點:ogr_type = ogr.wkbpoint
ogr_type = ogr.wkbpolygon
# 面的型別為polygon,線的型別為polyline,點的型別為point
olayer = ods.createlayer("polygon", geosrs, ogr_type, papszlco)
if olayer == none:
return "圖層建立失敗!"
# 建立屬性表
# 建立id欄位
oid = ogr.fielddefn("id", ogr.oftinteger)
olayer.createfield(oid, 1)
# 建立name欄位
oname = ogr.fielddefn("name", ogr.oftstring)
olayer.createfield(oname, 1)
odefn = olayer.getlayerdefn()
# 建立要素
# 資料集
# wkt_geom id name
features = ['test0;polygon((-1.58 0.53, -0.79 0.55, -0.79 -0.23, -1.57 -0.25, -1.58 0.53))',
'test1;polygon((-1.58 0.53, -0.79 0.55, -0.79 -0.23, -1.57 -0.25, -1.58 0.53))']
for index, f in enumerate(features):
ofeaturepolygon = ogr.feature(odefn)
ofeaturepolygon.setfield("id",index)
ofeaturepolygon.setfield("name",f.split(";")[0])
geompolygon = ogr.creategeometryfromwkt(f.split(";")[1])
ofeaturepolygon.setgeometry(geompolygon)
olayer.createfeature(ofeaturepolygon)
# 建立完成後,關閉程序
ods.destroy()
return "資料集建立完成!"
# 讀shp檔案
def readshp():
# 支援中文路徑
gdal.setconfigoption("gdal_filename_is_utf8", "yes")
# 支援中文編碼
gdal.setconfigoption("shape_encoding", "utf-8")
# 註冊所有的驅動
ogr.registerall()
# 開啟資料
ds = ogr.open("polygon.shp", 0)
if ds == none:
return "開啟檔案失敗!"
# 獲取資料源中的圖層個數,shp資料圖層只有乙個,gdb、dxf會有多個
ilayercount = ds.getlayercount()
print("圖層個數 = ", ilayercount)
# 獲取第乙個圖層
olayer = ds.getlayerbyindex(0)
if olayer == none:
return "獲取圖層失敗!"
# 對圖層進行初始化
olayer.resetreading()
# 輸出圖層中的要素個數
num = olayer.getfeaturecount(0)
print("要素個數 = ", num)
result_list =
# 獲取要素
for i in range(0, num):
ofeature = olayer.getfeature(i)
id = ofeature.getfieldasstring("id")
name = ofeature.getfieldasstring('name')
geom = str(ofeature.getgeometryref())
ds.destroy()
del ds
return result_list
writeresult = writeshp()
print(writeresult)
readresult = readshp()
print(readresult)
Python GDAL 讀取柵格
from osgeo import gdal from gdalconst import import os,sys,time start time time.time os.chdir r e 獲取所有註冊類 gdal.allregister 開啟柵格 ds gdal.open aster.img...
關於GDAL讀寫Shp亂碼的問題總結
目錄2.參考 最近在使用gdal讀寫shp格式中的屬性欄位的時候也遇到了中文亂碼的問題,總結下自己遇到的情況。應該是由於shp格式加入了對寬字元的支援,所以導致有段時間的shp檔案和arcgis是存在不匹配的問題,所以在網上搜尋資源的時候遇到了大量的關於arcmap顯示shp屬性表出現亂碼的問題。現...
python gdal開發環境安裝
安裝環境是windows10,python是最新版本3.6,gdal版本是2.x 選擇 add python to path一路next 直到完成。按快捷鍵 win r,輸入cmd回車,進入cmd控制台,輸入 py 3.6看是否安裝成功 有下面提示,則成功。重新進入cmd控制台,輸入 py 3.6 ...