python实现wkt转shp 详解

借助python,实现文本wkt值转ArcGIS中shape图形
本文解决利用python实现wkt转shp;如若不会脚本,可利用软件生成shp,链接转至:https://blog.csdn.net/weixin_46489415/article/details/106680133
先上代码,后附详解:
在这里插入图片描述
代码详解
import osr
import ogr
from osgeo import ogr
#导入模块,首先保证模块在python环境中已安装,安装方式很多(如pip install ogr)。from osgeo import ogr这句话可写可不写,不写有可能会报错:ogr中找不到GetDriverByName(‘ESRI Shapefile’)。

outShapefile = r"E:\a\a.shp"
#定义输出路径及文件名称,a.shp文件不要存在于文件夹中
tabletxt = r"E:\a\cs.txt"
#定义输入文件路径,个人测试txt内容格式如下(个人可根据自己需要自行修改):
在这里插入图片描述
outDriver = ogr.GetDriverByName(‘ESRI Shapefile’)
outDataSource = outDriver.CreateDataSource(outShapefile)
#创建输出文件格式shapefile
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
outLayer = outDataSource.CreateLayer(“states_extent”, srs, geom_type=ogr.wkbPolygon)
#定义投影,4326值代表WGS84坐标系,ArcGIS中可以看到不同坐标系的WKID值进行调用。如果不想定义投影,此段代表可改成outLayer = outDataSource.CreateLayer(“states_extent”, geom_type=ogr.wkbPolygon)
在这里插入图片描述
aField = ogr.FieldDefn(“ID”, ogr.OFTString)
aField.SetWidth(254)
outLayer.CreateField(aField)
#创建字段,宽度值254我已设置成最大

featureDefn = outLayer.GetLayerDefn()
def addPoly(a,wktpoly):
feature = ogr.Feature(featureDefn)
feature.SetGeometry(wktpoly)
feature.SetField(“ID”, a)
outLayer.CreateFeature(feature)
feature = None
#创建shape图形
f = open(tabletxt,‘r’)
line = f.readline()
#文件可能比较大,逐行读取,可以自行去了解read、readline、readlines三者之间的区别
while line:
a,wktstr = line.split(";")
wktpoly = ogr.CreateGeometryFromWkt(wktstr)
addPoly(a, wktpoly)
line = f.readline()
f.close()

outDataSource = None
至此,即可将wkt值直接生成shape图形,如果原始数据字段较多,可采取两种方法:
一、只生成一个唯一关联字段,后面在ArcGIS中将表关联计算到shape数据中;
二、利用遍历方式,将表中字段依次遍历输出,一次性搞定。

完整代码:
import osr
import ogr
from osgeo import ogr
outShapefile = r"E:\a\a.shp"
tabletxt = r"E:\a\cs.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(“ID”, ogr.OFTString)
aField.SetWidth(254)
outLayer.CreateField(aField)

featureDefn = outLayer.GetLayerDefn()
def addPoly(a,wktpoly):
feature = ogr.Feature(featureDefn)
feature.SetGeometry(wktpoly)
feature.SetField(“ID”, a)
outLayer.CreateFeature(feature)
feature = None

f = open(tabletxt,‘r’)

line = f.readline()
while line:
a,wktstr = line.split(";")
wktpoly = ogr.CreateGeometryFromWkt(wktstr)
addPoly(a, wktpoly)
line = f.readline()
f.close()

outDataSource = None

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值