我正在创建一个应用程序,它对Android设备的位置有一个非常准确的估计。我还需要将这些数据发送到代理服务器。
我的当前实现获取设备本身上的GPS位置,并将其发送给代理。此外,它还向服务器发送谷歌的GeoLocation API所需的数据,例如wifi访问点,然后服务器调用该API并获取另一个位置。GPS定位和地理定位都在表格中。
{
center: {
lat: ...,
lng: ...,
},
accuracy: ...
}
这意味着,对于一个位置,我最终得到了两个不同的估计器,每个估计器都有自己的中心和精度。我的问题如下:
有没有办法将这两个地点组合成一个单一的、更精确的位置?理想情况下,我希望使用一些API,它接受上面表单上的几个对象,并返回一个具有新中心的对象,其精度值低于所提供的位置。如果没有这样的API,那么如果有人可以帮助我开发一个具有预期效果的算法,那也很好。
由于这些位置估计的是相同的真实位置,将它们组合在一起应该能够产生更好的结果。我无法通过谷歌搜索或阅读带有google-geolocation标签的所有问题的几页来找到答案。
这是一个有点难分类的问题,结果可能更适合https://stats.stackexchange.com/的统计学家。如果是的话,让我知道,我会在那里回答我的问题。
发布于 2017-07-04 17:08:36
基本上,您的问题分解为找到包含两个圆的交点的圆,这两个圆圈是由地理位置和GPS位置给出的。
为了简单起见,让我们将地理定位x1的纬度称为经度y1和精度r1,而我们表示的是GPS位置x2、经度y2和精度r2的纬度。请注意,我使用的是笛卡尔坐标。在做下面的计算之前,你必须转换你给定的极坐标。
这两个圆圈

你需要计算的是不对称透镜的中点(x3,y3),在[(x1,y1)(x2,y2)]和生成圆半径r3之间的线上。

作为一个很好的资源,我向您推荐保罗·伯克的网页,它也提供了一些实现,例如在Python中,请不要混淆本文中的x3和y3,因为我选择了更适合您的问题的替代命名。
然后由x3 = x1 + a*(x2-x1)/d、y3 = 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)。
剩下的取决于你,因为我不知道你在用哪种语言。如果有什么不清楚的地方,可以随意评论这个答案。
编辑:如果您搜索圆圈相交,您会发现更多的例子,例如这个涉及Google的问题
https://stackoverflow.com/questions/44904731
复制相似问题