wkt轉shp / wkt轉shapefile / shp轉wkt

文章目錄

wkt轉shp

  • 使用ogr從wkt字符串創建shapefile
  • 輸入爲一個文本文件,每一行格式爲a;b;c;wkt\n,分號分割,abc分別爲三個字段的值,wkt爲字符串。一行的示例dfas;defg;hjkpiuu;POLYGON((128.99 46.99略去一些))
  • 如果多個字段僅需略作修改即可
    在這裏插入圖片描述
  • 將文本文件的每一行的wkt轉爲面,並將前3個值作爲字段添加到shp中
  • wkt轉爲shp最主要的是創建幾何使用ogr.CreateGeometryFromWkt(wktstr),參數爲wkt字符串,返回的是一個幾何 osgeo.ogr.Geometry,將幾何添加到feature要素中即可
  • 參考鏈接
import osr
import ogr

outShapefile = r"aa4.shp"
tabletxt = r"data.txt"


outDriver = ogr.GetDriverByName("ESRI Shapefile")
# Create the output shapefile
outDataSource = outDriver.CreateDataSource(outShapefile)
#設置投影
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
outLayer = outDataSource.CreateLayer("states_extent", srs,geom_type=ogr.wkbPolygon)

# 創建3個字段並設置類型和長度
aField = ogr.FieldDefn("A", ogr.OFTString)
aField.SetWidth(5)
outLayer.CreateField(aField)
bField = ogr.FieldDefn("B", ogr.OFTString)
bField.SetWidth(18)
outLayer.CreateField(bField)
cField = ogr.FieldDefn("C", ogr.OFTString)
cField.SetWidth(100)
outLayer.CreateField(cField)

#創建幾何
featureDefn = outLayer.GetLayerDefn()
def addPoly(a,b,c,wktpoly):
    feature = ogr.Feature(featureDefn)
    feature.SetGeometry(wktpoly)
    feature.SetField("A", a)
    feature.SetField("B", b)
    feature.SetField("C", c)
    outLayer.CreateFeature(feature)
    feature = None

f = open(tabletxt,'r')
#文件可能比較大,逐行讀取
line = f.readline()
while line:
    a,b,c,wktstr = line.split(";")
    wktpoly = ogr.CreateGeometryFromWkt(wktstr)
    addPoly(a,b,c, wktpoly)
    line = f.readline()
f.close()

outDataSource = None
  • 結果
    在這裏插入圖片描述

shp轉wkt

  • 將shp轉爲wkt字符串,並讀取相應的字段值,輸出字符串
from osgeo import ogr

shapefile = r"shp\BOUA.shp"

driver = ogr.GetDriverByName("ESRI Shapefile")
dataSource = driver.Open(shapefile, 0)
layer = dataSource.GetLayer()

layerDefinition = layer.GetLayerDefn()
#獲取字段名稱列表
fields = []
for i in range(layerDefinition.GetFieldCount()):
    fields.append(layerDefinition.GetFieldDefn(i).GetName())
print(fields)
#獲取字段值和相應的幾何
for feature in layer:
    name = feature.GetField("NAME")
    pac = feature.GetField("PAC")
    geom = feature.GetGeometryRef()
    geomwkt = geom.ExportToWkt()
    print("%s;%s;%s\n"%(name,pac,geomwkt))
  • 輸出結果如下,也可輸出到txt中,可以方便傳輸了
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章