我有一个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对象?
答案 0 :(得分:5)
更好的方法是不要比较基于LatLng
的标记,而是基于Marker
的标识。出于某种奇怪的原因,Marker.getPosition()
不会返回完全相同的值。
如果您想为每个List
添加一些其他信息,我建议将所有标记存储在Map
或Marker
中。
或者,您可以在创建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
个对象本身就是完全相同的 - 它们的equals
和hashCode
语义是正确的。 (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);