Найдите местоположение, ближайшее к текущему местоположению, из массива из трех местоположений и сравните то, которое ближе к текущему местоположению. - PullRequest
0 голосов
/ 19 февраля 2020
ArrayList<LatLng> arrayList= new ArrayList<LatLng>();
LatLng near = new LatLng(33.549232, 73.125256);
LatLng pass = new LatLng(33.549844, 73.125849);
LatLng qareeb = new LatLng(33.549603, 73.124201);                                               


public void onMapReady(GoogleMap googleMap) {
    mMap= googleMap;
    for (int i =0; i<arrayList.size();i++){
        mMap.addMarker(new MarkerOptions().position(arrayList.get(i)).title("Marker").snippet("and snippet")
                .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)));
        LatLng latLng = new LatLng(currentLocation.getLatitude(),currentLocation.getLongitude());
        MarkerOptions markerOptions = new MarkerOptions().position(latLng).title("Main Yahan hn");
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(arrayList.get(i),15));
        mMap.animateCamera(CameraUpdateFactory.zoomIn());
        mMap.animateCamera(CameraUpdateFactory.zoomTo(15), 2000, null);
        /*mMap.animateCamera(CameraUpdateFactory.zoomTo(15.0f));*/
        mMap.moveCamera(CameraUpdateFactory.newLatLng(arrayList.get(i)));
        googleMap.addMarker(markerOptions);

    }
}

Выше мой код, и я хочу создать 3 точки, которые будут сравнивать с моим текущим местоположением то, которое находится рядом с текущим местоположением.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

Вы можете рассчитать расстояние между двумя точками и затем сравнить расстояние.

 private double distance(double lat1, double lon1, double lat2, double lon2) {
    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;
    return (dist);
}

private double deg2rad(double deg) {
    return (deg * Math.PI / 180.0);
}

private double rad2deg(double rad) {
    return (rad * 180.0 / Math.PI);
}

Вы можете использовать это, как показано ниже код

  LatLng near = new LatLng(33.549232, 73.125256);
        LatLng pass = new LatLng(33.549844, 73.125849);
        LatLng qareeb = new LatLng(33.549603, 73.124201);
        double distance = distance(near.latitude, near.longitude, pass.latitude, pass.longitude);
0 голосов
/ 19 февраля 2020

Вопрос, который вы задаете, и код, который вы разместили, не завершены. Код просто включает GoogleMaps на Activity. Вместо того, чтобы кодировать вам все решение, я объяснил бы вам логи c и ожидал, что вы попробуете его на своем конце и перепечатаете обновленный ответ, если потребуется.

Шаги:

  1. Получить текущее местоположение устройства с помощью FusedLocationProviderClient и сохранить значение в переменной (скажем, currentLocation). ( Получить последнее известное местоположение )
  2. Используйте класс Location, чтобы найти distance между point1 и currentLocation. (скажем d1). ( distanceBetween )
  3. Используйте тот же процесс, чтобы найти расстояния между point2 и point3 от currentLocation.
  4. Теперь у вас будет 3 distance переменные d1, d2 и d3. Я думаю, вы сможете найти самый короткий из них легко.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...