2010-03-11 2 views
3

가능한 가장 짧은 시간에 가장 정확한 기기 위치를 결정하려고합니다.Android에서 GPS 또는 네트워크에서 가장 정확한 기기 위치를 얻으려고 시도합니다.

데이터를 geopoint로 저장하고 mapview에 표시합니다.

내 장치에서 GPS를 마지막으로 활성화하고 위치 잠금을 설정하면 나는 지금 어디에서 80 마일 떨어진 곳이었습니다.

위치 관리자 설정과 위치 수신기가 있습니다.

이렇게하면 NULL이됩니다.

myLocOverlay = new MyLocationOverlay(this, mapView); 
    GeoPoint test = myLocOverlay.getMyLocation(); 

그러나 다음 몇 줄에;

myLocOverlay.enableMyLocation();  
    mapView.getOverlays().add(myLocOverlay); 

이렇게하면지도의 오버레이에 현재 위치가 표시됩니다. 그것은 네트워크 공급자를 사용하고 있지만 GPS 픽스를 얻으려고 시도하고 있습니다 (실내에 있기 때문에 최상층 근처에있을 수 없습니다).

이렇게 지오 포인트를 구성하면;

if(lm.getLastKnownLocation("gps") != null) 
    { 
    test = new GeoPoint(
     (int) (lm.getLastKnownLocation("gps").getLatitude() * 1E6), 
     (int) (lm.getLastKnownLocation("gps").getLongitude() * 1E6)); 
    } 

    else 
    { 

    if(lm.getLastKnownLocation("network") != null) 
    { 
    test = new GeoPoint(
     (int) (lm.getLastKnownLocation("network").getLatitude() * 1E6), 
     (int) (lm.getLastKnownLocation("network").getLongitude() * 1E6)); 
    } 
    //bad things 
    } 

그러면 혼란스러운 결과가 나옵니다. 장치 GPS 공급자를 사용하지 않으면 코드가 네트워크 공급자로 이동하고 나에게 상당히 정확한 결과를 제공합니다. GPS 제공 업체를 사용하도록 설정 한 경우 지포 포인트가 기기가 GPS 잠금 장치를 갖도록 허용 한 마지막 장소로 돌아옵니다.

나는 위의 결과를 피하기를 원한다.

GeoPoint test = myLocOverlay.getMyLocation(); 

그러나 위에서 말했듯이 나는 그저 NULL을 얻습니다.

GPS와 네트워크 모두에서 지포를 얻은 다음 GPS 위치를 1 마일 떨어진 곳에서 비교하면 GPS 결과가 무시됩니다. 조금만 붙어 있습니다. getMyLocation()이 작동하지 않아서 myLocOverlay가 MapView에 표시하는 GeoPoint를 반환하지 않아야하나요?

+0

주'* 볼 수 있습니다. –

답변

3

수정 프로그램을 아직받지 못했기 때문에 null이 반환 될 수 있습니다. 네트워크 및 GPS 소스의 업데이트를 받아들이는 LocationListener을 등록해야합니다. 그런 다음 위치 업데이트를 받으면 위치의 정확성을보고 사용 여부를 결정할 수 있습니다.

+0

내가 원하는 초기 값입니다. 맵 타일에 대략적인 타일을 표시하고 싶습니다. 우리가 어떤 위치 갱신을 얻는 것을 무시하고, 이미있는 것을 보아라. 제공자로부터 두 개의 다른 위치를 가져올 수 있는데 하나는 GPS에서, 다른 하나는 네트워크에서 가져올 수 있습니다. 나는이 두 가지 중에서 가장 최신의 것을 얻는 방법을 원한다. 어느 것이 내가 getMyLocation()이 할 것이라고 생각했는지입니다. – Mark

+0

"이미있는 것을 봐라."- 만약 그것이 "null"이라면, "이미"아무것도 없다. – CommonsWare

+0

하지만 왜 lm.getLastKnownLocation ("gps"). getLatitude()가 값을 반환합니까? – Mark

2

지리적 위치가 너무 빠르다고 나는 생각합니다. MyLocationOverlay는 자체 리스너를 사용하여 수정 사항을 검색합니다. 그리고 어쩌면 그것이 얼마나 오래되었는지 찾는 gps 픽스를 요구할 것입니다. 그렇다면 너무 오래되어 네트워크 픽스를 얻고 gps 픽스를 기다리는 동안 그것을 사용하는 것입니다.

gps 칩셋, gsm 모뎀 및 백그라운드에서 웹 백엔드로 이야기하는 것을 의미합니다.
프로그램이 다음 줄로 가야 할 때 불가능합니다.

UI에서는 순간적으로 보일 것입니다.하지만 그것은 사람의 눈으로 측정됩니다.

CaseyB의 답변으로 가서 두 공급자 모두에게 gps listener를 등록하고 사용할 coorodinate를 스스로 결정할 수 있습니다. 이 작업을 원할 경우 마지막 수정 시간 (Location.getTime()) 및 위치 정확도를 얻기위한 메소드가 있습니다.

두 번째 가능성은 조금 기다려 그럼 조금 더 이상 기다릴 경우 통화가 여전히 null을 반환하는 경우 보는 것입니다. * "마지막으로 알려진"위치가 발견 된 것을 때 당신은 또한`Location.getTime()를 호출 할 수 있습니다

+0

감사합니다. 가장 좋은 방법은 값을 반환 할 때까지 호출을 계속 확인하는 것입니다. 가장 좋은 위치 픽스를 '선택'하기위한 논리를 작성하기 시작했습니다. 그러나 코드가 이미 존재하고 잘 작동하면이를 사용하는 것이 좋습니다. 나는 마지막 수정의 시간을 얻는 방법에 관해서 궁금하다. 나는 아직 문서에서 그것을 발견하지 못했다. (그러나 정확도에 대해서는 알고있다.) – Mark

+0

나는 이것을 내 답변에 추가했다. loctaion.getTime() – Janusz

관련 문제