0

我想知道是否有任何方法可以更改 Geopoint 的坐标。除了在构造函数中之外,我在文档中找不到任何显示设置坐标的方法的函数。这对我来说很麻烦,因为我需要不断更新 Geopoint 的坐标(跟随 Google Maps 上的对象)。

如果地理点的坐标无法更新或更改,我应该使用其他东西吗?我应该不断地实例化一个新的地理点吗?

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

谢谢!

4

2 回答 2

0

GeoPoint 类的文档中

公共类 GeoPoint 扩展 java.lang.Object

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

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

在任何类型的 . 中Activity,您都可以使用自己的AsyncTask. 有关使用 AsyncTask 的说明,请参阅本文

于 2012-05-29T20:57:41.097 回答
0

你真的需要一个可变的GeoPoint吗?您确定创建 GeoPoint 的连续实例会成为性能问题吗?您能否像 Nate 建议的那样将经纬度保留在原始变量中,并且仅根据需要转换为 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 与 equals 进行比较。担心这样的事情很快就会达到收益递减的程度。)

于 2012-05-29T22:00:40.667 回答