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")
outDataSource = outDriver.CreateDataSource(outShapefile)
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
outLayer = outDataSource.CreateLayer("states_extent", srs,geom_type=ogr.wkbPolygon)
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中,可以方便傳輸了