我正在创建一个有兴趣高度准确估算Android设备位置的应用。我还需要将此数据发送到代理服务器。
我当前的实现在设备上获取GPS位置并将其发送到代理。此外,它将Google的GeoLocation API(如wifi访问点)所需的数据发送到服务器,然后服务器调用API并获取另一个位置。 GPS位置和地理定位都在表格
上
{
center: {
lat: ...,
lng: ...,
},
accuracy: ...
}
这意味着我最终会为一个位置提供两个不同的估算器,每个估算器都有自己的中心和精度。我的问题如下:
有没有办法将这两个地点合并为一个更准确的位置?理想情况下,我想使用一些API,它在上面的表单上采用多个对象,并返回一个具有新中心和精度值低于提供位置的单个对象。如果没有这样的API,如果有人可以帮助我开发出具有所需效果的算法,那也没关系。
由于这些位置估计相同的真实位置,因此以某种方式组合它们应该能够产生更好的结果。我无法通过Google搜索或通过阅读用google-geolocation
标记的所有问题的几个页面来找到答案。
这是一个稍微难以分类的问题,它可能会更适合https://stats.stackexchange.com/以上的统计人员。如果是这样,请告诉我,我会在那里提出我的问题。
答案 0 :(得分:1)
基本上,您的问题分解为找到包含地理定位和GPS位置给出的两个圆的交点的圆圈。
为简单起见,我们调用地理位置x1
的纬度,经度y1
和精度r1
,而我们则表示GPS位置的纬度{{1经度x2
和精度y2
。请注意,我使用的是笛卡尔坐标。在进行下面的概述计算之前,您必须转换给定的极坐标。
这两个圈子可以
您需要计算的是r2
与生成圆的半径(x3,y3)
之间的线上非对称镜头的中点[(x1,y1)(x2,y2)]
。
作为一个好的资源,我建议你Paul Bourke's page关于这个主题,它也提供了一些实现,例如:在Python或C中。请不要混淆文章中的r3
和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)
。
其余由您决定,因为我不知道您使用的是哪种语言。如果不清楚,请随意评论这个答案。
编辑:如果您搜索圆圈交叉点,您会发现更多示例,例如这question involving Google Maps API