python gdal Field

from osgeo import ogr,osr,gdal
import os
filename = "chj_watershed.shp" 
filename_point = "station.shp"

gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES")
gdal.SetConfigOption("SHAPE_ENCODING", "UTF8")

ds = ogr.Open(filename, False) #代开 Shape 文件(False - read only, True - read/write) 
layer = ds.GetLayer(0) #获取图层

ds_point = ogr.Open(filename_point, False) #代开 Shape 文件(False - read only, True - read/write) 
layer_point = ds_point.GetLayer(0) #获取图层
# layer = ds.GetLayerByName(filename[-4:]) 
# spatialref = layer.GetSpatialRef() #投影信息
lydefn = layer.GetLayerDefn() #图层定义信息


filename_new = "chj_watershed_new.shp" 
driver = ogr.GetDriverByName("ESRI Shapefile") 
if os.access(filename_new, os.F_OK ): #如文件已存在,则删除
    driver.DeleteDataSource(filename_new) 
ds_new = driver.CreateDataSource(filename_new) #创建 Shape 文件
#spatialref = osr.SpatialReference( 'LOCAL_CS["arbitrary"]' ) 
spatialref_new = osr.SpatialReference() 
spatialref_new.ImportFromEPSG(4326) 
geomtype = ogr.wkbPolygon 

layer_new = ds_new.CreateLayer(filename_new[:-4], srs=spatialref_new, geom_type=geomtype,) #创建图层 for fd in fieldlist: #将字段列表写入图层


layer_new.CreateField(ogr.FieldDefn("s_id",ogr.OFTInteger))
layer_new.CreateField(ogr.FieldDefn("s_name",ogr.OFTString))

features = []
for i in range(layer.GetFeatureCount()):
    feature = layer.GetFeature(i)
    geom_polygon = feature.GetGeometryRef()
    fid = feature.GetField(0)
    feat = ogr.Feature(layer_new.GetLayerDefn())
    # 大框去掉
    if fid == 276:
        continue
    for j in range(layer_point.GetFeatureCount()):
        feature_point = layer_point.GetFeature(j)
        geom_point = feature_point.GetGeometryRef()
        if geom_polygon.Contains(geom_point):
            feat.SetGeometry(geom_polygon)
            name_p = feature_point.GetField(1)
            # print(name_p)
            id_p = feature_point.GetField(0)
            # print(id_p)
            feat.SetField("s_id", id_p)
            feat.SetField("s_name", name_p)
            features.append(feat)
            
print(len(features))

for f in features:
    layer_new.CreateFeature(f)
ds.Destroy()
ds_new.Destroy()

你可能感兴趣的:(python gdal Field)