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

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文件一致。

 

 

posted @ 2019-09-30 09:15  vivid_autumn  阅读(300)  评论(0编辑  收藏  举报