寻找信标的两个地理位置之间的点

时间:2014-12-26 12:53:49

标签: android gis android-ibeacon altbeacon

假设我们在路的两边放置了两个beacons。我们知道他们所在的latitudelongitude(我们将其视为一个位置)。我们还知道这两个distance之间的beacons米(使用Haversine公式计算)。我们的设备在这两个点之间移动(这些信标的内部范围)。是否有任何功能可以帮助我们根据两个信标之间的距离或基于设备到单个信标的距离来计算当前位置? 如何根据我拥有的这些数据找到设备的位置,或者有什么东西对我想要的东西有用?

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

举例说明: (Filled Black dots BEACONS为虚RangeRed dotsuser unknown positionsGreen LinesKnown Distances;我们也知道黑点latitude and longitude根据这些数据,我想找到用户的位置(单红点)

enter image description here

注意:我检查了这个question但是我不明白为什么该位置作为int返回,为什么时间t包含在那里。< / p>

2 个答案:

答案 0 :(得分: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) {
        }
}

编辑:

看这篇文章

convert meters to latitude longitude from any point

答案 1 :(得分:0)

要专注于你的问题,没有一个单一的公式可以做任何事情,但有一些方法可以让这个过程更容易。你将不得不环顾一大堆数学库来找到它们。

这是背后的理论。

好的,我们需要点3的纬度和经度。我将解释它背后的理论,因为代码对我来说太过分了。

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

我假设我们知道设备与每个独立信标之间的距离,否则这是不可能的,除非您想使用某种雷达方法来识别它。我无法真正帮助你。如果我们知道这一点,我们可以使用从它们到设备的距离来构造两个信标周围的假想圆圈。

E.g。从设备到信标一个是500米。从设备到信标2是200M。在灯塔周围绘制一个假想的圆圈,其中一个500m的raduis和一个半径为200M的信标二的假想圆圈。

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

快速高中修订显示 h和k是圆心的x和y坐标,是笛卡尔平原的偏移量。我们将把我们想象中的笛卡尔平原置于第一点。现在我们将锻造轴承到第二点使用点到点的距离从我们的笛卡尔平面(点1)到点2构造一条线。使用我们轴承的tan,我们得到线的梯度。现在我们将使用轴承的cos和正弦,并使用我们的斜边距离来获得信标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值。

现在是一个棘手的派对。我们需要找到这些圆相交的地方。从我们在数学堆栈交换的朋友那里得到了公式。Points of intersection

现在,根据设备位置,您的圈子可能没有1或2个交点。如果你得到两个结果,你将不得不在设备移动时再次运行整个过程,以查看我们是否离圆圈的中心越来越远。由此我们可以得出结论哪一侧是正确的点,我们可以在笛卡尔平原上划出直线到灯塔1,获得线的梯度,将其转换为灯塔1的方位,然后对半径和轴承进行反向工程获得坐标的公式。

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