PHP:使用lat / lng /信号强度数据查找信标的位置

时间:2011-10-25 17:30:03

标签: php geolocation latitude-longitude

让我们假设,隐藏在森林里,有一个灯塔。我乘坐直升飞机飞过森林,并随意间隔着灯塔。对于每次ping,我得到一个lat / lng对和该点(但没有方向)的信标信号强度。

  1. 如何在PHP中计算信标的位置?

  2. 如果稍后我会再读一遍,我如何将其添加到我目前估计的灯塔位置?

  3. 注意:我们不知道森林如何影响信号强度,但我们可以假设效果是均匀的 - 信标可能在一片空地上,或埋在石头下面。

1 个答案:

答案 0 :(得分:1)

我假设您正在获得ping的经度和纬度。

您需要至少4个ping,在2 X 2平方网格中(尽可能接近此值)。更多ping可能会有所帮助,但您将不得不处理测量错误。

这是一个糟糕的Ascii绘图,具有强度值。假设北方正在上升。

X (6 strength)             X (4 strength)
.
.
.
X (5 strength)             X (3 strength)

根本不做任何数学计算,你可以确定信标位于你进行这些测量的中心西北方的某个地方。

如果您可以通过信号强度(大约)计算距离,那么您可以猜测地图上的某个位置。

如果你无法计算距离,只需在另外一个2 x 2方格的网格上划线即可。在某些时候,优势将接近相等,你可以假设信标靠近广场的中心。

我希望这对直升飞机有帮助并且不会太费时。

编辑添加:信标的信号强度与距离的平方成反比。 (distance = sqrt(x factor / signal strength))我们假设您已经确定了x因子(12),因此您知道信号强度为9表示地图上的半径为1.1英寸的圆,并且信号强度为3表示地图上一个2.0英寸半径的圆圈。

因此,当您在左下方获得ping时,可以将ping放在地图上,并绘制一个半径为1.5英寸的圆。当您在左上角获得ping时,可以将ping放在地图上,并绘制一个半径为1.4英寸的圆。

现在,这两个圆圈将在地图上的某个位置相交。在那个十字路口的某个地方将是信标的位置。

现在直升机转过身来,你就会在右上角看到ping。您绘制一个半径为1.7英寸的圆。然后你得到右下角的ping,然后你 画一个半径为2英寸的圆圈。

四个圆圈的交点应构成一个小的粗四边形。

你飞到四边形的中心,然后另一个ping。你应该获得相当高的信号强度。拉下绳子,找到灯塔和搁浅的徒步旅行者,回到绳子上,让直升机将你和滞留的徒步旅行者拉到安全地带。