将标记移动距离的特定距离(以米为单位)

时间:2017-03-21 20:54:33

标签: android google-maps google-maps-api-3 coordinates latitude-longitude

我有一些项目集合,其中一些可能具有相同的坐标 因此,它们在Google地图中显示为1个标记,因为标记是一个在另一个上面绘制的 为了解决这个问题,我试图"移动"这些标记只有几米,这样标记就不会碰撞 我想将它们移动到距离它们所在地5米处 我在另一个SO answer之后执行了以下操作:

double newLat = item.getLatitude() + (Math.random() - .005) / 15000;    
double newLon = item.getLongitude() + (Math.random() - .005) / 15000;    

问题是这会使物品移动一点但看起来有些被4m移动了3m,我想尽可能确保我将在4-6米(最小/最大)之间
我怎样才能改变我的公式呢?

1 个答案:

答案 0 :(得分:1)

我认为最好的选择可能是使用SphericalUtil. computeOffset中的Google Maps Android API Utility Library方法:

  

<强> computeOffset

public static LatLng computeOffset(LatLng from,
                               double distance,
                               double heading)
     

返回从指定标题中的原点移动距离得到的LatLng(以北方向顺时针方向表示)。

     

参数:

     

来自 - 从中​​开始的LatLng。

     

距离 - 旅行距离。

     

标题 - 从北方顺时针旋转的标题。

在您的情况下,您可以将distance设置为5米,并将heading参数随机化为0到360度之间:

Random r = new Random();
int randomHeading = r.nextInt(360);
LatLng newLatLng = SphericalUtil.computeOffset(oldLatLng, 5, randomHeading);