【问题标题】:Finding point between two geo locations of beacons寻找信标的两个地理位置之间的点
【发布时间】:2014-12-26 12:53:48
【问题描述】:

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

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

例如: (Filled Black dotsBEACONS 和虚构的 RangeRed dots 是一些 user unknown positionsGreen LinesKnown Distances ;我们也知道黑点的 latitude and longitude)基于这些数据我想要查找用户的位置(单红点)

注意:我查看了这个question,但是我不明白为什么该位置会以int 的形式返回,以及为什么其中包含时间t

【问题讨论】:

  • 假设我们有纬度和经度......你想知道手机是否在这些点之间?
  • 是的(我的意思是两个定位信标的经纬度),但是使用我拥有的数据(信标距离、信标之间的距离和两点位置)。
  • 让我来回答你在这个问题中所说的内容。请检查我的答案。

标签: android gis android-ibeacon altbeacon


【解决方案1】:

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

 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

【讨论】:

  • 据我所知,这是用于查找您的设备和信标之间的距离。我想要的是通过使用这些数据找到Point3。为了清楚起见:我们有 Point1 和 Point2 的确切位置和它们之间的距离或直到它们。存在在这两个点范围内移动的 Point3。我怎样才能找到这个 3d 点的纬度和经度
  • 好的,您想根据这些距离了解 POINT3 的纬度吗?
  • 您不知道 POINT3 的纬度吗?就我而言,Point3 的经纬度是移动的,而 Point1 和 point2 是固定的。
  • 是的。当我使用信标时,我想每 x 秒获得一次设备的确切位置。 onLocationChanged 基于 GPS 位置。不久我想使用信标数据获取位置,以便稍后我可以显示设备应该遵循的路径。 GPS 对于此类事情不是那么准确。
【解决方案2】:

要专注于您的问题,没有一劳永逸的公式可以解决所有问题,但有一些方法可以使过程更轻松。不过,您将不得不在一大堆数学库中四处寻找它们。

这就是它背后的理论。

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

为此,我们将利用从一点到另一点的方位。您可以使用此链接获取该公式:Bearing formula

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

例如从设备到信标一个是 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 值。

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

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

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

【讨论】:

  • 该编辑不能正确表达我的意思。我不允许对你的问题发表评论。试着通读我刚才说的话。假想的圆圈与信标的范围无关。
  • 我觉得这个question和你说的差不多。这里唯一的事情是我必须计算distancebearing 并将它们作为该函数的参数。我用Haversine 计算了distancebearing 呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
  • 1970-01-01
  • 2013-03-20
相关资源
最近更新 更多