【GDAL应用】基于GDAL实现GIS空间分析--Contains(包含)操作

实现效果

一个渔网数据,一个多边形要素数据:
在这里插入图片描述
完全包含多边形要素数据效果:
在这里插入图片描述
输出结果:
在这里插入图片描述
网格完全位于多边形要素空间范围内:
在这里插入图片描述

实现功能

应用两个空间矢量数据进行GIS空间分析–Contains(包含)操作

备注:两个数据坐标系保持相同。

说明:
除了 Contains 空间关系,还有许多其他空间关系,这些关系用于描述几何对象之间的相互位置和包含关系。一些常见的空间关系包括:
Intersects(相交): 一个几何对象与另一个几何对象至少有一个公共点,但不一定完全包含对方。
Touches(相邻): 一个几何对象的边界与另一个几何对象的边界相接触,但没有内部交叉。
Overlaps(重叠): 两个几何对象在二维平面上有部分重叠,但不完全包含对方。
Crosses(相交但不包含): 一个几何对象穿越另一个几何对象,但不包含对方。
Within(在内部): 一个几何对象完全包含在另一个几何对象的内部,包含是严格的。
Equals(相等): 两个几何对象在几何形状和空间位置上完全相同。
Disjoint(不相交): 两个几何对象没有任何交集,彼此独立。
这些空间关系在地理信息系统 (GIS) 和几何计算中非常重要,用于执行空间关系查询。

实现代码

# -*- coding: utf-8 -*-
"""
@time: 2023-8-28 15:30
@author: RSer_gis
"""

from osgeo import ogr, gdal

first_shapefile = r"D:\Desktop\test\first_shapefile.shp"
second_shapefile =r"D:\Desktop\test\fishnet_shapefile.shp"
output_shapefile = r"D:\Desktop\test\fishnet—contain.shp"

# 设置Shapefile UTF-8编码
gdal.SetConfigOption("SHAPE_ENCODING", "UTF-8")
# 打开第一个SHP数据
source_ds = ogr.Open(first_shapefile, 0)  # 0 表示只读方式打开
layer1 = source_ds.GetLayer()

# 打开第二个SHP数据
target_ds = ogr.Open(second_shapefile, 0)
layer2 = target_ds.GetLayer()
spatialRef = layer2.GetSpatialRef()

# 创建新的SHP数据源
output_ds = ogr.GetDriverByName('ESRI Shapefile').CreateDataSource(output_shapefile)
output_layer = output_ds.CreateLayer('output_layer', spatialRef, geom_type=ogr.wkbPolygon)

# 复制第一个SHP数据的字段到新数据源
layer_def = layer2.GetLayerDefn()
for i in range(layer_def.GetFieldCount()):
    output_layer.CreateField(layer_def.GetFieldDefn(i))

# 遍历第二个SHP中的每个要素
for feat2 in layer2:
    geometry2 = feat2.geometry()

    # 遍历第一个SHP中的每个要素,检查是否包含第二个SHP要素
    for feat1 in layer1:
        geometry1 = feat1.geometry()
        if geometry1.Contains(geometry2):  # Contains方法
            output_feat = ogr.Feature(output_layer.GetLayerDefn())
            output_feat.SetGeometry(geometry2.Clone())
            for i in range(output_feat.GetFieldCount()):
                output_feat.SetField(i, feat2.GetField(i)) # i为字段索引
            output_layer.CreateFeature(output_feat)
            output_feat = None

source_ds = None
target_ds = None
output_ds = None
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值