python gdal计算矢量图层的面积

30 篇文章 30 订阅

亲测有效:
面积

from osgeo import ogr,osr

def area(shpPath):
    '''计算面积'''
    driver = ogr.GetDriverByName("ESRI Shapefile")
    dataSource = driver.Open(shpPath, 1)
    layer = dataSource.GetLayer()

    src_srs = layer.GetSpatialRef()  #获取原始坐标系或投影
    tgt_srs = osr.SpatialReference()
    tgt_srs.ImportFromEPSG(32649)  #WGS_1984_UTM_Zone_49N投影的ESPG号,需要改自己的要去网上搜下,这个不难
    transform = osr.CoordinateTransformation(src_srs, tgt_srs) #计算投影转换参数
    # geosr.SetWellKnownGeogCS("WGS_1984_UTM_Zone_49N")
    
    new_field = ogr.FieldDefn("Area", ogr.OFTReal)  #创建新的字段
    new_field.SetWidth(32)
    new_field.SetPrecision(16)
    layer.CreateField(new_field)
    for feature in layer:
        geom = feature.GetGeometryRef()
        geom2 = geom.Clone()
        geom2.Transform(transform)

        area_in_sq_m = geom2.GetArea()  #默认为平方米
        # area_in_sq_km = area_in_sq_m / 1000000 #转化为平方公里

        feature.SetField("Area", area_in_sq_m)
        layer.SetFeature(feature)

path = './test.shp'
area(path)
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Python中使用GDAL库进行矢量叠加可以通过以下步骤实现: 1. 导入所需的库和模块: ```python import ogr import osr from osgeo import gdal ``` 2. 打开两个矢量文件: ```python shp1 = ogr.Open("path/to/shp1.shp") lyr1 = shp1.GetLayer() shp2 = ogr.Open("path/to/shp2.shp") lyr2 = shp2.GetLayer() ``` 3. 创建一个新的矢量数据集和图来存储叠加结果: ```python driver = ogr.GetDriverByName("ESRI Shapefile") output = driver.CreateDataSource("path/to/output.shp") output_lyr = output.CreateLayer("output", geom_type=ogr.wkbPolygon) ``` 4. 复制shp1的属性表结构到输出图中: ```python lyr1_def = lyr1.GetLayerDefn() for i in range(lyr1_def.GetFieldCount()): output_lyr.CreateField(lyr1_def.GetFieldDefn(i)) ``` 5. 逐个读取shp1的要素,并使用Intersect方法与shp2进行叠加: ```python for feat1 in lyr1: geom1 = feat1.GetGeometryRef() # 筛选与shp1要素相交的shp2要素 lyr2.SetSpatialFilter(geom1) for feat2 in lyr2: geom2 = feat2.GetGeometryRef() # 判断两个要素是否相交 if geom1.Intersect(geom2): # 创建新的要素 output_feat = ogr.Feature(output_lyr.GetLayerDefn()) # 复制shp1的属性值到输出要素中 for i in range(lyr1_def.GetFieldCount()): output_feat.SetField(i, feat1.GetField(i)) # 将shp1和shp2的几何形状进行叠加 output_feat.SetGeometry(geom1.Intersection(geom2)) # 将新要素添加到输出图 output_lyr.CreateFeature(output_feat) # 删除shp2筛选器 lyr2.SetSpatialFilter(None) break ``` 6. 关闭打开的矢量文件和输出数据集: ```python shp1 = None shp2 = None output = None ``` 这样,你就可以通过使用GDAL库的API在Python中实现两个矢量shp的叠加操作了。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

如雾如电

随缘

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值