Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于Python Shapely的几何集合操作

基于Python Shapely的几何集合操作

作者头像
MeteoAI
发布于 2019-09-17 07:14:36
发布于 2019-09-17 07:14:36
6.9K00
代码可运行
举报
文章被收录于专栏:MeteoAIMeteoAI
运行总次数:0
代码可运行

shapely是基于笛卡尔坐标的几何对象操作和分析Python库,底层基于GEOS和JTS库。

shapely无法读取和写数据文件,但可以基于应用广泛的一些格式和协议进行序列化(serialize)和去序列化(deserialize)操作。

shapely不关注数据格式和坐标系统,但shapely的整合性很强,可以和GIS之类的工具协同工作。这种黏性类似python。

安装

基于构建的发行版
windows
  • conda install shapely
  • 基于 wheels 安装 (http://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely)
Mac OS和Linux
  • pip install shapely,如果需要针对向量化加速版本可通过pip install shapely[vectorized]安装
  • 通过系统包管理器,比如 aptyumHomebrew等。
  • 也可以通过Canopy和Anaconda等Python发行版工具安装,比如Anaconda,conda install shapely
基于源码

当需要兼容基于GEOS的更多模块,或者想要使用不同的GEOS版本,可以基于源码进行安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install shapely --no-binaryshapely

如果使用自定义GEOS版本进行安装时,可能需要指定geos-config程序的路径,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GEOS_CONFIG = /path/to/geos-config pip install shapely

基本操作

  • 创建点 from shapely.geometry import Point point = Point(0, 0) # Point((0, 0)) point.area # 获取点的面积 point.length # 获取点的长度 point.bounds # 获取点的边界
  • 创建圆 In[20]: circle = Point(0, 0).buffer(10) # 创建以(0, 0)为圆心,10为半径的圆 In[25]: circle.area # 获取创建的圆的面积 Out[25]: 313.6548490545939 从上述结果可以看出,所创建的圆的面积小于pi r^2,这是因为buffer方法默认参数resolution为16,resolution 的值越大圆越完整。 In[30]: circle= Point(0, 0).buffer(10, resolution=1000) In[31]: circle.area Out[31]: 314.15913616617644 In[32]: circle= Point(0, 0).buffer(10, resolution=1000000) In[33]: circle.area Out[33]: 314.1592653588436
  • 创建多边形 from shapely.geometry import Polygon polygon = Polygon([(0, 1), (0, 2), (0, 3), (1, 1), (1, 2), (1, 3), (0, 3)]) 注意: Polygon 函数仅能基于有序的点创建多边形,且点的集合必须要是闭合的。使用MultiPoint 函数创建,并使用 convex_hull 方法创建多边形。 from shapely.geometry import MultiPoint coords = [(0, 1), (1, 2), (1, 4), (2, 0), (3, 2)] # coords不一定要是闭合点集合 poly = MultiPoint(coords).convex_hull

集合操作

  • 判断点是否在多边形
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In[50]: p1 = Point(24.952242, 60.1696017)
In[51]: p2 = Point(24.976567, 60.1612500)
In[52]: coords = [(24.950899, 60.169158), (24.953492, 60.169158), (24.953510, 60.170104), (24.950958, 60.169990)]
In[53]: poly = Polygon(coords)

In[54]: poly.contains(p1)
Out[54]: True

In[55]: p1.within(poly)
Out[55]: True

In[56]: poly.contains(p2)
Out[56]: False
  • 判断多边形的集合操作
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In[57]: poly2 = Polygon([(23.2154, 59.1156), (24.83151, 59.41516), (25.11667, 60.311561), (24.16178, 60.13315)] )
   
In[58]: poly2.intersects(poly)
Out[58]: True
   
In[59]: poly2.contains(poly)
Out[59]: True
   
In[60]: poly.contains(poly2)
Out[60]: False
  • .contains:判断polygon1是否包含polygon2
  • .intersects:判断polygon1和polygon2是否重叠
  • .intersections :返回两个polygon重叠的部分

参考链接:

1. https://stackoverflow.com/questions/36399381/whats-the-fastest-way-of-checking-if-a-point-is-inside-a-polygon-in-python

2. https://gis.stackexchange.com/questions/90055/finding-if-two-polygons-intersect-in-python

3. https://automating-gis-processes.github.io/CSC18/lessons/L4/point-in-polygon.html


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MeteoAI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
shapely.geometry.polygon 实现任意两个四边形的IOU计算
来源为华中科技大学白翔老师。import numpy as np import shapelyfrom shapely.geometry import Polygon,MultiPoint #多边形 line1=[2,0,2,2,0,0,0,2] #四边形四个点坐标的一维数组表示,[x,y,x,y....]a=np.array(line1).reshape(4, 2) #四边形二维坐标表示poly1 = Polygon(a).convex_hull #python四边形对象,会自动计算四个点,最
狼啸风云
2021/05/10
2K0
[1025]python地理处理包shapely
github:https://github.com/Toblerity/Shapely
周小董
2021/07/20
4.8K0
[1025]python地理处理包shapely
(数据科学学习手札74)基于geopandas的空间数据分析——数据结构篇
geopandas是建立在GEOS、GDAL、PROJ等开源地理空间计算相关框架之上的,类似pandas语法风格的空间数据分析Python库,其目标是尽可能地简化Python中的地理空间数据处理,减少对Arcgis、PostGIS等工具的依赖,使得处理地理空间数据变得更加高效简洁,打造纯Python式的空间数据处理工作流。本系列文章就将围绕geopandas及其使用过程中涉及到的其他包进行系统性的介绍说明,每一篇将尽可能全面具体地介绍geopandas对应方面的知识,计划涵盖geopandas的数据结构、投影坐标系管理、文件IO、基础地图制作、集合操作、空间连接与聚合。   作为基于geopandas的空间数据分析系列文章的第一篇,通过本文你将会学习到geopandas中的数据结构。 geopandas的安装和使用需要若干依赖包,如果不事先妥善安装好这些依赖包而直接使用pip install geopandas或conda install geopandas可能会引发依赖包相关错误导致安装失败,官方文档中的推荐安装方式为:
Feffery
2020/02/15
3K0
模拟量差分和单端(iou计算方法)
人工修正后的每一个框与算法输出的所有框去计算IOU,取出IOU大于0.9的算法输出框
全栈程序员站长
2022/07/31
5980
模拟量差分和单端(iou计算方法)
30分钟学会shapely空间几何分析
shapely是python中开源的空间几何对象库,支持Point(点),LineString(线), Polygon(面)等几何对象及相关空间操作。
lyhue1991
2021/03/17
4.5K0
30分钟学会shapely空间几何分析
讲解python多边形裁剪
在计算机图形学中,多边形裁剪是一个常用的技术,用于确定多边形与给定裁剪窗口之间的交集。通过裁剪,我们可以剔除不在裁剪窗口范围内的部分,从而减少图形处理的计算量,并加速渲染过程。 Python提供了各种库和算法来实现多边形裁剪。在本篇文章中,我们将使用shapely库来进行多边形的裁剪操作。shapely是一个Python库,提供了一些用于处理几何图形数据的功能。
大盘鸡拌面
2023/12/26
6360
(数据科学学习手札84)基于geopandas的空间数据分析——空间计算篇(上)
  在本系列之前的文章中我们主要讨论了geopandas及其相关库在数据可视化方面的应用,各个案例涉及的数据预处理过程也仅仅涉及到基础的矢量数据处理。在实际的空间数据分析过程中,数据可视化只是对最终分析结果的发布与展示,在此之前,根据实际任务的不同,需要衔接很多较为进阶的空间操作,本文就将对geopandas中的部分空间计算进行介绍。
Feffery
2020/05/25
4.2K0
(数据科学学习手札84)基于geopandas的空间数据分析——空间计算篇(上)
geopandas 0.14版本重要更新内容一览
大家好我是费老师,就在前两天,Python生态中的GIS运算神器geopandas发布了其0.14.0新版本,在这次新版本更新中,不仅是新增了许多矢量计算API,还开始为日后正式发布1.0版本做准备,对一些底层依赖版本进行改动。今天的文章中,我就将为大家一一介绍相关的更新内容:
派大星的数据屋
2023/09/18
4090
geopandas 0.14版本重要更新内容一览
(数据科学学习手札154)geopandas 0.14版本新特性一览
  大家好我是费老师,就在前两天,Python生态中的GIS运算神器geopandas发布了其0.14.0新版本,在这次新版本更新中,不仅是新增了许多矢量计算API,还开始为日后正式发布1.0版本做准备,对一些底层依赖版本进行改动。今天的文章中,我就将为大家一一介绍相关的更新内容:
Feffery
2023/09/18
4490
(数据科学学习手札154)geopandas 0.14版本新特性一览
Part3-1.获取高质量的阿姆斯特丹建筑立面图像(附完整代码)
本文为《通过深度学习了解建筑年代和风格》论文复现的第三部分——获取阿姆斯特丹高质量街景图像的上篇,主要讲了如何获取利用谷歌街景地图自动化获取用于深度学习的阿姆斯特丹的高质量街景图像,此数据集将用于进行建筑年代的模型训练[1]。
renhai
2023/11/24
9660
Part3-1.获取高质量的阿姆斯特丹建筑立面图像(附完整代码)
geopandas:Python绘制数据地图
GeoPandas是一个Python开源项目,旨在提供丰富而简单的地理空间数据处理接口。 GeoPandas扩展了Pandas的数据类型,并使用matplotlib进行绘图。GeoPandas官方仓库地址为:GeoPandas。 GeoPandas的官方文档地址为:GeoPandas-doc。 本文主要参考GeoPandas Examples Gallery。 GeoPandas的基础使用见Python绘制数据地图1-GeoPandas入门指北。 GeoPandas的可视化入门见Python绘制数据地图2-GeoPandas地图可视化。
luckpunk
2023/09/14
4.1K0
geopandas:Python绘制数据地图
(在模仿中精进数据可视化06)常见抽象地图的制作方法
  我们经常会在一些PPT报告或者宣传广告中看到一些比较抽象的地图,它们都是在正常地图的基础上,通过置换几何元素,来实现出较为抽象的效果,这类的作品非常之多,因此本文不模仿实际的某幅作品,而是制作出下面三类抽象地图:
Feffery
2021/01/05
9750
(在模仿中精进数据可视化06)常见抽象地图的制作方法
Google Earth Engine(GEE)——点线面运算及其交集并集等
Earth Engine 支持对Geometry对象的各种操作。这些包括对单个几何图形的操作,例如计算缓冲区、质心、边界框、周长等。例如:
此星光明
2024/02/02
3260
Google Earth Engine(GEE)——点线面运算及其交集并集等
一个R语言中操纵矢量空间数据的标准化工具—sf
摘要 Simple features是一种在计算机中编码矢量空间数据(点、线、面等)的标准化方法。sf包在R语言中引入了simple features对象,它基本具备和sp、rgeos、rgdal一样的矢量空间数据处理能力。本文主要描述此包的基本功能,其在R语言诸多扩展生态系统中的地位,以及在连接R语言与其他空间计算系统中的潜在价值。
数据小磨坊
2019/09/17
4.6K0
一个R语言中操纵矢量空间数据的标准化工具—sf
六、处理几何数据【ArcGIS Python系列】
要素类中的每个要素都由一个或多个顶点组成,这些顶点定义了点、多段线或多边形要素。在点要素类的情况下,每个点要素由单个顶点组成。多段线和多边形要素由多个顶点组成。每个顶点是由一对x、y坐标定义的位置。该图说明了点、多段线和多边形如何在笛卡尔坐标空间中由顶点定义。
renhai
2023/11/24
5850
六、处理几何数据【ArcGIS Python系列】
(数据科学学习手札147)Python GIS利器shapely全新2.0版本一览
  大家好我是费老师,我写过很多篇介绍geopandas相关技术的文章,而geopandas之所以如此高效易用,成为Python GIS生态中的翘楚,离不开其底层依赖库shapely对其矢量计算功能的支持。
Feffery
2022/12/18
9870
(数据科学学习手札147)Python GIS利器shapely全新2.0版本一览
GEE训练教程——如何确定几何形状的中心点坐标和相交的坐标
在GEE中,可以使用.geometry()方法来获取几何形状的中心点坐标和相交的坐标。
此星光明
2024/06/11
3080
GEE训练教程——如何确定几何形状的中心点坐标和相交的坐标
GIS拓扑讲解点线面几何体的拓扑关系判断及运算分析_turf案例
Turf.js是JavaScript  空间分析库,由Mapbox 提供,Turf 实现了
周陆军博客
2023/04/09
2.8K0
spatial4j入门实战
Spatial4j是一款java编写的空间计算开源库,支持ASL开源协议,支持地理空间计算。
doaction
2021/11/18
3.2K0
POSTGIS 总结
PostGIS是一个空间数据库,空间数据库像存储和操作数据库中其他任何对象一样去存储和操作空间对象。
小石头
2022/11/10
6.9K0
POSTGIS 总结
推荐阅读
相关推荐
shapely.geometry.polygon 实现任意两个四边形的IOU计算
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验