7

我有一个由 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 中的 google map v2,每当我单击特定标记时,我都会获得纬度和经度位置,并尝试将其与latLngList对象进行比较,以查找该对象是否存在于latLngList中。

我正在通过以下方式进行操作:

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

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

lat/lng: (34.074226888265116,-118.39924816042185)

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

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

4

5 回答 5

6

一个更好的方法不是比较标记基于LatLng,而是基于身份Marker。由于某些奇怪的原因Marker.getPosition(),它不会返回完全相同的值。

我建议将所有标记存储在 a 中,List或者Map如果您想将一些附加信息附加到每个Marker.

或者,您可以Marker.getId()在创建后使用Marker、存储它,然后在onMarkerClick.

编辑:

我也在gmaps-api-issues上报告了这一点。

于 2013-05-07T11:40:51.580 回答
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 
}                                                    
于 2017-07-09T22:22:36.943 回答
1

我认为最好的方法是使用静态Location方法计算您的 latlng 点和标记点之间的距离。您可以处理以米为单位的返回距离,并确定是否是大致相同的点。

于 2013-04-23T07:17:39.583 回答
0

我想稍微澄清一下 Maciej 的答案,因为问题标题讲述了比较LatLng对象。LatLng对象本身是完全等同的——它们equalshashCode语义都是正确的。(文档也这么说)这只是' 不准确地存储其位置的Marker错误。 因此,如果您确实想跟踪精确的位置,您可以简单地将所有添加的标记存储在. 但是,如果您只想比较两个标记,则根本不要使用它们的位置,正如 MaciejGórski 所说,一个简单的就可以完成这项工作。Marker
MarkerHashMap<Marker, LatLng>Marker.getId()

于 2014-03-25T12:31:45.277 回答
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); 
于 2014-08-20T11:24:26.620 回答