python Shapely使用指南详解

参考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.distance(other)

  返回本对象和另一个对象的距离

object.representative_point()

  Returns a cheaply computed point that is guaranteed to be within the geometric object.

>>> from shapely.geometry import Point

>>> print Point(0,0).distance(Point(0,1))

1.0

>>> from shapely.geometry import LineString

>>> line = LineString([(0,0), (1,1), (1,2)])

>>> line.area

0.0

>>> line.bounds

(0.0, 0.0, 1.0, 2.0)

>>> line.length

2.414213562373095

>>> line.geom_type

'LineString'

Point

class Point(coordinates)

三种赋值方式

>>> point = Point(0,0)

>>> point_2 = Point((0,0))

>>> point_3 = Point(point)

一个点对象有area和长度都为0

>>> point.area

0.0

>>> point.length

0.0

坐标可以通过coords或x、y、z得到

>>> p = Point(2,3)

>>> p.coords

<shapely.coords.CoordinateSequence object at 0x7ffbc3d60dd0>


>>> list(p.coords)

[(2.0, 3.0)]

>>> p.x

2.0

>>> p.y

3.0

coords可以被切片

>>> p.coords[:]

[(2.0, 3.0)]

LineStrings

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

一个LineStrings对象area为0,长度非0

>>> line = LineString([(0,0), (0,1), (1,2)])

>>> line.area

0.0

>>> line.length

2.414213562373095

获得坐标

>>> line.coords[:]

[(0.0, 0.0), (0.0, 1.0), (1.0, 2.0)]

 >>> list(line.coords)

 [(0.0, 0.0), (0.0, 1.0), (1.0, 2.0)]

LineString依然可以接受一个同类型对象

>>> line2 = LineString(line)

>>> line2.coords[:]

[(0.0, 0.0), (0.0, 1.0), (1.0, 2.0)]

常见格式转换

>>> Point(1,1).wkt

'POINT (1 1)'

>>> Point(1,1).wkb

'\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?'

>>> Point(1,1).wkb.encode('hex')

'0101000000000000000000f03f000000000000f03f'

>>>

>>> Point(1,1).wkb.encode('hex')

'0101000000000000000000f03f000000000000f03f'

两者都有loads和dumps方法

对于wkt

>>> from shapely.wkt import dumps, loads

>>> s = dumps(Point(1,2))

>>> s

'POINT (1.0000000000000000 2.0000000000000000)'

>>> ss = loads(s)

>>> ss

<shapely.geometry.point.Point object at 0x7ffbc3d783d0>

>>> ss.coords[:]

[(1.0, 2.0)]

对于wkb

>>> from shapely.wkb import dumps, loads

>>> s = dumps(Point(1,2), hex=True)

>>> s

'0101000000000000000000F03F0000000000000040'

>>> ss = loads(s, hex=True)

>>> ss

<shapely.geometry.point.Point object at 0x7ffbc3d78790>

>>> ss.coords

<shapely.coords.CoordinateSequence object at 0x7ffbc3d783d0>

>>> ss.coords[:]

[(1.0, 2.0)]

要在Python中使用Shapely延长线,你可以使用Shapely的LineString对象。接下来,我将向你展示一个使用Shapely库延长线的示例代码: 首先,导入必要的包: ``` from shapely.geometry import Point, LineString import matplotlib.pyplot as plt ``` 然后,我们定义一条线段和一个延长线的起始点和结束点: ``` line = LineString([(1, 1), (5, 5)]) # 定义线段 extension_start = Point(3, 0) # 延长线的起始点 extension_end = Point(0, 3) # 延长线的结束点 ``` 接下来,我们可以使用Shapely的union函数将线段和延长线合并成一个延长线段: ``` extended_line = line.union(LineString([extension_start, extension_end])) ``` 最后,你可以使用Matplotlib库绘制延长线段的图形: ``` fig, ax = plt.subplots() ax.plot(*line.xy, 'r', label='Line') ax.plot(*extended_line.xy, 'b', label='Extended Line') # 添加标题和图例 ax.set_title('Extended Line') ax.legend() plt.show() ``` 这段代码将绘制出原始线段和延长后的线段。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [用Python求两条线段的交点,包括延长线的交点](https://blog.csdn.net/tanxuan231/article/details/128905813)[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_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [python Shapely使用指南详解](https://download.csdn.net/download/weixin_38632006/13735730)[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_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Python编程实现点到点、点到线、点到矩形、以及点到任意多边形的最短距离](https://blog.csdn.net/weixin_46156257/article/details/130851889)[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_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wanderer001

ROIAlign原理

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值