android google - 두 개의 지리적 포인트 간 거리 가져 오기




map current (7)

private float getDistance(double lat1, double lon1, double lat2, double lon2) {
        float[] distance = new float[2];
        Location.distanceBetween(lat1, lon1, lat2, lon2, distance);
        return distance[0];
    }

사용자가있는 곳에서 가장 가까운 곳을 확인하는 앱을 만들고 싶습니다. 사용자의 위치를 ​​쉽게 얻을 수 있고 위도와 경도가있는 장소 목록을 얻을 수 있습니다.

현재 위치와 가장 가까운 목록의 위치를 ​​아는 가장 좋은 방법은 무엇입니까?

Google API에서 아무 것도 찾을 수 없습니다.

나는 계산에 의지 할 필요가 있고 그것을 계산하기 위해 수학을해야한다고 걱정한다.

너희들은 어떻게 생각하니?

읽거나 답장 해 주셔서 감사드립니다.


LatLng간에 거리를 가져 오는 방법에는 두 가지가 있습니다.

public static void distanceBetween (double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results)

이것 좀 봐

두 번째

public float distanceTo (Location dest) praveen 님의 답변입니다.


다음 방법을 사용하여 위도와 경도를주고 거리를 미터로 얻습니다.

private static double distance_in_meter(final double lat1, final double lon1, final double lat2, final double lon2) {
    double R = 6371000f; // Radius of the earth in m
    double dLat = (lat1 - lat2) * Math.PI / 180f;
    double dLon = (lon1 - lon2) * Math.PI / 180f;
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
            Math.cos(latlong1.latitude * Math.PI / 180f) * Math.cos(latlong2.latitude * Math.PI / 180f) *
                    Math.sin(dLon/2) * Math.sin(dLon/2);
    double c = 2f * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    double d = R * c;
    return d;
}



사용할 수있는 몇 가지 방법이 있지만 사용자의 고도와 다른 지점의 고도를 알고 있다면 가장 먼저 알아야 할 것이 무엇인지 결정하는 것이 가장 좋습니다.

정확도에 따라 Haversine 또는 Vincenty 공식을 조사 할 수 있습니다.

이 페이지는 수식을 자세히 설명하고 수학적으로 덜 기울기 때문에 스크립트로 구현하는 방법을 설명합니다.

Haversine 공식 : http://www.movable-type.co.uk/scripts/latlong.html

Vincenty 공식 : http://www.movable-type.co.uk/scripts/latlong-vincenty.html

수식의 의미에 문제가있는 경우 댓글을 달아 주시면 답변을 드리겠습니다. :)


이것에 대한 거의 모든 것과 크기와 밀도가 다른 여러 화면에 대한 최상의 지원을 얻는 방법은 여기에 잘 설명되어 있습니다.

화면 크기
화면의 대각선으로 측정 된 실제 물리적 크기입니다. 간단히하기 위해 Android는 모든 실제 화면 크기를 네 가지 일반화 된 크기 (소규모, 보통, 대형 및 초대형)로 그룹화합니다.

스크린 밀도
화면의 물리적 영역 내의 픽셀 수. 일반적으로 dpi (인치당 도트 수)라고합니다. 예를 들어, "저"밀도 화면은 "일반"또는 "고"밀도 화면과 비교하여 주어진 물리적 영역 내에서 더 적은 픽셀을 갖습니다. 단순함을 위해 Android는 모든 실제 화면 밀도를 저, 중, 고, 초고속, 초고속 및 초고속의 6 가지 일반화 된 밀도로 그룹화합니다.

정위
사용자의 시점에서 화면의 방향. 가로 또는 세로로, 화면의 종횡비가 각각 너비 또는 높이입니다. 다른 장치가 기본적으로 다른 방향으로 작동 할뿐만 아니라 사용자가 장치를 회전 할 때 런타임에 방향이 변경 될 수 있습니다.

해결
화면의 총 물리적 픽셀 수입니다. 여러 화면에 대한 지원을 추가 할 때 응용 프로그램은 해상도로 직접 작동하지 않습니다. 응용 프로그램은 일반화 된 크기 및 밀도 그룹에 지정된대로 화면 크기 및 밀도에만 관심을 가져야합니다.

밀도 독립적 픽셀 (dp)
UI 레이아웃을 정의 할 때, 레이아웃 차원을 표현하거나 밀도 독립적 인 방식으로 위치를 지정할 때 사용해야하는 가상 픽셀 단위입니다. 밀도 비 독립 픽셀은 "중간"밀도 화면에 대해 시스템에서 가정 한 기본 밀도 인 160dpi 화면의 한 물리적 픽셀과 동일합니다. 런타임시 시스템은 사용중인 화면의 실제 밀도를 기반으로 필요에 따라 dp 장치의 크기 조정을 투명하게 처리합니다. dp 단위의 스크린 픽셀로의 변환은 간단합니다 : px = dp * (dpi / 160) . 예를 들어 240 dpi 화면에서 1 dp는 1.5 실제 픽셀과 같습니다. 응용 프로그램의 UI를 정의 할 때는 항상 dp 단위를 사용해야하며, 서로 다른 밀도의 화면에 UI가 제대로 표시되도록해야합니다.

둘 이상의 장치 유형에 대해 Android 앱을 개발하는 데 심각한 문제가있는 경우 화면 지원 개발 문서를 적어도 한 번 읽어야합니다. 또한 특정 화면 구성을 가진 활성 장치의 실제 수를 아는 것은 항상 좋은 방법입니다.







android geolocation maps