【问题标题】:how to find distance between two points using latitudes and longitude in android如何在android中使用纬度和经度查找两点之间的距离
【发布时间】:2016-04-18 12:27:48
【问题描述】:

我使用了两个按钮。一个两个获取当前位置。下一个按钮是一个开始按钮,当我点击它时应该给出当前位置和 5 米后位置之间的距离

【问题讨论】:

  • 感谢您的回答。如果我们使用两个按钮,那么我们将如何在这里实现。我创建了两个方法,请给出完整代码
  • 接受我的回答,这样问题就会被关闭@claris

标签: android distance latitude-longitude


【解决方案1】:

如果你知道这两个点的纬度,那么你可以通过以下方式计算这两点之间的距离

double distance;
Location oldlocation = new Location("");
oldlocation.setLatitude(main_Latitude);
oldlocation.setLongitude(main_Longitude);
Location newlocation = new Location("");
newlocation.setLatitude(sub_Latitude);
newlocation.setLongitude(sub_Longitude);
distance = oldlocation.distanceTo(newlocation);

【讨论】:

    【解决方案2】:

    使用以下api

    GET http://maps.googleapis.com/maps/api/directions/json?origin="sourceLat,sourceLang"&destination="destLat,destLan"g&sensor=false
    

    您最终会得到一些 JSON。在 routes[].legs[].distance 中,你会得到一个像这样的对象:

    "legs" : [
        {
           "distance" : {
              "text" : "542 km",
              "value" : 542389
           },
    

    【讨论】:

      【解决方案3】:

      使用此方法:

      public double distance(double lat1, double lon1, double lat2, double lon2, char unit) {
          double theta = lon1 - lon2;
          double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));
          dist = Math.acos(dist);
          dist = rad2deg(dist);
          dist = dist * 60 * 1.1515;
          if (unit == 'K') {
              dist = dist * 1.609344;
          } else if (unit == 'N') {
              dist = dist * 0.8684;
          }
          return (dist);
      }
      

      【讨论】:

        【解决方案4】:
         String currentlat="";// put the lat
        String currentlong="";// put the long
                String str_lat=""; //put the destination lat or last point to get the distance
                String str_lng="";//put the destination longtitude 
        
        
        
        
                    int Radius = 6371;// radius of earth in Km
                    double lat1 = Double.valueOf(Str_userlat);
                    double lat2 = Double.valueOf(str_lat);
                    double lon1 = Double.valueOf(Str_userlng);
                    double lon2 = Double.valueOf(str_lng);
        
                    double dLat = Math.toRadians(lat2 - lat1);
                    double dLon = Math.toRadians(lon2 - lon1);
                    double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
                            + Math.cos(Math.toRadians(lat1))
                            * Math.cos(Math.toRadians(lat2)) * Math.sin(dLon / 2)
                            * Math.sin(dLon / 2);
                    double c = 2 * Math.asin(Math.sqrt(a));
                    double valueResult = Radius * c;
                    double km = valueResult / 1;
                    DecimalFormat newFormat = new DecimalFormat("####");
                    int kmInDec = Integer.valueOf(newFormat.format(km));
                    double meter = valueResult % 1000;
                    int meterInDec = Integer.valueOf(newFormat.format(meter));
                    Log.i("Radius Value", "" + valueResult + "   KM  " + kmInDec
                            + " Meter   " + meterInDec);
        
                    String str_location="0";
                    if(kmInDec==0)
                    {
                        tvLocation.setText("<"+String.valueOf(meterInDec)+" m");
                        str_location=String.valueOf(meterInDec)+" m";
        
                    }
                    else if(kmInDec==0&&meterInDec==0)
                    {
                        tvLocation.setText("<"+String.valueOf(meterInDec)+" m");
                        str_location=String.valueOf(meterInDec)+" m";
                    }
                    else
                    {
                        tvLocation.setText("<"+String.valueOf(kmInDec)+" kM");
                        str_location=String.valueOf(kmInDec)+" km";
        
                    }
        

        【讨论】:

          【解决方案5】:

          看看下面的 URL 谷歌为大多数地图用例提供了实用程序库。

          https://developers.google.com/maps/documentation/android-api/utility/#introduction

          用于计算两个经度之间的距离:

          SphericalUtil.computeDistanceBetween(LatLng from, LatLng to);
          

          【讨论】:

            【解决方案6】:

            这样做

            double distance;
                    Location locationA = new Location("Kaaba");
                    locationA.setLatitude(21.45);
                    locationA.setLongitude(-39.75);
                    Location locationB = new Location("My Location");
                    locationB.setLatitude("17.20");
                    locationB.setLongitude("73.12");
            
                    distance = locationA.distanceTo(locationB) / 1000; //in Km
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-08-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-04-11
              • 1970-01-01
              • 2012-10-13
              相关资源
              最近更新 更多