中文
luckfu的潦草笔记

最初的梦想绝对会到达!


  • 首页

  • 归档

  • 关于我

  • 公益404

  • 搜索

利用shapely库计算多边形包含和相交关系

时间: 2022-04-26   |   分类: python   | 字数: 691 字 | 阅读: 2分钟 | 阅读次数:

最近接到一个需求,计算一个坐标点(经纬度)是否在多边形(地理区域)内,之前写代码的哥们非常用功的搞懂了计算原理并用SQL实现了完整代码🐮,but计算完所有数据需要一周时间,这个项目的负责人打电话问我,有没有更快的办法,我想了想,假如这个办法真的这么复杂,极端情况下只能看懂计算方法换别的方式实现,不过Life is short, you need Python ,于是很轻松的搜索到了shapely库。

shapely是专门做图形计算的包,基本上图形线段,点的判断包里都有,shapely里主要由Point,LineString,Polygon这三类组成,在shapely里点,线,面之间都是可以做判断的,比如说计算点到线段的距离,点到面之间的距离,点与点之间的距离,点是否在一个图形的内部或外部,或边界上,线是否在图形的内部等。

Polygon对象

Polygon对象,它的输入是二维数组组成的list,坐标信息 [[x,y],[x1,y1],[x2,y2]….]或者 [[经度,纬度],[经度1,纬度1],[经度2,纬度2]…],一般的GIS应用打点画出区域就是如此,例如:

[(0, 0), (-1, 1), (2, 1), (3, -2)]

Point对象

点对象,它的输入一般是 x,y,高级应用中还可以是三维点,这个需求用不到

计算点是否在多边形内

首先将坐标数组转换为Polygon对象,将xy坐标转换为Point对象,然后使用Point.within(Polygon) 判断

from shapely.geometry import Point
from shapely.geometry.polygon import Polygon
import matplotlib.pyplot as plt

polygon=Polygon([(0, 0), (-1, 1), (2, 1), (3, -2)])
point=Point(1, 0.5)
print(point.within(polygon))
# 画图
x,y =polygon.exterior.xy
plt.plot(x,y)
plt.scatter(point.x,point.y)

计算两个多边形是否相交

首先将坐标数组转换为Polygon对象,两个多边形polygon.overlaps(polygon1)

#python# #shapely#

声明:利用shapely库计算多边形包含和相交关系

链接:http://www.luckfu.com/post/2022-04-26_shapely/

作者:luckfu

声明: 本博客文章除特别声明外,均采用 CC BY-NC-SA 3.0许可协议,转载请注明出处!

创作实属不易,如有帮助,那就打赏博主些许茶钱吧 ^_^
WeChat Pay

微信打赏

Alipay

支付宝打赏

paypal Pay

PayPal打赏

终于开通 github Codespace
健康码变黄码
  • 文章目录
  • 站点概览
luckfu

luckfu

一瞬间,过去的一切都离你而去,剩下的只有回忆!

31 日志
29 分类
41 标签
GitHub
标签云
  • 生活
  • Python
  • Oracle cloud
  • Free vps
  • Gpt
  • K8s
  • Vm.standard.a1.flex
  • Chatgpt
  • Github
  • Langchain
© 2010 - 2025 luckfu的潦草笔记
Powered by - Hugo v0.127.0 / Theme by - NexT
0%