
本文介绍了如何使用 python 的 Shapely 和 Geopy 库来确定给定多边形中最远的两个坐标点,并计算它们之间的距离,结果以海里为单位。文章详细讲解了代码实现,包括必要的库导入、多边形创建、坐标遍历和距离计算,并提供了完整的可执行代码示例。
在处理地理空间数据时,经常需要计算多边形上两点之间的距离。本教程将指导你如何使用 Shapely 库创建多边形,并利用 Geopy 库找出多边形上距离最远的两点,并计算它们之间的距离(以海里为单位)。
准备工作
首先,确保你已经安装了 Shapely 和 Geopy 库。如果没有安装,可以使用 pip 进行安装:
pip install Shapely geopy
代码实现
以下代码演示了如何实现这一目标:
import shapely.geometry as sg from geopy.distance import distance # 创建多边形对象 t1 = sg.Polygon([(-74.418225663382, 39.36239030236737), # Atlantic City, NJ (-74.27880733397238, 39.71055595453288), (-74.75681303480502, 40.219387193292164), (-75.4705021020208, 40.60356289498688), (-76.88460230031765, 40.264996135212186), # Harrisburg, PA (-74.418225663382, 39.36239030236737)]) # 初始化变量以存储最远坐标和最大距离 furthest_pair = None max_distance = 0 # 遍历多边形的所有坐标对 for i, p1 in enumerate(t1.exterior.coords): for j, p2 in enumerate(t1.exterior.coords[i+1:]): dist = distance(p1, p2).nm # 计算两点之间的距离(海里) if dist > max_distance: max_distance = dist furthest_pair = (p1, p2) # 打印最远坐标和它们之间的距离 print("最远坐标:", furthest_pair) print("它们之间的距离:", max_distance, "海里") print("应该大约是: ", 126.0, "海里")
代码解释:
- 导入必要的库: shapely.geometry 用于创建和操作几何对象,geopy.distance 用于计算地理坐标之间的距离。注意导入 geopy.distance 时,需要使用 from geopy.distance import distance,直接导入模块会导致后续调用 distance 方法时出现错误。
- 创建多边形对象: 使用 sg.Polygon() 函数创建一个多边形对象,传入一个包含坐标点的列表。
- 初始化变量: furthest_pair 用于存储最远的坐标点对,max_distance 用于存储它们之间的距离。
- 遍历坐标对: 使用嵌套循环遍历多边形的所有坐标点对。注意内层循环从 i+1 开始,避免重复计算。
- 计算距离: 使用 distance(p1, p2).nm 计算两个坐标点之间的距离,结果以海里为单位。 geopy.distance.distance 接受两个元组作为输入,每个元组代表一个坐标点 (latitude, longitude)。
- 更新最远距离: 如果当前坐标对的距离大于 max_distance,则更新 max_distance 和 furthest_pair。
- 打印结果: 打印最远坐标点对和它们之间的距离。
注意事项
- 确保提供的坐标点是经纬度坐标,并且顺序正确(纬度在前,经度在后)。
- geopy.distance.distance 函数返回的是一个 geopy.distance.vincenty.VincentyDistance 对象,需要使用 .nm 属性才能获取以海里为单位的距离。
- Shapely 库主要用于几何对象的创建和操作,而 Geopy 库则专注于地理坐标的计算。
总结
本教程介绍了如何使用 Shapely 和 Geopy 库来查找多边形中最远的坐标点并计算它们之间的距离(海里)。通过理解和修改上述代码,你可以将其应用于各种地理空间数据处理任务中。


