2

假设我们有两个beacons放置在道路两侧。我们知道它们latitude以及longitude它们的位置(我们将它们视为一个位置)。我们也知道distance这两者之间的米beacons数(使用 Haversine 公式测量)。我们的设备正在这两个点之间(在这些信标的范围内)移动。是否有任何功能可以帮助我们根据两个信标之间的距离或根据设备到单个信标的距离来计算我们当前的位置?我如何根据我拥有的这些数据找到设备的位置,或者有什么对实现我想要的有用的东西?

简短地说:我想知道用户在两个之间的位置BEACONS而不使用 GPS 系统,但我从信标获得的数据(在这种情况下:确切的信标位置、从用户到信标的确切距离以及两个信标之间的确切距离)

作为一个例子:(Filled Black dotsBEACONS一个虚构的RangeRed dots是一些user unknown positionsGreen Lines是的Known Distances;我们也知道latitude and longitude黑点的)基于这些数据我想找到用户的位置(单红点)

在此处输入图像描述

注意:我检查了这个问题,但是我不明白为什么该位置被返回为一个int以及为什么时间t包含在那里。

4

2 回答 2

0

这里是设置位置的方法,并获取您站在这两点之间的距离。

 private Location BeaconLocation1() {

        Location location = new Location("POINT_LOCATION1");
        location.setLatitude(45.0);
        location.setLongitude(45.0);
        return location;
    }

  private Location BeaconLocation2() {

        Location location = new Location("POINT_LOCATION2");
        location.setLatitude(45.5);
        location.setLongitude(45.5);
        return location;
    }

   public class MyLocationListener implements LocationListener {
    public void onLocationChanged(Location location) {

            Location pointLocation1 = BeaconLocation1();
            Location pointLocation2 = BeaconLocation2();

            float distance1 = location.distanceTo(pointLocation1);
            float distance2 = location.distanceTo(pointLocation2);

            Toast.makeText(MapsActivity.this,
                     "Distance from Point1: "+distance1+" Meters", Toast.LENGTH_LONG).show();
          Toast.makeText(MapsActivity.this,
                     "Distance from Point2: "+distance2+" Meters", Toast.LENGTH_LONG).show();
        }
    public void onStatusChanged(String s, int i, Bundle b) {
        }
    public void onProviderDisabled(String s) {
        }
    public void onProviderEnabled(String s) {
        }
}

编辑 :

看到这个帖子

从任何点将米转换为纬度经度

于 2014-12-26T13:23:28.603 回答
0

要专注于您的问题,没有一次性的公式可以做所有事情,但有一些可以使过程更容易。但是,您将不得不在一大堆数学库中四处寻找它们。

这就是它背后的理论。

好的,所以我们需要第 3 点的纬度和经度。我将解释它背后的理论,因为代码对我来说太多了,现在做不了。

为此,我们将利用从一个点到另一个点的轴承。您可以使用此链接获取该公式:轴承公式

我假设我们知道设备和每个单独信标之间的距离,否则这是不可能的,除非您想使用某种雷达方法来识别它。我真的无能为力。如果我们确实知道这一点,我们可以使用从它们到设备的距离作为它们的半径来围绕两个信标构建虚构的圆圈。

例如,从设备到信标之一是 500 米。从设备到信标 2 是 200M。在信标一周围画一个半径为 500M 的假想圆,在信标二周围画一个半径为 200M 的假想圆。

显然我们不能以编程方式构建这些圈子,这太乏味了。所以我们将使用圆方程:(x -h)^2 + (y - k)^2 =r^2。

高中快速修订显示 h 和 k 是圆心的 x 和 y 坐标,偏离笛卡尔平原。我们将把我们想象的笛卡尔平原放在第一点的中心。现在我们将锻炼方位角到点 2,并使用从点到点的距离在笛卡尔平面(点 1)上构建一条从 0,0 到点 2 的线。使用方位角的棕褐色,我们得到线的梯度。现在我们将使用方位角的余弦和正弦,并使用斜边的距离来获得笛卡尔平面上信标 2 相对于信标 1 的 y 和 x 位置。现在我们将这些值分回到我们的圆方程中:

你的第一个等式永远是:(x -0)^2 + (y - 0)^2 =r^2。其中 r 是本例中的半径 500M。第二个等式是 (x -h)^2 + (y - k)^2 =r^2。其中 r 是本例中的半径 200M。除了现在 h 将是上面计算的 x 值,y 将是上面计算的 y 值。

现在是棘手的聚会。我们需要找到这些圆相交的地方。从我们在数学堆栈交换的朋友那里我得到了公式。交点

现在,根据设备位置,您的圈子可能有零个 1 或两个交点。如果你得到两个结果,你将不得不在设备移动时再次运行整个事情,以查看我们是离圆心更近还是更远。从中我们可以得出哪一边是正确的点,我们可以在笛卡尔平原上画一条直线到信标 1,获得直线的梯度,将其转换为信标 1 的方位,然后逆向工程的斜线和方位得到坐标的公式。

这并不漂亮或容易,但你最终会到达那里。这很可能不是唯一的解决方案,因此请随意寻找其他解决方案。祝你好运。

于 2014-12-26T14:38:51.420 回答