wkt转shp / wkt转shapefile / shp转wkt

30 篇文章 20 订阅

文章目录

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中,可以方便传输了
    在这里插入图片描述
  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 你可以使用 PyShp 库来创建一个 shp 文件。 这是一个简单的例子,创建一个矩形并将其写入一个 shp 文件: ``` import shapefile # 创建一个 shapefile 写入器 w = shapefile.Writer() # 增加字段 w.field("NAME", "C", "40") # 增加矩形 w.poly([[-120, 35], [-120, 40], [-125, 40], [-125, 35], [-120, 35]]) # 写入数据 w.record("Rectangle 1") # 保存到文件 w.save("rectangle.shp") ``` 你可以在 PyShp 的文档中找到更多示例和信息: https://pyshp.readthedocs.io/en/latest/ ### 回答2: 使用Python创建SHP文件需要用到shapely库。Shapely是一个用于处理几何图形的库,它可以将WKT(Well-Known Text)格式的几何图形换为SHP文件。 首先,我们需要安装shapely库。可以使用pip命令在终端中安装: ``` pip install shapely ``` 接下来,导入shapely库的相关模块: ```python from shapely.geometry import Polygon import fiona ``` 然后,根据WKT格式的几何图形来创建多边形对象: ```python wkt = 'POLYGON ((0 0, 0 1, 1 1, 1 0, 0 0))' polygon = Polygon.from_wkt(wkt) ``` 然后,创建保存SHP文件的输出路径和文件名: ```python output_path = 'output.shp' ``` 接着,使用fiona库创建SHP文件,并将多边形对象写入其中: ```python schema = {'geometry': 'Polygon', 'properties': {'id': 'int'}} with fiona.open(output_path, 'w', 'ESRI Shapefile', schema) as c: c.write({'geometry': mapping(polygon), 'properties': {'id': 1}}) ``` 注意,此处使用的mapping函数用于将shapely对象映射到GeoJSON格式。需要导入mapping函数: ```python from shapely.geometry import mapping ``` 最后,运行Python脚本,即可在指定的输出路径中生成SHP文件。 通过以上步骤,我们可以使用PythonWKT创建SHP文件。这样,我们就可以利用Python的强大功能来处理和分析空间数据。 ### 回答3: Python WKT (Well-Known Text) 是一种文本表示方法,用于描述空间对象的几何形状。我们可以使用Python中的相关库,比如GeoPandas和Shapely,来创建Shapefile (.shp) 文件。 首先,我们需要安装依赖库。打开终端或命令提示符,运行以下命令来安装GeoPandas和Shapely库: ``` pip install geopandas pip install shapely ``` 然后,我们可以使用以下代码来创建一个WKT字符串表示的几何对象,并将其保存为Shapefile文件: ```python import geopandas as gpd from shapely.wkt import loads # 创建一个WKT字符串表示的点 wkt_point = 'POINT(1 1)' # 使用Shapely的loads函数将WKT字符串换为几何对象 point = loads(wkt_point) # 创建一个GeoDataFrame gdf = gpd.GeoDataFrame(geometry=[point]) # 指定Shapefile输出路径和文件名 output_path = 'path/to/output.shp' # 将GeoDataFrame保存为Shapefile文件 gdf.to_file(output_path) ``` 在上述代码中,我们首先创建了一个表示点的WKT字符串。然后,使用Shapely库的loads函数将WKT字符串换为Shapely几何对象。接下来,我们使用GeoPandas创建一个包含该几何对象的GeoDataFrame。最后,将GeoDataFrame保存为Shapefile文件,通过指定输出路径和文件名来完成保存。 以上就是使用Python WKT创建Shapefile的简单示例。根据需要,您可以根据不同的WKT字符串和几何对象类型进行修改,以创建各种形状和结构的Shapefile文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独孤尚亮dugushangliang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值