Нахождение расстояния между местоположениями - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь определить метод определения местоположения из набора местоположений, ближайшего к пользователю.Я начинаю с попытки определить расстояние между двумя точками.То, как я написал код до сих пор, позволяет мне определить это расстояние только один раз - т.е. близость пользователя только к одному месту.Я использую пользовательский провайдер местоположения, чтобы получить широту и долготу.Мой код ниже.Провел много исследований, чтобы выяснить это, но решения, которые я нашел, либо устарели, либо кажутся слишком сложными для простой задачи.Любая помощь будет принята с благодарностью.

@Override
    public void gotCurrentLocation (Location location) {
        Location locCL = new Location("");
        locCL.setLatitude(location.getLatitude());
        locCL.setLongitude(location.getLongitude());

    Location locIFC = new Location("");
    locIFC.setLatitude(xxxx);
    locIFC.setLongitude(xxxx);

    Location locBGC = new Location ("" );
   locBGC.setLatitude(xxxx);
   locBGC.setLongitude(xxxx);

   float distanceInMeters = locCL.distanceTo(locIFC);
    float distanceInMeters = locCL.distanceTo(locBGC);
}

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018
  /**
 * @param startLat  gps lat
 * @param startLong gps lon
 * @param endLat    exti lat
 * @param endLong   exit long
 * @return distance in KM
 * @since 02040215
 * <p>Distance, bearing and more between Latitude/Longitude points</p>
 * <p> R is earth’s radius (mean radius = 6,371km)</p>
 * <p/>
 * <p>var lat1Red = lat1.toRadians();</p>
 * <p>var lat2Red = lat2.toRadians();</p>
 * <p>var delLat = (lat2 - lat1).toRadians();</p>
 * <p>var delLong = (lon2 - lon1).toRadians();</p>
 * <p>var a = Math.sin(delLat / 2) * Math.sin(delLat / 2) +</p>
 * <p> Math.cos(delLat) * Math.cos(lat2Red) *</p>
 * <p> Math.sin(delLong / 2) * Math.sin(delLong / 2);</p>
 * <p> var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));</p>
 * <p>  var d = R * c;</p>
 * <p/>
 * *
 */

public double calculateDistanceBetween2Point(double startLat, double startLong, double endLat, double endLong) {
    /**         *  R is earths radius (mean radius = 6,371km)         */
    double earthR = 6371e3;
    double dagToRad = Math.PI / 180;
    double radStartLat;
    double radStartLong;
    double radEndLat;
    double radEndLong;
    double distance = 0;
    double dalLat;
    double dalLong;

    radStartLat = startLat * dagToRad;
    radStartLong = startLong * dagToRad;
    radEndLat = endLat * dagToRad;
    radEndLong = endLong * dagToRad;

    dalLat = radEndLat - radStartLat;
    dalLong = radEndLong - radStartLong;

    double a = Math.sin(dalLat / 2) * Math.sin(dalLat / 2) + Math.cos(radStartLat) *
            Math.cos(radEndLat) * Math.sin(dalLong / 2) * Math.sin(dalLong / 2);

    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    distance = earthR * c;

    return distance;
}

Я думаю, это поможет вам.

0 голосов
/ 23 сентября 2018

я использовал это в своем проекте

 private double distanceOfDestination(double _fromLatitude,double _toLatitude,double _fromLatitude,double _toLongitude) {
    double distance = 0.0;

    double earthRadius = 3958.75;
    double latDiff = Math.toRadians(_toLatitude - _fromLatitude);
    double lngDiff = Math.toRadians(_toLongitude - _fromLongitude);
    double a = Math.sin(latDiff / 2) * Math.sin(latDiff / 2) +
            Math.cos(Math.toRadians(_fromLatitude)) * Math.cos(Math.toRadians(_toLongitude)) *
                    Math.sin(lngDiff / 2) * Math.sin(lngDiff / 2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    distance = earthRadius * c;

    int meterConversion = 1609;

    return new Float(distance * meterConversion).floatValue();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...