首页 > 其他 > 详细

命令行记录-写ArcGIS shape文件记录

时间:2019-09-30 10:04:31      阅读:175      评论:0      收藏:0      [点我收藏+]

1、这部分的代码需要在前面“读ArcGIS shape文件”的代码后执行,先读后写,需要借用之前fieldlist等变量。

2、代码示例如下

from osgeo import ogr,gdal,osr
import osgeo
import os

# 解决中文路径
osgeo.gdal.SetConfigOption(‘GDAL_FILENAME_IS_UTF8‘, ‘NO‘)
# 解决 SHAPE 文件的属性值
osgeo.gdal.SetConfigOption(‘SHAPE_ENCODING‘, ‘gb2312‘)

filename = "cntry98_new.shp"
driver = ogr.GetDriverByName("ESRI Shapefile")

#如文件已存在,则删除
if os.access(filename, os.F_OK ):
    driver.DeleteDataSource(filename)

#创建 Shape 文件
ds = driver.CreateDataSource(filename)

#用本地的arbitrary定义未知投影
spatialref = osr.SpatialReference( ‘LOCAL_CS["arbitrary"]‘ )
#spatialref = osr.SpatialReference()
spatialref.ImportFromEPSG(4326)
geomtype = ogr.wkbPolygon

#创建图层
layer = ds.CreateLayer(filename [:-4], srs=spatialref, geom_type=geomtype)

#在Python3里fd.has_key的属性已经没有了,需要用in
#将字段列表写入图层
for fd in fieldlist:
    field = ogr.FieldDefn(fd[‘name‘],fd[‘type‘])
    if ‘width‘ in fd:
        field.SetWidth(fd[‘width‘])
    if ‘decimal‘ in fd:
        field.SetPrecision(fd[‘decimal‘])
    layer.CreateField(field)

#将 SF 数据记录(几何对象及其属性写入图层)
for i in range(len(reclist)):
    geom = ogr.CreateGeometryFromWkt(geomlist[i])
    #创建 SF
    feat = ogr.Feature(layer.GetLayerDefn())
    feat.SetGeometry(geom)
    for fd in fieldlist:
        feat.SetField(fd[‘name‘], reclist[i][fd[‘name‘]])
    # 将 SF 写入图层
    layer.CreateFeature(feat)

ds.Destroy() #关闭文件

3、将字段列表、属性以及几何对象写入在新的shape文件后,文件及属性表与原来所读的shape文件一致。

技术分享图片

 

技术分享图片

 

命令行记录-写ArcGIS shape文件记录

原文:https://www.cnblogs.com/vividautumn/p/11610827.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!