1

TITLE、SNIPPET、および LOCATION を含むデータベースからデータを取得し、現在の場所間の距離を確認するためにテストを試みました。自分の位置に最も近いマーカーのタイトルを表示する方法がわかりません。

    List<MyMarkerObj> m = data.getMyMarkers();
                for (int i = 0; i < m.size(); i++) {
                    String[] slatlng =  m.get(i).getPosition().split(" ");
                    LatLng lat = new LatLng(Double.valueOf(slatlng[0]), Double.valueOf(slatlng[1]));
                    map.addMarker(new MarkerOptions()
                            .title(m.get(i).getTitle())
                            .snippet(m.get(i).getSnippet())
                            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
                            .position(lat)
                            );

                    float[] distance = new float[1];
                    Location.distanceBetween(currentlat, currentlong,Double.valueOf(slatlng[0]), Double.valueOf(slatlng[1]), distance);
                    Toast.makeText(getActivity(), "Marker Distance: "+ m.get(i).getTitle() +" "+distance[0], Toast.LENGTH_LONG).show();

                }
4

2 に答える 2

2

この単純な関数を使用して、2 点間の距離を緯度と経度の形式で計算できます。これは魅力的に機能し、現在地からどの距離が最も近いかを確認できます。両方の場所の緯度と経度を渡すだけです

public double distanceFrom(double lat1, double lng1, double lat2, double lng2) {
    double earthRadius = 3958.75;
    double dLat = Math.toRadians(lat2-lat1);
    double dLng = Math.toRadians(lng2-lng1);
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng/2) * Math.sin(dLng/2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    double dist = earthRadius * c;
    int meterConversion = 1609;
    return new Double(dist * meterConversion).floatValue();    // this will return distance
}
于 2013-10-22T04:26:43.970 に答える