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

kri*_*Oid 5 java double android latitude-longitude google-maps-api-2

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

ArrayList < LatLng > latLngList = new ArrayList< LatLng >();
Run Code Online (Sandbox Code Playgroud)

注意: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)]
Run Code Online (Sandbox Code Playgroud)

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

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

 for(LatLng latLng : latLngList) {
       marker.getPosition().equals(latLng); **Always returns false**
 }
Run Code Online (Sandbox Code Playgroud)

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

lat/lng: (34.074226888265116,-118.39924816042185)
Run Code Online (Sandbox Code Playgroud)

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

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

Mac*_*ski 5

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

我建议将所有标记存储在一个List或者Map如果你想为每个标记添加一些额外的信息Marker.

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

编辑:

我也在gmaps-api问题上报告过这个问题.


小智 1

我认为最好的方法是使用静态位置方法计算纬度点和标记点之间的距离。您可以处理返回的距离(以米为单位),并确定是否近似为同一点。