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中,可以方便传输了
    在这里插入图片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章