最近有一批点和多变型的数据,需要将点按照多边形的区域进行分割。

经过若干尝试,终于通过geopandas的sjoin函数得以实现。

这里首先感谢博主“张da统帅”的分享,使得本人获得该实现方法的灵感,原帖见:https://beiyuan.me/geospatial-analysis-with-python-4/

以下是实现步骤及代码:

1. 如果点文件为带有坐标的文本文件,则先将其写入GeoDataFrame类对象,若为shpfile文件,则直接用geopandas进行读取。

# 载入geopandas库
import geopandas as gpd
# 用geopandas读取点shpfile文件
point = gpd.read_file(point_path)

2. 用geopandas读取多边形shp文件

# 读取多边形shpfile文件
polygon = gpd.read_file(polygon_path)

3. 通过sjoin()函数获取点与多边形相交的系列,组成新的GeoDataFrame类对象

new_gdf = gpd.sjoin(point, polygon, op='intersects')

这里new_gdf包含了所有point和polygon相交元素的信息。

new_gpd的geometry列值为点的坐标,两个对象的其他列都合并在了new_gdf中(可以通过how关键字参数选择只包含point/polygon的列值,具体见:http://geopandas.org/reference/geopandas.sjoin.html

op关键字参数有 {‘intersects’, ‘contains’, ‘within’}三种可选,由于geopandas给出的文本链接不可用(可能是因为某种神秘力量吧),所以三种参数对应方法暂不明了。

4. 按照polygon的范围对point进行分割

# new——gdf中的每一行代表一个点,每个点中都包含了其所在多边形的所有列(geometry列除外)
# 由于index属性是每个DataFrame对象都有的,因此利用index值判断点属于哪个多边形
# polygon的index值在new_gdf中默认为index_rigth, 具体见:http://geopandas.org/reference/geopandas.sjoin.html # 获取每个点对应的polygon的index值
indexs = new_gdf.index_right.values
# 去掉s中重复的index值(由于有多个点在一个多边形中的情况)
s = list(set(indexs))
# 从new_gdf中拣出在index值对应多边形中的点,存入point_split列表(也可用point_split.to_file()方法直接写入shpfile文件)
point_split = []
for index in indexs:
  point_split.append(new_gdf.loc[gdf['index_right'] == index, ['想要保存的列名0', ‘想要保存的列名1’, ...]]

5. 完成~

通过geopandas.sjoin()函数按多边形范围分割点的更多相关文章

  1. geopandas overlay 函数报错问题解决方案

    前言 这篇文章依旧是基于上一篇文章(使用Python实现子区域数据分类统计)而写,此文章中介绍了使用 geopandas 的 overlay 函数对两个 GeoDataFrame 对象取相交或相异的部 ...

  2. (数据科学学习手札88)基于geopandas的空间数据分析——空间计算篇(下)

    本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在基于geopandas的空间数据分析系列 ...

  3. 第5章 绘图基础_5.1-5.4 GDI绘图

    5.1 GDI的原理和结构 (1)提供一种特殊机制彻底隔离应用程序与不同输出设备(eg.显示器或打印机),以便支持 与设备无关的图形. 光栅设备(如显示器.激光打印机):图像是由点构成的矩阵 图形输出 ...

  4. OpenGL基础渲染

    客户端-服务器 客户端是存储在CPU存储器中的,并且在应用程序中执行(或者驱动程序),驱动程序将渲染命令和数据组合起来,发动到服务器执行.服务器和客户机在功能上是异步的,他们是各自独立的软件模块或者硬 ...

  5. FBX SDK 从2012.1 到 2013.3 变化

    ==================================================== ============================== 译文               ...

  6. 用MFC实现OpenGL编程

    一.OpenGL简介 众所周知,OpenGL原先是Silicon Graphics Incorporated(SGI公司)在他们的图形工作站上开发高质量图像的接口.但最近几年它成为一个非常优秀的开放式 ...

  7. EASY-X

    ----------------------- Page 1----------------------- 一 创建新项目 VC 写程序要有项目的概念,一个项目可以有多个 .cpp 文件,多个项目构 ...

  8. OpenCV3计算机视觉Python语言实现笔记(四)

    1. Canny边缘检测 OpenCV提供了Canny函数来识别边缘.Canny边缘检测算法有5个步骤:使用高斯滤波器对图像进行去噪.计算梯度.在边缘上使用非最大抑制(NMS).在检测到的边缘上使用双 ...

  9. OpenCV3 for python3 学习笔记3-----用OpenCV3处理图像2

    3.5.Canny边缘检测 OpenCV提供了Canny边缘检测函数来识别边缘.它有5个步骤:使用高斯滤波器对图像进行去噪.计算梯度.在边缘上使用最大抑制(NMS).在检测到的边缘上使用双阀值去除 假 ...

随机推荐

  1. 2.10 学习总结 之 JQ加强

    一.说在前面  昨天 完成了体温统计APP的编写 今天 学习json数据结构 二.学习总结 1.json数据结构 1)什么是json: JSON(JavaScript Object Notation) ...

  2. POJ2392:Space Elevator

    Space Elevator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9244   Accepted: 4388 De ...

  3. 阿里云香港服务器IIS发布网站不成功解决方法

    刚刚弄好了一个阿里云上服务器,费老劲儿了.我买了一个香港的服务器,最低配置,专有网络,买着玩的,一个.win的域名,省的国内备案了. 遇到的问题是怎么也访问不了我IIS上发布的网站,我把我解决方法说下 ...

  4. 一百零九、SAP的OO-ALV之三,屏幕绘制器的使用

    一.在Screen页面,点击格式,会打开屏幕绘制器 二.点击定制控制,和PS一样画出一个显示区域的画布容器 三.双击之后,在弹出的属性页面写入一个名字,保存 四.激活屏幕后关闭 五.关闭屏幕绘制器之后 ...

  5. css怎么让图片垂直左右居中?(外层div是浮动且按照百分比排列)

    一.原始的居中方法是把div换成table <div style="width: 500px; height: 200px; border: solid 1px red; text-a ...

  6. office组件导入导出常见异常记录

    异常:未能加载文件或程序集"Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken ...

  7. JAVA - 创建SpringBoot项目

    JAVA - 创建SpringBoot项目 Spring Boot是由Pivotal团队提供的全新框架,设计目的是用来简化新Spring应用的初始搭建以及开发过程.它主要推崇的是'消灭配置’,实现零配 ...

  8. sendgrid 批量发送邮件,收件栏只显示当前用户的方案

    需求:批量发送邮件,用户可能看到其他用户的邮箱地址,之前用BBC发送,但问题是接收地址是同一个. 官方解决方案:https://sendgrid.kke.co.jp/docs/Tutorials/A_ ...

  9. phpStudy配置站点解决各种不能访问问题(本地可www.xx.com访问)

    1.配置站点:打开phpStudy->其他选项菜单->站点域名管理 2.配置站点:打开phpStudy->其他选项菜单->打开hosts(www访问重点) 3.在apache的 ...

  10. JS location.href传参及接受参数

    当前页面传参 window.location.href= + "&name="+"zhangchenxao"; 下个页面接受参数 var url = l ...