【问题标题】:Finding the distance of coordinates from the beginning of a route in Shapely在 Shapely 中查找与路线起点的坐标距离
【发布时间】:2015-03-02 08:18:06
【问题描述】:

我有一个代表路线的坐标列表(纬度/经度)。 给定一定的半径和另一个坐标,我需要检查坐标是否在路线中(在任何点的给定半径内)以及它与路线起点的距离。

我查看了 Shapely,它看起来是一个很好的解决方案。

我首先创建了一个StringLine

from shapely.geometry import LineString
route = LineString[(x, y), (x1, y1), ...]

然后检查该点是否在路线附近,我添加了一个缓冲区并检查了 对于路口

from shapely.geometry import Point
p = Point(x, y)
r = 0.5
intersection = p.buffer(r).intersection(route)
if intersection.is_empty: 
    print "Point not on route"
else: 
    # Calculate P distance from the begning of route

我一直在计算距离。我想在p 分割路线并测量前半部分的长度,但我得到的交叉点结果是HeterogeneousGeometrySequence,我不确定我能做什么。

我相信我找到了解决方案:

if p.buffer(r).intersects(route):
 return route.project(p)

【问题讨论】:

  • 如果你有起点和终点的坐标,你可以简单地使用距离公式:purplemath.com/modules/distform.htm
  • 嘿@Afaan Bilal,我不是地理专家,但我相信简单的距离计算对于地理计算并不是 100% 准确的(世界是圆的......)。另外,我正在寻找使用某种包的完整解决方案。

标签: python geometry distance shapely


【解决方案1】:

而不是缓冲几何图形,这既昂贵又不完美(因为缓冲需要多个段和many other options),只需查看该点是否在距离阈值内:

if route.distance(p) <= r:
    return route.project(p)

另外,您现在可能已经意识到您的距离单位是度数。如果您想要线性距离,例如米,则需要使用不同的库使其变得更加复杂。

【讨论】:

  • 嘿@Mike T,感谢您的评论,我已经删除了缓冲区以支持纯距离。你能推荐一个轻量级的包(或python中的另一个实现)来将距离转换为米吗?
  • @haki 这实际上是一个复杂的问题,需要大量信息,例如区域有多大以及可接受的精度。有a few methods in this question,它可能有效,但还有其他几个没有列出,例如使用文森蒂公式或更精确的GeographicLib 计算测地线。
  • 谢谢@Mike T。如果理解正确,只要我在小范围内计算距离,转移就不会很重要。我目前乘以 100K 以获得米。我已经为您链接的问题加注了星标,以便有机会时可以解决。再次感谢。
  • 对于小比例尺,通常的方法是找出路线 [大部分] 在哪个 UTM 区域内,重新投影路线并指向该 UTM 区域,然后使用 Shapely 进行笛卡尔距离。动态投影非常快,但请注意确保正确设置。
猜你喜欢
  • 2022-08-15
  • 1970-01-01
  • 1970-01-01
  • 2018-02-15
  • 2012-06-13
  • 2012-03-08
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多