按面选择点(Select By Location)

实现面矢量与点矢量之间选择(与Arcgis中Select By Location功能相同)

效果如图所示
效果如图所示

具体实现代码如下:
1.导入用到的库

import glob
import os
import geopandas as gpd
import osgeo.ogr , osgeo.gdal
from osgeo import ogr,gdal,osr

2.实现函数:

def select_point(inpath , outpath , fanwei_shp ):
"""
@param inpath:点矢量所在路径
@param outpath:输出路径
@param fanwei_shp:面矢量
"""
    for i, txt_filename in enumerate(glob.glob(os.path.join(inpath, '*.shp'))):
        
        if os.path.basename(txt_filename) == "PREus.shp":
            print(f"跳过 {txt_filename},因为文件名为\"PREus.shp\"。")
            continue
        ##上述条件判断为实现跳过特定名称文件,可以自定义设置;
        
        print('processing:Selecting points:', i + 1)
        gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES")
        gdal.SetConfigOption("SHAPE_ENCODING", "GBK")
        shpdriver = ogr.GetDriverByName('ESRI Shapefile')  # 获取驱动
        fanwei_shp1 = shpdriver.Open(fanwei_shp)  # 获取数据集
        point_shp = shpdriver.Open(txt_filename)

        fanwei_layer = fanwei_shp1.GetLayer(0)  # 获取图层
        point_layer = point_shp.GetLayer(0)

        fanwei_feat = fanwei_layer.GetNextFeature()  # 获取要素

        poly = fanwei_feat.GetGeometryRef()  # 获取几何

        point_layer.SetSpatialFilter(poly)  # 空间滤波获取fanwei内的点
        
        ### 条件判断,输出路径不存在时,创建输出路径
        try:
            os.makedirs(outpath)
        except:
            pass
		### 输出文件名在原先点矢量文件名后加 "_select.shp"
        out_shp = outpath + os.path.basename(txt_filename).split('.')[0] + "_select.shp"  # 定义输出shp
		
		### 判断输出文件名是否存在,存在的情况先删除,后重新新建
        if os.access(out_shp, os.F_OK):  # 判断该文件是否已经存在
            shpdriver.DeleteDataSource(out_shp)  # 文件若存在,则删除文件

        newds = shpdriver.CreateDataSource(out_shp)  # 创建数据集

        pt_layer = newds.CopyLayer(point_layer, "")  # 通过图层拷贝方法获取图层

        newds.Destroy()  # 销毁数据源
   

3.调用函数:

if __name__ == "__main__":
	inpath = r"your path\\shp\\"  # 设置原始数据输入路径
	fanwei_shp = r"your path\\BeiJing.shp"  # 区域选择范围矢量
	outpath_select = r"your path\\\\1_Select\\"  # 设置按区域选择点的输出路径
	
	select_point(inpath , outpath_select , fanwei_shp)  ##调用函数,输出结果
  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值