通过geopandas.sjoin()函数按多边形范围分割点
最近有一批点和多变型的数据,需要将点按照多边形的区域进行分割。
经过若干尝试,终于通过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()函数按多边形范围分割点的更多相关文章
- geopandas overlay 函数报错问题解决方案
前言 这篇文章依旧是基于上一篇文章(使用Python实现子区域数据分类统计)而写,此文章中介绍了使用 geopandas 的 overlay 函数对两个 GeoDataFrame 对象取相交或相异的部 ...
- (数据科学学习手札88)基于geopandas的空间数据分析——空间计算篇(下)
本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在基于geopandas的空间数据分析系列 ...
- 第5章 绘图基础_5.1-5.4 GDI绘图
5.1 GDI的原理和结构 (1)提供一种特殊机制彻底隔离应用程序与不同输出设备(eg.显示器或打印机),以便支持 与设备无关的图形. 光栅设备(如显示器.激光打印机):图像是由点构成的矩阵 图形输出 ...
- OpenGL基础渲染
客户端-服务器 客户端是存储在CPU存储器中的,并且在应用程序中执行(或者驱动程序),驱动程序将渲染命令和数据组合起来,发动到服务器执行.服务器和客户机在功能上是异步的,他们是各自独立的软件模块或者硬 ...
- FBX SDK 从2012.1 到 2013.3 变化
==================================================== ============================== 译文 ...
- 用MFC实现OpenGL编程
一.OpenGL简介 众所周知,OpenGL原先是Silicon Graphics Incorporated(SGI公司)在他们的图形工作站上开发高质量图像的接口.但最近几年它成为一个非常优秀的开放式 ...
- EASY-X
----------------------- Page 1----------------------- 一 创建新项目 VC 写程序要有项目的概念,一个项目可以有多个 .cpp 文件,多个项目构 ...
- OpenCV3计算机视觉Python语言实现笔记(四)
1. Canny边缘检测 OpenCV提供了Canny函数来识别边缘.Canny边缘检测算法有5个步骤:使用高斯滤波器对图像进行去噪.计算梯度.在边缘上使用非最大抑制(NMS).在检测到的边缘上使用双 ...
- OpenCV3 for python3 学习笔记3-----用OpenCV3处理图像2
3.5.Canny边缘检测 OpenCV提供了Canny边缘检测函数来识别边缘.它有5个步骤:使用高斯滤波器对图像进行去噪.计算梯度.在边缘上使用最大抑制(NMS).在检测到的边缘上使用双阀值去除 假 ...
随机推荐
- “~" 的用法
“~" 的用法 let arr = ['weixin','qq','weibo'] console.log(arr.indexOf('aa'),~arr.indexOf('aa'),'aa' ...
- 简单总结Get与Post的区别
工作当中经常遇到这两种类型的接口,也会被问到这两种类型的区别,这里简单总结一下算是一个简单的回忆吧. GET和POST是http协议的两种发送请求的方法.因为http的底层是TCP/IP,所以GET和 ...
- 面向对象设计思想和MVC设计模式
虽然之前学习Java时有接触过面向对象的设计思想,但因当时Java没学好.所以导致这两天讲php的面向对象设计时,感到没有头绪,这也反应了我练习少和逻辑能力的不足.而MVC设计思想 面向对象就是要将系 ...
- 安装完CUDA Toolkit,VS2010调试项目控制台一闪而过
选择菜单栏的调试>>开始执行(不调试),就不一闪而过:
- 实验吧-杂项-MD5之守株待兔(时间戳&python时间戳函数time.time())
其实也有点蒙圈,因为从没做过和时间戳有关的题. 打开网站,将系统密钥解密得到一串值,而自己的密钥解密是空的,既然说是要和系统匹配,就把解密得到的值以get方式送出去. 但是发现还是在自己的密钥也发生了 ...
- Java高级特性——注解,这也许是最简单易懂的文章了
最近,浪尖在做flink的项目时source和sink的绑定那块用到了注解,当然新版本1.6以后就变为server load的方式加载. 但是浪尖也是觉得很有毕业讲一下注解,毕竟高级免试也会问答的吧. ...
- spring源码 HierarchicalBeanFactory接口
HierarchicalBeanFactory 表示的是这些 Bean 是有继承关系的,也就是每个Bean 有可能有父 Bean. /* * Copyright 2002-2012 the origi ...
- Vulkan SDK 之 Depth Buffer
深度缓冲是可选的,比如渲染一个3D的立方体的时候,就需要用到深度缓冲.Swapchain就算有多个images,此时深度缓冲区也只需要一个.vkCreateSwapchainKHR 会创建所有需要的i ...
- 归并排序(包含逆序数对的个数51Nod1019)
归并排序是效率很好的排序方式,和快排效率一样高,但在稳定性上优于快排,下面我们来介绍归并排序. 归并排序运用递归将序列不断二分(其原理就是分治),就像一棵树不断向下分支,最后分到只剩一个元素,这样这个 ...
- Centos 7.4 DNS域名解析
1.安装部署包 yum -y install bind bind-utils bind-chroot 2.启动服务并设置开机自启动 [root@localhost ~]# systemctl star ...