【问题标题】:Get location from a distance of a geographic point从地理点的距离获取位置
【发布时间】:2012-09-21 03:41:20
【问题描述】:

我正在开发一个 Android 应用程序,我有一个地理点的纬度和经度,我想从 X 米(北)和 Y 米(西)获取该地点的坐标。 GeoPoint 并没有实现这种功能,所以我必须自己想办法去做......

我进行了一些搜索,但没有找到任何有趣的东西,您知道如何继续吗?

【问题讨论】:

    标签: java android location distance


    【解决方案1】:

    棘手,因为两个整经度之间的距离取决于纬度,而距离还取决于高度......

    为了简单起见,我会尝试猜测经度和纬度,并检查猜测与原点之间的距离。这更容易,因为两点之间的getting the distance 已经完成。

    从一个轴开始,进行一种二分搜索,直到找到向北 X 米的位置。然后对另一个轴做同样的事情。

    【讨论】:

      【解决方案2】:

      通过以下方法,您将获得添加到原始位置的纬度和经度以到达最终位置。请记住,这只适用于相对较小的距离,因为它忽略了地球曲率。

      private static final float GAP_LAT_LON = 0.00005f; //aprox 5 meters
      private float results[] = new float[1];
      
      private PointF getGaps(Location initial, float distanceX, float distanceY, PointF gaps){
          Location.distanceBetween(initial.getLatitude(), initial.getLongitude(), initial.getLatitude(), initial.getLongitude() + GAP_LAT_LON, results);
          double factorX = GAP_LAT_LON / results[0];
          Location.distanceBetween(initial.getLatitude(), initial.getLongitude(), initial.getLatitude() + GAP_LAT_LON, initial.getLongitude(), results);
          double factorY = GAP_LAT_LON / results[0];
          if(gaps == null)
              gaps = new PointF();
          gaps.set((float)(distanceX * factorX), (float)(distanceY * factorY));
          return gaps;
      }
      
      //to use
      private void teste(){
          PointF gaps = null;
          Location initial = new Location("");
      
          initial.setLatitude(23.5);
          initial.setLongitude(13.2);
      
          //100 meters West/East and 300 meters North/South
          getGaps(initial, 100, 300, gaps);
      
          //gaps.x returns x offset to add/subtract to initial latitude
          //gaps.y returns y offset to add/subtract to initial longitude
      }
      

      祝你好运

      【讨论】:

      • 您可以调整它,选择一个更接近您正在使用的距离值的 GAP_LAT_LON 值。如果您将间隙返回为 double,您也可以提高精度,但您必须定义自己的类,因为 PointD (double) 不存在。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多