【问题标题】:How to calculate REAL distance between two geopoints? [duplicate]如何计算两个地理点之间的真实距离? [复制]
【发布时间】:2023-03-03 00:25:02
【问题描述】:

可能重复:
J2ME/Android/BlackBerry - driving directions, route between two locations

我想计算 android 中两个地理点之间的距离。我使用了Location.distanceToLocation.distanceBetween,但此方法返回两点之间的直接长度。 我想计算两点之间的路线,然后计算所有路线点之间的总距离。

我不想在地图上显示点或路线。我只想计算从当前位置到给定点的距离。

即。我想计算两个地理点之间的路线长度。 谁能帮我计算两个地理点之间的路线长度?

【问题讨论】:

  • 你想使用内置的谷歌地图吗?
  • 我能想到的最“真实”的距离直接或大圆距离。路线是非常有条件的(汽车与行人、避开收费路线、避开渡轮、速度与行驶距离等)
  • 我要最短路线/最快路线的长度。
  • 我找到了我的答案,我使用了这个 Google api,这将返回有关路线的所有数据。 API : maps.googleapis.com/maps/api/distancematrix/… 谢谢大家的支持。
  • 请不要在标题中写标签。

标签: android google-maps routes


【解决方案1】:

我找到了我的答案,我使用了这个 Google api,这将返回有关路线的所有数据。

API:Google Api for Route Calculation

您可以在Google Map Api找到更多信息

感谢大家的支持。

【讨论】:

    【解决方案2】:

    我认为您正在寻找类似问题的this answer

    public class MapRouteActivity extends MapActivity {    
     LinearLayout linearLayout;
     MapView mapView;
     private Road mRoad;    
     @Override
     public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      mapView = (MapView) findViewById(R.id.mapview);
      mapView.setBuiltInZoomControls(true);    
      new Thread() {
       @Override
       public void run() {
        double fromLat = 49.85, fromLon = 24.016667; 
        double toLat = 50.45, toLon = 30.523333;
        String url = RoadProvider
          .getUrl(fromLat, fromLon, toLat, toLon);
        InputStream is = getConnection(url);
        mRoad = RoadProvider.getRoute(is);
        mHandler.sendEmptyMessage(0);
       }
      }.start();
     }
    
     Handler mHandler = new Handler() {
      public void handleMessage(android.os.Message msg) {
       TextView textView = (TextView) findViewById(R.id.description);
       textView.setText(mRoad.mName + " " + mRoad.mDescription);
       MapOverlay mapOverlay = new MapOverlay(mRoad, mapView);
       List<Overlay> listOfOverlays = mapView.getOverlays();
       listOfOverlays.clear();
       listOfOverlays.add(mapOverlay);
       mapView.invalidate();
      };
     };
    
     private InputStream getConnection(String url) {
      InputStream is = null;
      try {
       URLConnection conn = new URL(url).openConnection();
       is = conn.getInputStream();
      } catch (MalformedURLException e) {
       e.printStackTrace();
      } catch (IOException e) {
       e.printStackTrace();
      }
      return is;
     }    
     @Override
     protected boolean isRouteDisplayed() {
      return false;
     }
    }
    

    【讨论】:

    【解决方案3】:

    此方法返回距离:

    public double distance(float latA,float longA,float latB,float longB){
            double d2r = Math.PI / 180;
    
    
    
                double dlong = (longA - longB) * d2r;
                double dlat = (latA - latB) * d2r;
                double a = Math.pow(Math.sin(dlat / 2.0), 2)
                        + Math.cos(latB * d2r) * Math.cos(latA * d2r)
                        * Math.pow(Math.sin(dlong / 2.0), 2);
                double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
                double d = 6367 * c;
    
                return d;
    
    
    
    }
    

    但这是为了找出位移。并且不知道如何计算所有路线点之间的距离。也许你可以使用这个方法并循环它。

    【讨论】:

    • 这将返回直接距离..我想要路线的长度。
    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    相关资源
    最近更新 更多