2010-11-24 4 views
0

"기본 위치 정보를 표시하려면 어떻게해야합니까?"라는 기본적인 Android 탐색 관련 질문을 이해하려고합니다. 내 오랜 인터넷 검색 세션의 기사 및 자습서에서 약간의 코드를 사용했습니다. 단순한 오버레이 (원 + 문자 메시지)의 표시는 작동하지만 화면의 위치가 틀립니다 (적도의 경우).현재 위치가 화면상의 좌표로 거짓으로 표시됩니다.

내 코드 설치는 작은 내부 클래스 그 implements LocationListener을 포함하고 onLocationChanged 이벤트 핸들러는이 메서드 호출

protected void createAndShowCustomOverlay(Location newLocation) 
{ 
    double lat = newLocation.getLatitude(); 
    double lng = newLocation.getLongitude(); 

    // geoPointFromLatLng is an E6 converter : 
    // return new GeoPoint((int) (pLat * 1E6), (int) (pLng * 1E6)); 
    GeoPoint geopoint = GeoFunctions.geoPointFromLatLng(lat, lng); 

    CustomOverlay overlay = new CustomOverlay(geopoint); 

    mapView.getOverlays().add(overlay); 
    mapView.getController().animateTo(geopoint); 

    mapView.postInvalidate(); 
} 

지금까지 모두가 좋아 보인다, 내가 주위 디버깅했고 비를 변환 된 위도/한쌍은 괜찮습니다. E6 변형도 괜찮습니다. 여기에 CustomOverlay 클래스입니다 :

public class CustomOverlay extends Overlay 
{ 

    private static final int CIRCLERADIUS = 2; 
    private GeoPoint geopoint; 

    public CustomOverlay(GeoPoint point) 
    { 
    geopoint = point; 
    } 

    @Override 
    public void draw(Canvas canvas, MapView mapView, boolean shadow) 
    { 
    // Transfrom geoposition to Point on canvas 
    Projection projection = mapView.getProjection(); 
    Point point = new Point(); 
    projection.toPixels(geopoint, point); 

    // background 
    Paint background = new Paint(); 
    background.setColor(Color.WHITE); 
    RectF rect = new RectF(); 
    rect.set(point.x + 2 * CIRCLERADIUS, point.y - 4 * CIRCLERADIUS, 
     point.x + 90, point.y + 12); 

    // text "My Location" 
    Paint text = new Paint(); 
    text.setAntiAlias(true); 
    text.setColor(Color.BLUE); 
    text.setTextSize(12); 
    text.setTypeface(Typeface.MONOSPACE); 

    // the circle to mark the spot 
    Paint circle = new Paint(); 
    circle.setColor(Color.BLUE); 
    circle.setAntiAlias(true); 

    canvas.drawRoundRect(rect, 2, 2, background); 
    canvas.drawCircle(point.x, point.y, CIRCLERADIUS, circle); 
    canvas.drawText("My Location", point.x + 3 * CIRCLERADIUS, point.y + 3 
        * CIRCLERADIUS, text); 
    } 
} 

그것의 가장 확실히 종류의 투영 오류, 내 모든 지리적 fix'd 좌표는 적도에 결국, 그래서 주변에 던져지고 일부 0.0 값이 있기 때문에.

필요한 경우 다른 세부 정보를 제공 할 수 있습니다. 에뮬레이터, Maps API 레벨 8 (Android 2.2)에서 코드를 실행 중이며 타일이 생기고 CustomOverlay (원 + 텍스트)가 표시됩니다. 위치 (54.foo 및 8.bar와 같은 좌표가 빠져 있음).

코드베이스가 조금 오래되었을 수 있습니다. 그러면 toPixels과 같은 프로젝션이 더 이상 필요하지 않을 수 있습니다. 몰라.

미리 감사드립니다.

답변

1

해결되었지만 텔넷을 통해 전송 된 "geo fix"명령은 (위도, 경도) 쌍이 아닌 (위도, 경도) 쌍이 필요합니다. 최선의 불일치! 의견을 보내 주셔서 감사합니다.

0

Android 용 Google지도처럼 화면의 작은 깜박임 순환으로 현재 위치를 표시하고 업데이트 만 유지하려는 경우 Android에이 기능의 기본 구현이 있습니다.

MyLocationOverlay myLocationOverlay = new MyLocationOverlay(context, mapView); 
    myLocationOverlay.enableMyLocation(); 
    mapView.getOverlays().add(myLocationOverlay); 

Android가 모든 것을 처리합니다.

+0

입력 해 주셔서 감사합니다. 내가 코즈를 보내야하는 형식은 뭐니? 부적절한 형식의 좌표를 전송하는 것이 문제였습니다. 일반적으로 보았던 lat/lng 쌍 모두 음수 값 (예 : geo fix -82.411629 28.054553)이 있는데 왜 그런가요? – Dr1Ku

+0

그래, 이클립스에서 내장 된 것들을 사용하면 좋은 결과가 나오지 않는다. 그것은 수정되고 올바르게 입력 된 위도/경도 쌍을 사용하여 작동합니다. 다시 한 번 감사드립니다! – Dr1Ku

+0

아, 사실 지오 픽스는 거의 모든 지리 관련 앱이 코디를 처리하는 방식과 마찬가지로 (어둡게, 위도우가 아니라) 위도가 필요합니다. – Dr1Ku

관련 문제