当前位置:   article > 正文

Neo4j:找到两个纬度/经度之间的中间点

两个经纬度点的中点是什么

昨天我写了一篇博客文章,展示了如何使用Cypher查找两个纬度/经度之间的中点,这是第一次尝试填补丢失位置的方法,但我意识到我可以做得更好。

正如我在上一篇文章中提到的,当我找到一个缺少经纬度坐标的停靠点时,通常可以在附近找到两个停靠点,以便对该停靠点的位置进行三角剖分。

我也有火车路线,该路线指示从一个停靠点到另一个停靠点所花费的秒数,这使我可以指示出无位置停靠点是否比另一个停靠点更靠近一个停靠点。

例如,考虑在b没有位置的情况下停靠a,b和c。 如果停靠点之间有以下距离:

(a)-[:NEXT {time: 60}]->(b)-[:NEXT {time: 240}]->(c)

它告诉我们,点“ b”实际上是从“ a”到“ c”的距离的0.2,而不是中点。

一个公式可以用来说明这一点:

  1. a = sin((1−f)⋅δ) / sin δ
  2. b = sin(f⋅δ) / sin δ
  3. x = a ⋅ cos φ1 ⋅ cos λ1 + b ⋅ cos φ2 ⋅ cos λ2
  4. y = a ⋅ cos φ1 ⋅ sin λ1 + b ⋅ cos φ2 ⋅ sin λ2
  5. z = a ⋅ sin φ1 + b ⋅ sin φ2
  6. φi = atan2(z, √x² + y²)
  7. λi = atan2(y, x)
  8.  
  9. δ is the angular distance d/R between the two points.
  10. φ = latitude
  11. λ = longitude

翻译成Cypher(带有强制性的希腊符号)后,它看起来像这样,以找到从一个点到另一个点的方式的点0.2

  1. with {latitude: 51.4931963543, longitude: -0.0475185810} AS p1,
  2. {latitude: 51.47908, longitude: -0.05393950 } AS p2
  3.  
  4. WITH p1, p2, distance(point(p1), point(p2)) / 6371000 AS δ, 0.2 AS f
  5. WITH p1, p2, δ,
  6. sin((1-f) * δ) / sin(δ) AS a,
  7. sin(f * δ) / sin(δ) AS b
  8. WITH radians(p1.latitude) AS φ1, radians(p1.longitude) AS λ1,
  9. radians(p2.latitude) AS φ2, radians(p2.longitude) AS λ2,
  10. a, b
  11. WITH a * cos(φ1) * cos(λ1) + b * cos(φ2) * cos(λ2) AS x,
  12. a * cos(φ1) * sin(λ1) + b * cos(φ2) * sin(λ2) AS y,
  13. a * sin(φ1) + b * sin(φ2) AS z
  14. RETURN degrees(atan2(z, sqrt(x^2 + y^2))) AS φi,
  15. degrees(atan2(y,x)) AS λi
  1. ╒═════════════════╤════════════════════╕
  2. │φi │λi
  3. ╞═════════════════╪════════════════════╡
  4. 51.49037311149128-0.04880308288561931
  5. └─────────────────┴────────────────────┘

一个快速的健全性检查,插入0.5而不是0.2可以找到我能够根据昨天的帖子进行健全性检查的中点:

  1. ╒═════════════════╤═════════════════════╕
  2. │φi │λi
  3. ╞═════════════════╪═════════════════════╡
  4. 51.48613822097523-0.050729537454086385
  5. └─────────────────┴─────────────────────┘

目前为止就这样了!

翻译自: https://www.javacodegeeks.com/2016/11/neo4j-find-intermediate-point-two-latlongs.html

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号