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

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

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

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

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

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

WITH 51.4931963543 AS lat1, -0.0475185810 AS lon1, 
     51.47908 AS lat2 , -0.05393950 AS lon2
 
WITH radians(lat1) AS rlat1, radians(lon1) AS rlon1, 
     radians(lat2) AS rlat2, radians(lon2) AS rlon2, 
     radians(lon2 - lon1) AS dLon
 
WITH rlat1, rlon1, rlat2, rlon2, 
     cos(rlat2) * cos(dLon) AS Bx, 
     cos(rlat2) * sin(dLon) AS By
 
WITH atan2(sin(rlat1) + sin(rlat2), 
           sqrt( (cos(rlat1) + Bx) * (cos(rlat1) + Bx) + By * By )) AS lat3,
     rlon1 + atan2(By, cos(rlat1) + Bx) AS lon3
 
RETURN degrees(lat3) AS midLat, degrees(lon3) AS midLon
╒═════════════════╤═════════════════════╕
│midLat           │midLon               │
╞═════════════════╪═════════════════════╡
│51.48613822097523│-0.050729537454086385│
└─────────────────┴─────────────────────┘

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值