python:shapely模块

一、几何对象

1、点(Point)

from shapely.geometry import Point

point = Point(0.0, 0.0)
属性说明
area点的面积(面积为0)
length点的周长(周长为0)
coords点的坐标值(通过list方法转为[(0.0, 0.0)])
x点的x坐标值
y点的y坐标值
z点的z坐标值

2、线(LineString)

from shapely.geometry import LineString

line = LineString([(0, 0), (1, 1)])
属性说明
area线的面积(面积为0)
length线的周长)
interpolate(distance, normalized=False)返回指定距离处的点,normalized=True, 则距离是几何对象长度的一部分
project(other, normalized=False)返回该几何对象到最接近另一个对象的点的距离,normalized=True, 归一化为对象长度的距离

3、闭合线(LinearRing)

通过在第一个索引和最后一个索引中传递相同的值,可以显式关闭该序列。 否则,通过将第一个元组复制到最后一个索引来隐式关闭序列

4、多边形(Polygon)

from shapely.geometry import Polygon

polygon = Polygon([(0, 0), (1, 1), (1, 0)])
属性说明
exterior.coords外部轮廓的点
interiors.coords内部轮廓的点

构建矩形多边形

from shapely.geometry import box

# box(minx, miny, maxx, maxy, ccw=True), 默认情况下右下角作为第一个点,为逆时针顺序
b = box(0.0, 0.0, 1.0, 1.0)
list(b.exterior.coords)
# [(1.0, 0.0), (1.0, 1.0), (0.0, 1.0), (0.0, 0.0), (1.0, 0.0)]

获取已知方向的多边形

from shapely.geometry import Polygon
from shapely.geometry import polygon

p1 = Polygon([(0, 0), (1, 1), (1, 0)])
p = polygon.orient(p1, sign=1.0)
# sign=1:外环逆时针,内环顺时针,sign=-1:外环顺时针,内环逆时针
list(p.exterior.coords)
# [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]

5、集合(Collections)

多个几何对象可以通过 geoms 或者 in / list(), 进行迭代获取GeometryCollection的成员

6、多个点(MultiPoint)

构造函数还接受另一个MultiPoint实例或Point实例的无序序列,从而进行复制

7、多条线(MultiLineString)

构造函数还接受MultiLineString的另一个实例或LineString实例的无序序列,从而进行复制

8、多个多边形(MultiPolygon)

MultiPolygon构造函数采用一系列外部环和孔列表元组:[((a1, …, aM), [(b1, …, bN), …]), …]

构造函数还接受无序的Polygon实例序列,从而进行复制

二、属性和方法

性质说明
area面积
bounds边界元组(Xmin, Ymin, Xmax, Ymax)
length周长
minimum_clearance最小间隙,返回可以移动节点以产生无效几何的最小距离,不存在最小间隙,则将返回math.infinity
geom_type返回几何对象的类型
distance(obj)到另一个几何对象的最小距离
hausdorff_distance(obj)到另一个几何对象的Hausdorff距离(到另一个几何对象最近点的最大距离)
representative_point()返回保证在几何对象内的廉价计算点
has_z是否有z坐标
is_ccwLinearRing对象是否逆时针
is_empty是否为空
is_ring是否为封闭且简单的LineString
is_simple是否交叉
is_valid是否有效,有效的LinearRing不能在一个点上交叉或接触到自己,有效的Polygon不能拥有任何重叠的外环或内环,有效的MultiPolygon不能包含任何重叠的多边形
_eq_(obj)两个对象几何类型相同且坐标精确匹配,返回True
equals(obj)两个对象集合理论上的边界,内部和外部一致,返回True
almost_equals(obj, decimal=6)两个对象在指定点的小数点精度上的所有点都近似相等,则返回True
contains(obj)另一个对象没有点在对象外部,并且至少有一个点在对象(a包含b),返回True
within(obj)对象的边界和内部仅与另一个的内部(而不是其边界或外部)相交(a被包含于b)返回True
crosses(obj)对象的内部与另一个的内部相交但不包含该对象,并且交集的尺寸小于一个或另一个的尺寸(a,b相交),则返回True
disjoint(obj)对象的边界和内部与其他对象都不相交(a,b不相交),则返回True
intersects(obj)如果对象的边界或内部以任何方式相交与另一个对象(a,b相交),则返回True(intersects 是 disjoint 的逆函数)
overlaps(obj)如果两个对象相交intersects 但互相都不包含(a,b重叠),则返回True
touches(obj)如果两个对象至少有一个公共点,并且它们的内部不与另一个的任何部分相交(a,b相切),则返回True
relate(obj)返回对象内部,边界,外部与另一个几何对象的DE-9IM关系矩阵的字符串表示
relate_pattern(obj, pattern)如果几何之间的关系的DE-9IM字符串满足该模式,则返回True
boundary返回表示对象的集合论边界的低维对象
centroid返回对象的几何质心
difference(obj)返回组成该几何对象的点的表示,这些点不组成另一个对象,a - (a,b相交的部分) 即 a - (a∩b)
intersection(obj)返回此对象与另一个几何对象的交集的表示形式,a,b相交的部分 即 a∩b
symmetric_difference(obj)返回此对象中不在另一个几何对象中的点以及另一个不在此几何对象中的点的表示,a,b的并集-a,b的交集 即 (a∪b) - (a∩b)
union(obj)返回此对象和另一个几何对象的点并集的表示形式,a,b的并集 即 a∪b,更高效的方法: shapely.ops.unary_union()
shapely.ops.unary_union(geoms)返回给定几何对象的并集表示,重叠的多边形将被合并.线会溶解并结点, 重复的点将被合并,比union()更有效,可用于尝试修复无效的MultiPolygons, 面积可能会不一样
convex_hull返回包含对象中所有点的最小凸多边形的表示形式,除非对象中的点数少于三个。对于两点,返回LineString;对于一点,返回本身
envelope返回包含对象的点或最小矩形多边形(边与坐标轴平行)的表示形式
minimum_rotated_rectangle返回包含对象的最小矩形多边形(不一定平行于坐标轴),线或点, 返回本身
  • object.buffer(distance, resolution=16, cap_style=1, join_style=1,
    mitre_limit=5.0)

返回此几何对象给定距离内所有点的近似表示

distance: 为正 扩张,为负侵蚀

resolution: 近似于围绕一个点的四分之一圆的线段数 默认值16近似于圆形.面积的99.8%
cap_style:集合样式 1 round 圆形, 2 flat 扁平, 3 square 正方形
join_style:线条相交处的样式 1 round 圆角 2 mitre 方角 3 bevel 切掉顶角

  • object.parallel_offset(distance, side, resolution=16, join_style=1,
    mitre_limit=5.0)

仅适用于 LineString或LineRing,返回距对象左侧或右侧一定距离的LineString或MultiLineString

distance:必须是浮点数, 平行偏移量
side: 根据LineString的给定几何点的方向来确定的方向(左右),left:与LineString或LineRing 同向,right: 与LineString或LineRing 反向
resolution:近似于围绕一个点的四分之一圆的线段数 默认值16
join_style: 线条相交处的样式 1 round 圆角 2 mitre 方角 3 bevel 切掉顶角
mitre_limit: 平行线的距离与指定距离的比 就是斜角比, 超过,边角会变成倒角

  • object.simplify(tolerance, preserve_topology=True)

返回几何对象的简化表示,简化后的对象中的所有点将在原始几何体的公差距离内

preserve_topology:默认为True, 使用较慢的算法保留拓扑结构,False, 使用更快的Douglas-Peucker 算法保留拓扑结构

三、仿射变换

  • shapely.affinity.affine_transform(geom, matrix)

返回经过仿射变换后的矩阵 系数矩阵以2D或3D转换的列表或元组形式分别提供6或12个项
2D仿射变换, 矩阵为6个参数 [a, b, d, e, xoff, yoff]
3D仿射变换, 矩阵为12个参数 [a, b, c, d, e, f, g, h, i, xoff, yoff, zoff]

  • shapely.affinity.rotate(geom, angle, origin=‘center’, use_radians=False)

返回二维平面上的旋转几何

>> from shapely import affinity
>>> line = LineString([(1, 3), (1, 1), (4, 1)])
>>> rotated_a = affinity.rotate(line, 90)
>>> rotated_b = affinity.rotate(line, 90, origin='centroid')
  • shapely.affinity.scale(geom, xfact=1.0, yfact=1.0, zfact=1.0,
    origin=‘center’)

返回沿每个维度按比例缩放的几何图形

origin: 缩放的原点,默认是center 即 2D几何对象的边界框中心centerid, 也可以是单个点对象 或者 坐标元组

xfact / yfact / zfact: 缩放比例. 设缩放原点为(X0,Y0, Z0 ) ,正值, 直接缩放,负值, 缩放后再沿着x=X0 / y=Y0 / z=Z0 对称

>>> triangle = Polygon([(1, 1), (2, 3), (3, 1)])
>>> triangle_a = affinity.scale(triangle, xfact=1.5, yfact=-1)
>>> triangle_a.exterior.coords[:]
[(0.5, 3.0), (2.0, 1.0), (3.5, 3.0), (0.5, 3.0)]
>>> triangle_b = affinity.scale(triangle, xfact=2, origin=(1,1))
>>> triangle_b.exterior.coords[:]
[(1.0, 1.0), (3.0, 3.0), (5.0, 1.0), (1.0, 1.0)]
  • shapely.affinity.skew(geom,xs=0.0, ys=0.0, origin=‘center’,
    use_radians=False)

返回倾斜的几何体,沿x和y维度剪切角度。

use_radians=True, 以度或者弧度指定裁切角

origin: 默认是边界框中心(几何质心centerid),也可以是Point对象 或者坐标元组

  • shapely.affinity.translate(geom,xs=0.0, ys=0.0, origin=‘center’,
    use_radians=False)

返回沿每个方向偏移量的平移几何体

四、地图投影和转换

  • shapely.ops.transform(func, geom)

将func应用于geom的所有坐标,并从转换后的坐标中返回相同类型的新几何

Shapely是一个Python库,用于处理和分析几何形状。在Shapely模块中,使用shapely.geometry.Polygon代表多边形,使用shapely.geometry.MultiPolygon代表多个多边形。可以使用Polygon类创建多边形对象,并且可以获取其相关属性。例如,可以使用area属性获取多边形的面积,使用length属性获取多边形的周长。可以使用exterior.coords获取多边形的外边界坐标,使用interiors获取多边形的内部环。还可以使用bounds属性获取多边形的边界框。 另外,Shapely还提供了一些函数来进行几何对象的转换。例如,可以使用asShape函数将类似于GeoJSON的对象转换为Shapely几何对象。还可以使用shape函数进行几何对象的转换。这些函数可以让您方便地将其他类型的几何对象转换为Shapely几何对象,以进行进一步的分析和处理。 此外,Shapely还提供了一些方法来判断点是否在多边形内部。例如,可以使用contains方法来判断某个点是否在多边形内部。contains方法接受一个Point对象作为参数,如果点在多边形内部,则返回True,否则返回False。 综上所述,通过使用Shapely库,您可以方便地创建、分析和处理几何形状,包括多边形,并进行一些常见的几何操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python之几何集合操作模块Shapely的简介](https://blog.csdn.net/jclian91/article/details/121887135)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Python模块Shapely](https://blog.csdn.net/linzi1994/article/details/106484538)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值