ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python-shapely包

2021-08-22 14:34:36  阅读:374  来源: 互联网

标签:shapely Point python object 0.5 对象 print Polygon


python-shapely

目录

shapely 是一个专门进行二维平面图像计算包

shapely是一个BSD授权的Python包。是专门做图形计算,用于操作和分析笛卡尔坐标系中的几何对象 ,基本上图形线段,点的判断包里都有,shapely里主要由Point,LineString,Polygon这三类组成。

主要对象

常用对象 说明
Point
LineString 线段
Polygon 多边形

通用对象方法

共有属性

共有属性 描述
object.area 获得面积
object.bounds 获得边界 (minx,miny,maxx,maxy)
object.length 长度
object.geom_type 获得类型 Point
object.distance(other) 获取和其他对象距离,不限于本类型
object.is_empty 是否为空
object.is_valid 是否有效
from shapely.geometry import Point
from shapely.geometry import LineString

print (Point(0,0).distance(Point(0,1)))
line = LineString([(0,0), (1,1), (1,2)])
print(line.area)
print(bine.bounds)
print(line.length)
print(line.geom_type)
# ----------------------------------------------------------
1.0
0.0
(0.0, 0.0, 1.0, 2.0)
2.414213562373095
'LineString'

Point

点对象

点对象具有零面积和非零长度

from shapely.geometry import Point

# 三种创建方式
point = Point(1,1)
point_2 = Point((1,1))
point_3 = Point(point)   # 复制已有的点对象 

print(point.area)      # 点的 area==0.0
print(ponit.length)    # 点的 length==0.0

# 得到X,y
# Point.x,Point.y,Point.z : 获取对应x,y,z坐标值
print(point.x)    # 1.0
print(point.y)    # 1.0


#  (minx, miny, maxx, maxy) 元组
print(point.bounds) #(1)

# Point.coords: 返回坐标值
# 通过 coords得到 x,y
print(list(p.coords)) # [(1.0,1.0)]


# coords可以被切片
print(p.coords[:])   # [(1.0,1.0)]

LineStrings

LineStrings 构造函数传入参数是2个或多个点序列

线段对象

线段对象具有零面积和非零长度

from shapely.geometry import LineString
line = LinearRing([(0, 0), (1, 1), (1, 0)]) # 创建线段对象
print(line.area)
#0
print(line.length)
#3.4142135623730949

print(line.bounds)   #边界
#(0.0, 0.0, 1.0, 1.0)

Polygon

多边形对象----为了结果的正确性,建议强制指定为凸多边形

Polygon构造函数采用两个位置参数。 第一个是(x,y [,z])点元组的有序序列,其处理方式与LinearRing情况完全相同。 第二个是可选的无序环状序列,用于指定特征的内部边界或“孔”。

from shapely.geometry import Polygon
polygon = Polygon([(0, 0), (1, 1), (1, 0)])
# 三角形

print(polygon.area)
print(polygon.length)
print(polygon.bounds)
print(polygon.boundary)

#0.5
#3.414213562373095
#(0.0, 0.0, 1.0, 1.0)
#LINESTRING (0 0, 1 1, 1 0, 0 0)

多边形关系

object.bound

  • 返回最小的外接正矩形
polygon = Polygon([(0, 0),(1, 1), (1, 0)])

print(polygon.bounds)
#(0.0, 0.0, 1.0, 1.0)  # xmin,ymin,xmax,ymax

object.boundary

  • 返回表示对象的集合论边界的低维对象
polygon = Polygon([(0, 0), (2, 2), (2, 0)])
print(polygon.boundary)

# 降一维度,由多边形变成线段
# 最小对象集合
#LINESTRING (0 0, 2 2, 2 0, 0 0)

line = LinearRing([(0, 0), (1, 1), (1, 0)])  # 创建线段对象
print(line.boundary)
#MULTIPOINT EMPTY

object.centroid

  • 返回对象的几何质心
line = LinearRing([(0, 0), (1, 1), (1, 0)])  # 创建线段对象
polygon = Polygon([(0, 0), (0,1),(1, 1), (1, 0)])
print(polygon.centroid)
print(line.centroid)

#POINT (0.5 0.5)
#POINT (0.6464466094067263 0.3535533905932737)

进阶属性

进阶属性 描述
object.contains(other) 是否包含
object.difference(other) 差集
object.intersection(other) 交集
object.symmetric_difference(other) 对称差集
object.union(other) 并集

object.intersection(other)

  • 交集

  • 返回此对象与另一个几何对象的交集的表示形式

  • a,b相交的部分 即 a∩b

polygon1 = Polygon([(0, 0), (0, 1), (1, 1), (1, 0)])
polygon2 = Polygon([(0, 0), (0.5, 1), (-0.5, 1), (-1, 0)])

box=polygon1.intersection(polygon2)
print(box)
print(box.area)

#POLYGON ((0 0, 0 1, 0.5 1, 0 0))
#0.25

# 如果两个图形没有交集
polygon1 = Polygon([(0, 0), (0, 1), (1, 1), (1, 0)])
polygon2 = Polygon([(0, 0), (-0.5, 1), (-1, 0)])

box=polygon2.intersection(polygon1)
print(box)
print(box.area)
#POINT (0 0)
#0.0

object.difference(other)

  • 返回组成该几何对象的点的表示,这些点不组成另一个对象
  • a - (a,b相交的部分) 即 a - (a∩b)
polygon1 = Polygon([(0, 0), (0, 1), (1, 1), (1, 0)])
polygon2 = Polygon([(0, 0), (0.5, 1), (-0.5, 1), (-1, 0)])

polygon1 = Polygon([(0, 0), (0, 1), (1, 1), (1, 0)])
polygon2 = Polygon([(0, 0), (0.5, 1), (-0.5, 1), (-1, 0)])

box=polygon2.difference(polygon1)
print(box)
print(box.area)

#POLYGON ((0 0, -1 0, -0.5 1, 0 1, 0 0))
#0.75

object.symmetric_difference(other)

  • 返回此对象中不在另一个几何对象中的点以及另一个不在此几何对象中的点的表示
  • a,b的并集-a,b的交集 即 (a∪b) - (a∩b)

object.union(other)

  • 并集

  • 返回此对象和另一个几何对象的点并集的表示形式

  • a,b的并集 即 a∪b

  • 更高效的方法: shapely.ops.unary_union()

polygon1 = Polygon([(0, 0), (0, 1), (1, 1), (1, 0)])
polygon2 = Polygon([(0, 0), (0.5, 1), (-0.5, 1), (-1, 0)])

box = polygon2.union(polygon1)
print(box)
print(box.area)

#POLYGON ((0 1, 0.5 1, 1 1, 1 0, 0 0, -1 0, -0.5 1, 0 1))
#1.75

还有很多有意思的用法:

参考:

https://blog.csdn.net/linzi1994/article/details/106484538

标签:shapely,Point,python,object,0.5,对象,print,Polygon
来源: https://www.cnblogs.com/tian777/p/15172138.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有