2012-05-29 4 views
0

어쨌든 Geopoint의 좌표를 변경해야하는지 궁금합니다. 문서에서 생성자를 제외하고 좌표를 설정하는 함수를 찾을 수 없습니다. Geopoint의 좌표 (Google지도의 객체에 따라)를 지속적으로 업데이트해야하기 때문에 이것은 골칫거리입니다.Android Geopoint 좌표 변경

Geopoint의 좌표를 업데이트하거나 변경할 수없는 경우 다른 것을 사용해야합니까? 나는 단지 새로운 Geopoint를 지속적으로 인스턴스화해야 하는가?

또한 부탁드립니다. MapActivity에서 끊임없이 루핑 (데이터 패킷을 구체적으로 검색)해야하는 코드를 어디에 두어야합니까?

감사합니다. documentation for the GeoPoint class 가입일

+0

을 답변 중 하나가 당신의 문제가 해결되면, 당신은 그것을 받아 들여야한다. –

답변

0

정말로 변경할 수있는 GeoPoint이 필요합니까? GeoPoint의 연속적인 인스턴스를 만드는 것이 성능상의 문제가 될 것이라고 확신합니까? 네이트가 말했듯이 위도와 경도를 원시 변수로 유지하고 필요할 때만 GeoPoint로 변환 할 수 있습니까? 아니면 각각 하나가 GeoPoint가 될 필요가 있습니까?

변경 가능한 GeoPoint가 필요하다고 확신하는 경우 변경할 수 있습니다. GeoPoint 클래스는 final이 아니므로 확장 할 수 있습니다. 그러나 변경 가능한 객체를 HashMap, HashSet 또는 다른 해시 기반 컬렉션에 넣는 것은 놀라 울 정도로 (그리고 버그가있는) 결과를 가져올 것입니다.

실수로 명시 적으로 처리하지 않아도 실수로 컬렉션에 넣지 않는 API로 전달하지 않도록주의하십시오.

import com.google.android.maps.GeoPoint; 

public class MutableGeoPoint extends GeoPoint { 
    private int latitudeE6, longitudeE6; 

    public MutableGeoPoint(int latitudeE6, int longitudeE6) { 
     super(0, 0); // the values in the superclass are moot 
     this.latitudeE6 = latitudeE6; 
     this.longitudeE6 = longitudeE6; 
    } 

    @Override 
    public int getLatitudeE6() { 
     return latitudeE6; 
    } 

    @Override 
    public int getLongitudeE6() { 
     return longitudeE6; 
    } 

    public void setLatitudeE6(int value) { 
     this.latitudeE6 = value; 
    } 

    public void setLongitudeE6(int value) { 
     this.longitudeE6 = value; 
    } 

    @Override 
    public int hashCode() { 
     return 29*latitudeE6 + longitudeE6; 
    } 

    @Override 
    public String toString() { 
     return latitudeE6 + "," + longitudeE6; 
    } 
} 

hashCode() 메소드를 Google의 GeoPoint 클래스와 동일하게 변경하여 편집합니다.

(GeoPoint의와 MutableGeoPoint 그 빠르게 같은 것들에 대한 걱정. equals와 동일 비교 수확 체감의 지점에 도달하지 않습니다.)

0

:

공용 클래스 GeoPoint의 java.lang.Object를

마이크로도 정수 번호로 저장된 위도 및 경도의 쌍을 나타내는 불변 클래스를 확장한다.

불변의은 변경할 수 없음을 의미합니다. 따라서 값을 변경하는 메소드를 찾을 수 없습니다. GeoPoint을 반복하여 재 작성하는 오버 헤드가 걱정된다면 특히 중량 객체처럼 보이지 않습니다. 원하는 경우 정수 범위 (E6)와 경도 (E6) 값을 GeoPoint 대신 간단히 저장할 수 있습니다. 물론 int 변수는 변경할 수 있습니다 (변경할 수 있음).

모든 종류의 Activity에서 자신의 하위 클래스 인 AsyncTask을 사용하여 원하는대로 반복하고 반복 할 수있는 작업자를 만들 수 있습니다. this article for a description of using AsyncTask을 참조하십시오.

+0

'int's는 변경할 수 없습니다. 숫자 4를 5로 변경할 수 없습니다.'int' 변수에 연속적인 값을 할당 할 수 있습니다. 연속적인 값을'String' 변수 나'GeoPoint' 변수에 지정할 수 있지만'String' 또는'GeoPoint' 변수를 변경할 수는 없습니다. –

+0

@ David, 그냥 의미론이 아니지 않습니까? int 프리미티브에 새 값을 할당해도 생성자가 실행되지 않거나 새로운 힙 할당이 발생하지 않습니다. 이는 기존 객체를 다시 사용하는 대신 새 객체를 다시 작성해야한다고 불평 할 때 일반적으로 피하려고하는 작업입니다. , 권리? – Nate

+0

성능면에서도 마찬가지입니다. 그러나 불변의 타입에 관한 것은 그것들을 다른 누군가에게 넘기면 바뀔 수 없다는 것입니다. 이런 식으로, int는 StringBuilder보다 String에 가깝습니다. 동일한 String 변수에 여러 번 지정할 수 있지만 각 String 값은 변경할 수 없습니다. 따라서 int에는 변경 불가능한 의미가 있습니다. –