如何将两个地图位置组合成更准确的地图?

时间:2017-07-04 11:26:49

标签: android google-maps geometry computational-geometry google-geolocation

我正在创建一个有兴趣高度准确估算Android设备位置的应用。我还需要将此数据发送到代理服务器。

我当前的实现在设备上获取GPS位置并将其发送到代理。此外,它将Google的GeoLocation API(如wifi访问点)所需的数据发送到服务器,然后服务器调用API并获取另一个位置。 GPS位置和地理定位都在表格

{
  center: {
    lat: ...,
    lng: ...,
   },
   accuracy: ...
}

这意味着我最终会为一个位置提供两个不同的估算器,每个估算器都有自己的中心和精度。我的问题如下:

有没有办法将这两个地点合并为一个更准确的位置?理想情况下,我想使用一些API,它在上面的表单上采用多个对象,并返回一个具有新中心和精度值低于提供位置的单个对象。如果没有这样的API,如果有人可以帮助我开发出具有所需效果的算法,那也没关系。

由于这些位置估计相同的真实位置,因此以某种方式组合它们应该能够产生更好的结果。我无法通过Google搜索或通过阅读用google-geolocation标记的所有问题的几个页面来找到答案。

这是一个稍微难以分类的问题,它可能会更适合https://stats.stackexchange.com/以上的统计人员。如果是这样,请告诉我,我会在那里提出我的问题。

1 个答案:

答案 0 :(得分:1)

基本上,您的问题分解为找到包含地理定位和GPS位置给出的两个圆的交点的圆圈。

为简单起见,我们调用地理位置x1的纬度,经度y1和精度r1,而我们则表示GPS位置的纬度{{1经度x2和精度y2。请注意,我使用的是笛卡尔坐标。在进行下面的概述计算之前,您必须转换给定的极坐标。

这两个圈子可以

  • 完全分开,没有共同点。我们通过假设所报告的位置是正确的,即设备不位于计算位置之外来放弃这种情况。如果您不想做出这个假设 - 选择更准确的位置。
  • 包含在另一个中。在这种情况下,您只需选择较小(即更准确)的圆作为优化位置。
  • 恰好相交一点( Jackpot! - 你有确切的位置)
  • 在不对称的镜片中相交,看起来像这样 intersecting circles

您需要计算的是r2与生成圆的半径(x3,y3)之间的线上非对称镜头的中点[(x1,y1)(x2,y2)]optimized location

作为一个好的资源,我建议你Paul Bourke's page关于这个主题,它也提供了一些实现,例如:在Python或C中。请不要混淆文章中的r3x3点,因为我选择了一个更适合您问题的替代命名。

然后给出您的优化位置 y3x3 = x1 + a*(x2-x1)/dy3 = y1 + a*(y2-y1)/d r3 = sqrt((r1)^2-a^2)a = ((r1)^2-(r2)^2+d^2)/2*d d = (sqrt((x2-x1)^2+(y2-y1)^2)

其余由您决定,因为我不知道您使用的是哪种语言。如果不清楚,请随意评论这个答案。

编辑:如果您搜索圆圈交叉点,您会发现更多示例,例如这question involving Google Maps API