当前位置:   article > 正文

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

如何得到两个经纬度的中心

在过去的两个周末中,我一直在处理一些运输数据,并且我想运行A *算法来查找两个车站之间的最快路线。

A *算法将一个EstimateEvaluator作为其参数之一,然后该评估器查看节点的经度/纬度,以确定一条路径是否值得遵循。 因此,我需要为每个测站添加纬度/经度,而且我很难找到数据集中所有点的定位日期。

幸运的是,我倾向于在测站的两侧各有经度/纬度两点,因此我可以算出中点作为丢失点的近似值。

我找到了一篇文章,该文章定义了可以用来执行此操作的公式 ,并且有一个StackOverflow帖子 ,其中包含一些实现该公式的Java代码。

我想找到萨里码头(Surrey Quays)站(51.4931963543,-0.0475185810)和火车线上更南的点(51.47908,-0.05393950)之间的中点。 我编写了以下Cypher查询来计算这一点:

  1. WITH 51.4931963543 AS lat1, -0.0475185810 AS lon1,
  2. 51.47908 AS lat2 , -0.05393950 AS lon2
  3.  
  4. WITH radians(lat1) AS rlat1, radians(lon1) AS rlon1,
  5. radians(lat2) AS rlat2, radians(lon2) AS rlon2,
  6. radians(lon2 - lon1) AS dLon
  7.  
  8. WITH rlat1, rlon1, rlat2, rlon2,
  9. cos(rlat2) * cos(dLon) AS Bx,
  10. cos(rlat2) * sin(dLon) AS By
  11.  
  12. WITH atan2(sin(rlat1) + sin(rlat2),
  13. sqrt( (cos(rlat1) + Bx) * (cos(rlat1) + Bx) + By * By )) AS lat3,
  14. rlon1 + atan2(By, cos(rlat1) + Bx) AS lon3
  15.  
  16. RETURN degrees(lat3) AS midLat, degrees(lon3) AS midLon
  1. ╒═════════════════╤═════════════════════╕
  2. │midLat │midLon │
  3. ╞═════════════════╪═════════════════════╡
  4. 51.48613822097523│-0.050729537454086385
  5. └─────────────────┴─────────────────────┘

右侧的Google Maps屏幕截图显示了顶部和底部的初始点以及中间的中间点。 这并不完美; 理想情况下,我希望中点在轨道上,但是对于算法而言,我认为这已经足够了。

现在,我需要填写无位置站的经纬度!

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/1013669
推荐阅读
相关标签
  

闽ICP备14008679号