如何计算两个地理点之间的实际距离?

时间:2012-02-24 10:14:51

标签: android google-maps routes

  

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

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

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

即。我想计算两个地理点之间的路线长度。 任何人都可以帮我计算两个地理点之间的路线长度吗?

3 个答案:

答案 0 :(得分:2)

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

API:Google Api for Route Calculation

您可以在Google Map Api

上找到更多信息

谢谢大家的支持。

答案 1 :(得分:0)

此方法返回距离:

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;



}

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

答案 2 :(得分:0)

我认为您正在寻找的是来自类似问题的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;
 }
}