2012-12-21 95 views
0

我一直在试图找到Java代码示例,我可以将度量距离添加到特定坐标点。加入2公里的A点的纬度和减2公里,到B点的经度通过添加度量距离获取新的GPS坐标

例如,我想获得一个新的坐标点(B点),即A点西北部

有没有这样的功能的示例源代码?

+0

[This other post](http://stackoverflow.com/questions/5557706/calculating-distance-using-latitude-longitude-coordinates-in- kilometers-with-jav)应该有所帮助。 – assylias

+0

@assylias帖子没有考虑到经度“距离”取决于纬度。为此,如果距离足够短(可能<50公里),我将转换为Universal Traverse墨卡托,将其添加到Easting和Northing,然后转换回您的任何系统。 – SJuan76

+0

谢谢@assylias,但那不是我正在寻找的... – lyk

回答

2

获得如果你不需要高精度计算一个用减法的新坐标和距离都很小,你可以假设地球是大约R =6370公里球半径。以弧度为单位的纬度差异仅为dNorth/R,经度差异为dEast/R/cos(lat)。

为了获得更高的精度,您必须考虑到地球的形状更像椭球体。

+0

我不需要高精度,因为我只需要从OSM下载maptiles的新坐标,所以看起来你的想法可能适用于我的。 我可以澄清什么是DNorth和Deast? 那么我需要做什么才能在纬度点上增加2公里呢? – lyk

+0

dNorth是在北方向在公里的距离,dEast是在东方向 – Henry

+0

在千米的距离,使澄清: 新纬度=旧纬度+(dNorth/R), 新经度=旧经度+(dEast/R/cos(旧纬度)) ? 对于经度函数是否有划分的命令? – lyk

0

我这么认为,你可以使用大圆算法来做到这一点。

半径为R的球体表面上两个给定点P1 =(lat1,lon1)和P2 =(lat2,lon2)之间的最短距离(测地线)为大圆距。它可以用下式来计算:

dist = arccos(sin(lat1) · sin(lat2) + cos(lat1) · cos(lat2) · cos(lon1 - lon2)) · R (1) 

例如,在(40.6892°,-74.0444°)=(0.7102弧度,-1.2923弧度)和在艾菲尔铁塔自由女神像之间的距离(48.8583 °,2.2945°)=(0.8527弧度,0.0400弧度) - 假设地球的数字与半径6371公里的球形approximationa - 是:

dist = arccos(sin(0.7102) · sin(0.8527) + cos(0.7102) · cos(0.8527) · cos(-1.2923 - 0.0400)) · 6371 km 
    = 5837 km 

我发现,同时探索又如::

例如:

lat1: 34 
lng1: 34 

将在LAT15公里后,新的起点应该是这样 new_lat1:34 +5公里 new_lng1:34(lng1将保持相同的,因为我们只在纬度增加)

,这样你们可以一分为二的概率步骤::

  1. 使用加法计算坐标。

  2. 然后在步骤1中

+0

对不起,我有点困惑你的解决方案。我期望通过将度量距离添加到坐标来获得新的坐标点,而不是找出2个点之间的距离。你提到的两个步骤是如何帮助我获得的? – lyk

+0

可能是这个链接的第一篇文章将有助于你... https://groups.google.com/forum/#!msg/google-maps-js-api-v3/SXBp528Eyt4/cB7fUaZ2GEgJ – Prateek

+0

嗯,好吧,似乎这需要指出,一些操纵方程来计算距离。谢谢! – lyk