7

以下に示すように、latLong オブジェクトで構成される arraylist があります。

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

注: LatLng は、緯度と経度の値が double 形式のオブジェクトです。つまり、緯度は double 形式で、経度は double 形式です。

以下は、上記の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)]

今、私はアンドロイドでグーグルマップv2を扱っているので、特定のマーカーをクリックするたびに緯度と経度の位置を取得し、それをlatLngListオブジェクトと比較して、オブジェクトがlatLngListに存在するかどうかを調べようとします。

私は次の方法でそれをやっています:

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

マーカーの位置は、次の latLng オブジェクトで私を返しています:

lat/lng: (34.074226888265116,-118.39924816042185)

マーカーによって返される緯度と経度のオブジェクトが少し長いため、比較が失敗することは明らかです。

latLng オブジェクトを比較するより良い方法はありますか?

4

5 に答える 5

6

より良い方法は、 に基づいてマーカーを比較するのではなくLatLng、 の ID に基づいて比較することですMarker。奇妙な理由Marker.getPosition()で、まったく同じ値が返されません。

すべてのマーカーをListまたはに保存することMapをお勧めしますMarker

または、Marker.getId()作成後に使用しMarkerて保存し、後で比較することもできますonMarkerClick

編集:

gmaps-api-issuesでも​​これを報告しました。

于 2013-05-07T11:40:51.580 に答える
1

静的なLocationメソッドを使用して、latlng ポイントとマーカー ポイントの間の距離を計算するのが最善の方法だと思います。返された距離をメートル単位で処理し、ほぼ同じポイントかどうかを判断できます。

于 2013-04-23T07:17:39.583 に答える
0

質問のタイトルはオブジェクトの比較について説明しているため、Maciej の回答を少し明確にしたいと思いLatLngます。LatLngオブジェクトは、それ自体で完全に同等です — それらのequalsおよびhashCodeセマンティクスは正しいです。(そしてドキュメントもこれを言っています)が位置を正確に保存しないのは単なるMarkerバグです。 したがって、実際に正確な位置を追跡したい場合は、追加されたすべてのマーカーを. しかし、2 つのマーカーを比較するだけの場合は、それらの位置をまったく使用しないでください。MaciejGórski が言ったように、単純なもので十分です。Marker
MarkerHashMap<Marker, LatLng>Marker.getId()

于 2014-03-25T12:31:45.277 に答える
0

私が考えることができる 2 つのオプションがあります。 @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 に答える