python3操作shp文件

#写入shp文件
def update_shp_sk(list_1, outlayer_jzx, featuredefn_jzx, dkbh, dkmc, dkmj, tfh, tdyt):

    for i in list_1:
        ring = ogr.Geometry(ogr.wkbLinearRing)
        for ii in list_1[i]:
            ring.AddPoint(ii[0], ii[1])
            #ring.AddPoint(list_1[0][0], list_1[0][1])
        polygon = ogr.Geometry(ogr.wkbPolygon)
        polygon.AddGeometry(ring)
        feature = ogr.Feature(featuredefn_jzx)
        feature.SetGeometry(polygon)
        feature.SetField('地块编号', dkbh)
        feature.SetField('地块名称', dkmc)
        feature.SetField('地块面积', dkmj)
        feature.SetField('图幅号', tfh)
        feature.SetField('土地用途', tdyt)
        outlayer_jzx.CreateFeature(feature)
        feature.Destroy()
        del feature
        ring.Destroy()
        polygon.Destroy()


#创建shp文件
def insert_sk(path_shp, name_shp):
    gdal.SetConfigOption("SHAPE_ENCODING", "GBK")
    driver = ogr.GetDriverByName('ESRI Shapefile')
    os.chdir(path_shp)
    if os.path.exists('%s.shp'%path_shp):
        driver.DeleteDataSource('%s.shp'%name_shp)
    outds_jzx = driver.CreateDataSource('%s.shp'%name_shp)
    # gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES")
    if outds_jzx == None:
        print('创建文件失败!')
    dst_osr = osr.SpatialReference()
    dst_osr.ImportFromEPSG(4526)  # 国家2000坐标39度
    outlayer_jzx = outds_jzx.CreateLayer(name_shp, dst_osr, geom_type=ogr.wkbPolygon)
    featuredefn_jzx = outlayer_jzx.GetLayerDefn()
    fieldDefn = ogr.FieldDefn('地块编号', ogr.OFTString)
    fieldDefn.SetWidth(254)
    outlayer_jzx.CreateField(fieldDefn)

    fieldDefn = ogr.FieldDefn('地块名称', ogr.OFTString)
    fieldDefn.SetWidth(254)
    outlayer_jzx.CreateField(fieldDefn)

    fieldDefn = ogr.FieldDefn('地块面积', ogr.OFTReal)
    fieldDefn.SetWidth(16)
    fieldDefn.SetPrecision(3)
    outlayer_jzx.CreateField(fieldDefn)

    fieldDefn = ogr.FieldDefn('图幅号', ogr.OFTString)
    fieldDefn.SetWidth(254)
    outlayer_jzx.CreateField(fieldDefn)

    fieldDefn = ogr.FieldDefn('土地用途', ogr.OFTString)
    fieldDefn.SetWidth(254)
    outlayer_jzx.CreateField(fieldDefn)
    return featuredefn_jzx, outds_jzx, outlayer_jzx

你可能感兴趣的:(python)