在谷歌地图v2 android中比较两个LatLng对象

时间:2013-03-12 15:07:03

标签: java android double latitude-longitude google-maps-api-2

我有一个arraylist,它由latLong对象组成,如下所示:

ArrayList < LatLng > latLngList = new ArrayList< LatLng >();

注意:LatLng是一个具有双重格式的纬度和经度值的对象,即纬度为双格式,经度为双格式

以下是存储在上述 latLngList 对象中的值:

Lat Long List:[lat/lng: (34.072516,-118.403609), lat/lng: (34.074227,-118.399248), lat/lng: (34.07304,-118.3995), lat/lng: (34.07304,-118.3995), lat/lng: (34.07304,-118.3995), lat/lng: (34.067856,-118.401485)]

现在,因为我在android中处理谷歌地图v2,每当我点击一个特定的标记我得到纬度和经度位置,我尝试将它与 latLngList 对象进行比较,以查找是否该对象存在于 latLngList

我是按照以下方式进行的:

 for(LatLng latLng : latLngList) {
       marker.getPosition().equals(latLng); **Always returns false**
 }

标记位置返回以下latLng对象:

lat/lng: (34.074226888265116,-118.39924816042185)

很明显,标记返回的纬度和经度对象有点冗长,因此比较失败。

有没有更好的方法来比较latLng对象?

5 个答案:

答案 0 :(得分:5)

更好的方法是不要比较基于LatLng的标记,而是基于Marker的标识。出于某种奇怪的原因,Marker.getPosition()不会返回完全相同的值。

如果您想为每个List添加一些其他信息,我建议将所有标记存储在MapMarker中。

或者,您可以在创建Marker.getId()后使用Marker,然后将其存储起来,然后在onMarkerClick中进行比较。

修改

我也在gmaps-api-issues上报告了此事。

答案 1 :(得分:4)

像这样实施latlngs。这对我有用。

final LatLng[] latLngs = new LatLng[2];
latLngs[0] = new LatLng(lat, lng);
latLngs[1] = new LatLng(lat, lng);

if(latLngs1[0].equals(latLngs1[1])) {
//to do 
}                                                    

答案 2 :(得分:1)

我认为最好的方法是使用静态Location方法计算latlng点和标记点之间的距离。 你可以用米来处理返回的距离,并判断它是否是相同的点。

答案 3 :(得分:0)

我想澄清一下Maciej的答案,因为问题标题讲述了比较LatLng个对象。 LatLng个对象本身就是完全相同的 - 它们的equalshashCode语义是正确的。 (and the docs say this, too)只有Marker错误Marker才能准确存储其位置。
因此,如果您确实想要跟踪精确的Marker位置,则可以将所有添加的标记存储在HashMap<Marker, LatLng>中。但是,如果你只想比较两个标记,不要使用它们的位置,一个简单的Marker.getId()将完成这项工作,正如MaciejGórski所说。

答案 4 :(得分:0)

你有两个我能想到的选择,一个是使用四叉树库:http://koti.mbnet.fi/ojalesa/quadtree/quadtree_intro.htm这个易于使用且有用,另一个是@geocodezip(在javascript中)非常好的答案

var SameThreshold = 0.1;
if (google.maps.geometry.spherical.computeDistanceBetween(latlng1,latlng2) < SameThreshold)
marker1.setAnimation(google.maps.Animation.BOUNCE);