30分钟学会shapely空间几何分析

地理空间Python工具链实战:Geopandas、Shapely与Rasterio协同指南 地理空间数据处理本质上是坐标系、几何对象、栅格矩阵与空间关系的系统工程。其核心原理在于统一数据模型(WKT/WKB+EPSG+NumPy)驱动下的分层协作:shapely负责底层几何运算,geopandas提供Pandas风格的空间DataFrame接口,pyproj精准管理CRS转换,rasterio和rioxarray分别掌控栅格I/O与多维分析。这种解耦设计赋予技术链高稳定性、低耦合性与强可扩展性,广泛应用于城市计算、遥感分析、物流优化等工程场景。本文聚焦2022年成熟稳定的十大Python地理空间库 阅读详情
AI摘要

本文介绍Python Shapely库的基本使用方法,包括Point、LineString和Polygon等几何对象的创建、属性及方法,同时涵盖了空间关系判断、几何操作等实用功能。

  shapely是python中开源的空间几何对象库,支持Point(点),LineString(线),        Polygon(面)等几何对象及相关空间操作。

公众号后台回复关键字:"源码",获取本文全部代码。

实践证明,它的以下一些功能特性非常常用:

  • 几何对象可以和numpy.array互相转换。

  • 可以轻松求线的长度(length),面的面积(area),对象之间的距离(distance),最小最大距离(hausdorff_distance)。

  • 可以轻松求几何对象之间的关系:相交(intersect),包含(contain),求相交区域(interp)等。

  • 可以轻松对几何对象求几何中心(centroid),缓冲区(buffer),最小旋转外接矩形(minimum_rotated_rectangle)等。

  • 可以求线的插值点(interpolate),可以求点投影到线的距离(project),可以求几何对象之间对应的最近点(nearestPoint)

  • 可以轻松对几何对象进行旋转(rotate)和缩放(scale)。

#安装shapely
!pip install shapely 
from shapely import geometry as geo
from shapely import wkt 
from shapely import ops
import numpy as np 

一,Point对象

# 创建Point对象
pt1 = geo.Point([0,0])
print(pt1) 
coord = np.array([0,1])
pt2 = geo.Point(coord)
print(pt2)
pt3 = wkt.loads("POINT(1 1)")
print(pt3)

#批量可视化
geo.GeometryCollection([pt1,pt2,pt3])

# 常用属性

print(pt1.x) 
print(pt1.y)
print(list(pt1.coords))  
print(np.array(pt1)) #可以和np.array互转

# 常用方法

d = pt2.distance(pt1)
print(d)


二, LineString对象

# 创建LineString对象
line1 = geo.LineString([(0,0),(1,-0.1),(2,0.1),(3,-0.1),(5,0.1),(7,0)])
line1 

arr = np.array([(2,2),(3,2),(4,3)])
line2 = geo.LineString(arr)
line2 

line3 = wkt.loads("LineString(-2 -2,4 4)")
line3 

# 常用属性
print(line2.length) 
print(list(line2.coords)) 
print(np.array(line2))  #可以和np.array互转
print(line2.bounds) #坐标范围
center = line2.centroid #几何中心
geo.GeometryCollection([line2,center])

bbox = line2.envelope #最小外接矩形
geo.GeometryCollection([line2,bbox]) 

rect = line2.minimum_rotated_rectangle #最小旋转外接矩形
geo.GeometryCollection([line2,rect])

# 常用方法

d1 = line1.distance(line2) #线线距离
print(d1)
d2 = line1.distance(geo.Point([-1,0])) #线点距离
print(d2)
d3 = line1.hausdorff_distance(line2) #最小最大距离
print(d3)

pt_half = line1.interpolate(0.5,normalized=True) #插值
geo.GeometryCollection([line1,pt_half])

ratio = line1.project(pt_half,normalized=True) #投影
print(ratio)
line1_simplify = line1.simplify(0.5)  #化简 DouglasPucker算法
print(line1)
print(line1_simplify)
line1_simplify 

buffer_with_circle = line2.buffer(0.2)  #端点按照半圆扩展
geo.GeometryCollection([line2,buffer_with_circle])

buffer_without_circle = line2.buffer(0.2,cap_style=2) #端点不扩展
geo.GeometryCollection([line2,buffer_without_circle])

buffer_with_square = line2.buffer(0.2,cap_style=3) #端点按照方形扩展
geo.GeometryCollection([line2,buffer_with_square])

buffer_round_join = line2.buffer(0.2,join_style=1) #圆弧连接
geo.GeometryCollection([line2,buffer_round_join])

buffer_angle_join = line2.buffer(0.2,join_style=2) #折角连接
geo.GeometryCollection([line2,buffer_angle_join])

print(line2.intersects(line3)) #线线关系,是否相交
print(line2.interp(line3)) #线线交点
print(line2.contains(geo.Point(2.5,2))) #点线关系

三,Polygon对象

# 创建Polygon对象
poly1 = geo.Polygon([(0,0),(1,0),(1,1),(0,1),(0,0)]) #起点和终点相同
poly1

coords = np.array([(0,0),(1,0.1),(2,0),(1,2),(0,0)])
poly2 = geo.Polygon(coords)
poly2 

#第一个括号是外部坐标,后面的是内部空洞坐标
poly3 = wkt.loads("POLYGON((0 0,2 0,2 2,0 2,0 0),(0.5 0.5,1.5 0.5,1.5 1.5,0.5 1.5,0.5 0.5))")
poly3 

#创建bbox对象
poly4 = geo.Polygon.from_bounds(xmin=0,ymin=0,xmax=20,ymax=20)
poly4 

#常用属性
print(poly1.area)  #面积
print(poly1.length) #周长
print(np.array(poly1.exterior))  #外围坐标点
print(poly3.bounds) #坐标范围

center = poly3.centroid #几何中心
geo.GeometryCollection([center,poly3]) 

poly3.boundary #边缘


rect = poly2.minimum_rotated_rectangle #最小外接矩形
geo.GeometryCollection([rect,poly2])

# 常用方法
r1 = poly2.contains(geo.Point(0,0)) #面点关系
print(r1)

r2 = poly2.intersects(geo.LineString([(0,0),(5,5)])) #面线关系
print(r2)

r3 = poly2.intersects(poly3) #面面关系
print(r3)

geo.GeometryCollection([poly1,line3])

inter = poly1.interp(line3) #面线交集
geo.GeometryCollection([poly1,inter])

geo.GeometryCollection([poly1,poly2])

poly1.interp(poly2) #面面交集

poly1.union(poly2) #面面并集

poly2.difference(poly1) #面面补集

poly2.simplify(0.5) #简化

print(poly2.area)
poly2_bigger = poly2.buffer(0.2) #外扩面积变大
print(poly2_bigger.area)
poly2_smaller = poly2.buffer(-0.2) #内扩面积变小
print(poly2_smaller.area)
poly2_smaller 

四,其他几何对象

# MultiPoint 多点

x = np.linspace(0,2*np.pi,10)
y = np.sin(x)
points = [geo.Point(i,j) for i,j in zip(x,y)]
multipoints = geo.MultiPoint(points ) 
multipoints

hull = multipoints.convex_hull  #凸包
geo.GeometryCollection([hull,multipoints]) 

# MultiLineString 多线
multilines = geo.MultiLineString([line1,line2])
multilines 

# MultiPolygon 多面

multipolys = geo.MultiPolygon([poly1,poly2])
multipolys 

# GeometryCollection 对象集合

geoms = [pt1,pt2,pt3,line3,poly3]
geo.GeometryCollection(geoms) #方便在jupyter 中对多个几何对象可视化

五,进阶操作

以下是一些非常有用但是不属于某个类的方法的函数。

  • ops.nearest_points 求最近点

  • ops.split 分割线

  • ops.substring  求子串

  • affinity.rotate 旋转几何体

  • affinity.scale 缩放几何体

  • affinity.translate 平移几何体

from shapely import ops,affinity 

poly1 = geo.Polygon([(0,0),(2,0),(1,1),(0,0)])
poly2 = geo.Polygon([(4,0),(6,0),(6,2),(4,2),(4,0)])

p1,p2 = ops.nearest_points(poly1,poly2)

geo.GeometryCollection([poly1,poly2,p1,p2]) 

poly1_rot30 = affinity.rotate(poly1,30,origin = "centroid")
geo.GeometryCollection([poly1,poly1_rot30])

poly1_scale = affinity.scale(poly1,xfact=2.0,yfact=2.0)

geo.GeometryCollection([poly1,poly1_scale])

【干货】10个实用的大数据空间分析Python库,你用过几个? 需求:点击地图上的标记,显示更多信息(如单车编号、剩余电量)。解决:使用添加HTML内容。# 遍历单车数据,添加标记# 创建弹出窗口(包含单车编号和剩余电量)# 遍历单车数据,添加标记 for idx , row in df . iterrows() : # 创建弹出窗口(包含单车编号和剩余电量) popup = folium . Popup(f"单车编号: {row [ 'bike_id' ] } <br>剩余电量: { 阅读详情

相关推荐

GIS开发实战:5分钟搞定GeoJSON与WKT格式互转(附Python代码)

本文为GIS开发者提供了一套高效的Python实战方案,快速实现GeoJSON与WKT格式的互转。文章深入解析了两种格式在坐标顺序、几何类型和坐标系上的核心差异,并详细演示了如何利用Shapely和GeoPandas库进行精准转换与批量处理,帮助开发者打通地理空间数据在不同系统间的应用链路。

weixin_29199873的博客 101

python Shapely使用指南详解

Shapely是一个Python库,用于操作和分析笛卡尔坐标系中的几何对象。 引入包 from shapely.geometry import Point from shapely.geometry import LineString 共有的变量和方法 object.area   Returns the area (float) of the object. object.bounds   返回对象的(minx,miny,maxx,maxy)元组(float类型) object.length   返回对象的长度 object.geom_type   返回对象类型 object.distan

GeoPandas空间分析实战:从CSV坐标到行政区划匹配与热力图

地理空间分析是数据科学中连接位置信息与业务逻辑的关键能力,其核心在于理解坐标参考系(CRS)如何定义真实世界距离与形状,以及如何通过空间关系运算(如点面包含、空间连接)实现地理归属判断。GeoPandas作为pandas的地理增强版本,以GeoDataFrame为载体,天然支持CSV/Excel经纬度解析和Shapefile读取,大幅降低空间计算门槛。它依托shapely进行几何判断、pyproj完成坐标转换,在保持Python工程化优势的同时,支撑销售区域归因、物流网点覆盖、外卖订单热力密度等高频业务场景

weixin_30776545的博客 420

Python库 | Shapely-1.8.0-cp39-cp39-win_amd64.whl

python库,解压后可用。 资源全名:Shapely-1.8.0-cp39-cp39-win_amd64.whl

GIS空间分析中的KNN实战:从地理直觉到算法工具

KNN(K近邻算法)作为机器学习中最基础的空间推理方法,其核心思想天然契合地理学第一定律——‘近处事物关联更强’。它不依赖复杂假设,以距离度量为纽带,将空间邻近性转化为分类、插值与异常检测的可计算逻辑。在GIS领域,KNN尤其适用于小样本分类、动态阈值决策、多源异构数据融合及实时空间异常识别等场景。相比深度学习模型,KNN具备零统计假设、增量适应性强、决策完全可解释等工程优势,且能无缝对接坐标系转换、空间滞后特征、地理距离定制等GIS特有操作。本文聚焦KNN在ArcGIS、QGIS与Google Earth

weixin_34226182的博客 451

GIS如何改变生活:从空间分析到民生应用的实战指南

地理信息系统(GIS)并非仅是电子地图或坐标可视化工具,而是一套将位置数据转化为可计算关系网络的技术体系。其核心在于空间分析能力——通过拓扑运算、动态投影与空间索引,实现对邻近性、连通性、集聚性等隐性地理关系的建模与干预。这种能力使GIS成为城市治理、农业决策、应急响应等场景中不可或缺的底层支撑技术。尤其在多源数据融合与WebGIS应用日益普及的今天,GIS正从专业系统演进为像水电一样的数字基础设施,赋能基层工作者、开发者与普通市民。本文聚焦真实项目中的空间思维重构、技术栈落地与避坑实践,揭示GIS如何让‘

天下无双 404

shapely库的用法,高效处理点、线、面的几何关系和相关延申(GeoPandas 库)python

它提供了一套丰富的函数和方法,用于读取、写入、操作和分析地理空间数据,包括点、线、多边形等几何对象。以上是一些常用的多边形处理方法,你可以根据具体需求使用 Shapely 提供的函数和方法来处理你的多边形数据。以上仅是 GeoPandas 库的一些基础用法示例,该库还提供了更多强大的功能,如地理空间分析、数据合并、投影转换等。: Shapely 是一个优秀的 Python 库,用于进行几何对象的创建、操作和分析。以上仅是 Shapely 库的一些基础用法示例,该库还提供了丰富的几何操作和分析功能。

qq_44442727的博客 8986

别再死记硬背了!用这5个Shapely实战案例,轻松搞定GIS数据处理

本文通过5个Shapely实战案例,帮助读者轻松掌握GIS数据处理技巧。从城市道路等距采样到公园区域分析,再到行政边界简化,每个案例都展示了Shapely库的高效应用。告别枯燥的API记忆,用工程师思维解决实际问题,提升GIS数据处理效率。

weixin_28706923的博客 199

python之shapely库的使用

了解使用shapely库,这一篇足够啦

weixin_48127633的博客 1万+

SEO到GEO:数据科学家的空间化决策力跃迁

地理空间分析(GEO)正从GIS专业领域演变为数据科学的基础能力维度,其本质是将传统数据清洗、统计建模与业务洞察投射到真实物理坐标系中,实现算法价值的场景化放大。依托Python生态(geopandas、shapely等)即可完成坐标纠偏、空间连接、地理加权回归等核心任务,无需依赖商业GIS软件。在AI模型能力趋同的今天,GEO提供的空间上下文——如路网距离、功能邻近性、空间自相关性——成为区分普通建模师与高价值决策伙伴的关键分水岭,广泛应用于智能选址、LBS优化、区域风控与本地化运营等实战场景。

weixin_29597551的博客 358

空间数据科学简化:从坐标系校验到可验证位置决策

空间数据科学是将地理坐标转化为业务洞见的系统性方法,其核心在于理解坐标系作为物理世界度量标尺的本质,而非单纯的地图绘制或GIS软件操作。它强调空间关系的可计算性(如网络距离替代欧氏距离)、地理语义的可建模性(如POI三层标签编码)与位置决策的可验证性(如Moran指数检验空间自相关)。该能力已广泛应用于本地生活增长、城市物流优化、社区公共服务评估等场景,尤其适合具备Python基础但缺乏地信背景的一线从业者。本文聚焦真实项目中高频踩坑点——坐标系误用、POI语义失真、尺度谬误与空间统计误判,并提供GeoPa

atu99602的博客 448

Shapely 扩展包功能札记

Shapely 扩展包功能札记 shapely 是python 中开源的空间几何对象库,支持 Point(点),LineString(线),Polygon(面) 等几何对象及相关空间操作。 Shapely is a BSD-licensed Python package for manipulation and analysis of planar geometric objects. It is based on the widely deployedGEOS(the engine ofPos...

Tianfeng-Pink 的博客 2916

空间分析三大核心算法:随机森林、GWR与DBSCAN实战指南

空间分析是地理信息系统(GIS)、遥感、城市科学和环境建模的基础技术能力,其核心在于处理兼具属性与位置特征的地理数据。理解空间自相关、空间非平稳性与密度异质性等基本原理,是构建可靠模型的前提。随机森林凭借对高维异构空间特征的鲁棒性,成为预测建模的稳定器;地理加权回归(GWR)通过局部参数估计,有效应对空间非平稳性带来的解释失效;DBSCAN则基于密度与距离双重约束,在噪声密集的真实地理场中自动识别有意义的空间聚类。三者分别解决变量混杂、参数恒定假设失真、先验结构缺失等典型工程痛点,广泛应用于国土监测、房价建

abo1977的博客 437

GeoPandas 用户指南全览:从数据模型、空间计算到地图绘制的完整技术手册

GeoPandas 是基于 pandas 与 Shapely 构建的开源地理数据处理库,其官方用户指南([doc/source/docs/user_guide.rst](https://link.gitcode.com/i/0fdfe4a114ff19c0820997ec89a3530e))按主题组织为 14 个可复现示例的章节,覆盖了日常使用 GeoPandas 的绝大部分场景。本文以该指南为骨

gitblog_00177的博客 178

Python3.6如何安装Shapely

但是,如果您在安装Shapely时遇到了问题,这篇文章将为您提供指导。如果您使用的是Windows,请将GEOS_DLL路径添加到PATH环境变量中,如果您使用的是Linux,则添加LD_LIBRARY_PATH。现在,您已经学会了如何在Python3.6中安装Shapely库以及如何解决常见的安装问题。如果您需要处理地理信息、地图相关的项目,Shapely是一个非常有用的库。将GEOS_DLL路径添加到PATH环境变量中,如果您使用的是Linux,则添加LD_LIBRARY_PATH。

. 3003

新疆各级公路shp文件:从路网数据到空间分析实战

公路shp文件是GIS空间分析的基础矢量数据,其核心在于属性字段的完整性与坐标系的正确性。通过geopandas读取、投影转换与拓扑检查,可将分幅路网拼接为可计算的路网图,进而支撑最短路径与等时圈分析。在交通可达性、物流选址与应急调度等场景中,一份带行政等级、几何有效的公路shp文件直接决定分析结果的可靠性。新疆各级公路shp文件正是这类需求的典型代表,其处理流程涵盖字段核对、坐标系转换、分幅合并与去重,最终跑通从数据到结论的完整链路。

weixin_34121282的博客 400

快速上手GRES:30分钟搭建你的通用指代表达式分割系统

GRES(Generalized Referring Expression Segmentation)是CVPR 2023 Highlight及IJCV 2026收录的通用指代表达式分割系统,能够精准处理任意数量目标对象的指代表达式,包括多目标和无目标场景。本文将带你在30分钟内完成GRES系统的搭建与基础使用,让你快速掌握这一强大的计算机视觉工具。 ## 📋 准备工作:环境与依赖 ###

gitblog_00198的博客 784

武大遥感学院考研上机考试全攻略:考点剖析与备考指南

从编程基础到遥感原理,从GDAL到geopandas,技术认知决定实战表现。遥感与GIS作为空间信息处理的两大支柱,其核心技术在于将地理问题转化为可计算的模型:栅格数据波段运算、矢量空间关系判断、坐标系转换与投影统一,这些原理构成了上机考试的能力骨架。掌握影像读写、数组运算和空间分析,不仅适用于考研复试,更是从事生态环境监测、城市规划、资源调查等领域的工程必备技能。当考生面对一份陌生遥感数据时,能否快速定位数据类型、选择合适工具链并完成从数据读取到结果输出的完整链路,正是武大遥感学院上机考试希望检验的工程素

weixin_33860553的博客 349
上一篇: 像 Keras 一样优雅地使用 pytorch-lightning
下一篇: 动手学geopandas地理数据分析
算法美食屋
博客等级 码龄9年 2万+粉丝 154原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值