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中,可以方便传输了