python gdal讀寫shp檔案

2021-10-16 04:53:48 字數 3289 閱讀 9749

環境配置見:

安裝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 ...