Android更改Geopoint坐标

时间:2012-05-29 18:21:06

标签: android google-maps coordinates

我想知道是否还有改变Geopoint的坐标。我无法在文档中找到任何设置坐标的方法,除了在构造函数中。这对我来说很麻烦,因为我需要不断更新Geopoint的坐标(跟随谷歌地图上的一个对象)。

如果Geopoint的坐标无法更新或更改,我应该使用别的吗?我应该不断实例化一个新的Geopoint吗?

另外,作为一个附带问题。我将在哪里放置需要在MapActivity中不断循环(特别是搜索数据包)的代码?

谢谢!

2 个答案:

答案 0 :(得分:0)

来自documentation for the GeoPoint class

  

公共类GeoPoint扩展了java.lang.Object

     

表示一对纬度和经度的不可变类,存储为整数   微小数量。

术语不可变表示无法更改。因此,您将找不到任何更改值的方法。如果你担心重复GeoPoint一遍又一遍的开销,它看起来不像是一个特别重的对象。如果您愿意,可以简单地保存整数纬度(E6)和经度(E6)值,而不是GeoPoint。当然,int变量是可变的(能够被更改)。

在任何类型的Activity中,您都可以使用自己的AsyncTask子类创建一个工作者来连续循环并执行您想要的任何操作。请参阅this article for a description of using AsyncTask

答案 1 :(得分:0)

你真的需要一个可变的GeoPoint吗?您确定创建连续的GeoPoint实例会成为性能问题吗?您可以将原始变量中的纬度和经度保持为Nate建议,并且只根据需要转换为GeoPoint,或者您是否需要每个变量都是GeoPoint?

如果您确定需要可变的GeoPoint,则可以创建一个。 GeoPoint类不是final,因此您可以扩展它。但要注意:将可变对象放入HashMapHashSet或任何其他基于散列的集合中将会产生令人惊讶的(和错误的)结果。

请注意,即使您没有明确地将其放入这样的集合中,也不要无意中将其传递给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相等。担心很快会达到收益递减的程度。)