我有一组位置坐标作为LatLng对象。我想找到LatLng从设置到当前位置的距离最小?我怎样才能找到它?
答案 0 :(得分:1)
按照我的方式
final ArrayList<Integer> arrayList = new ArrayList<Integer>();
现在,实现循环,如:在地图中添加所有标记,找到当前位置和标记位置之间的距离,并添加到Integer arrayList
for (int i = 0; i < locations.size(); i++) {
all = mMap.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.mark_red))
.position(
new LatLng(Double.parseDouble(latitudes.get(i)
.toString()), Double
.parseDouble(longitudes.get(i)
.toString())))
.title(title)
.snippet(city.get(i)));
float[] results = new float[1];
Location.distanceBetween(
Double.parseDouble(latitudes.get(i).toString()),
Double.parseDouble(longitudes.get(i).toString()),
cur_pos.latitude, cur_pos.longitude, results);
System.out.println("Distance is: " + results[0]);
arrayList.add((int) results[0]);
}
现在,从arrayList中找到最小距离索引
的最小值minIndex
int minIndex = arrayList.indexOf(Collections.min(arrayList));
最后添加Min Distance
标记
Currnt = mMap.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.mark_red))
.position(
new LatLng(Double.parseDouble(latitudes
.get(minIndex).toString()), Double
.parseDouble(longitudes.get(
minIndex).toString())))
.title(locations.get(minIndex))
.snippet(city.get(minIndex)));
答案 1 :(得分:1)
您必须计算所有点和当前点之间的距离,并手动检查最小距离。比如将当前点X与点A,B,C和D进行比较。并将最小距离保存在变量中 这是在Javascript中只需将其转换为Java代码即可轻松
function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) {
var R = 6371; // Radius of the earth in km
var dLat = deg2rad(lat2-lat1); // deg2rad below
var dLon = deg2rad(lon2-lon1);
var a =
Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2)
;
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c; // Distance in km
return d;
}
function deg2rad(deg) {
return deg * (Math.PI/180)
}
并计算弧度到这个
弧度=(度* PI)/ 180