我检索到一个JSON数组,其中包含不同的商店分支经度和纬度。我把它放在一个列表中:
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
try {
Intent mapsIntent = getIntent();
String jSonArray = mapsIntent.getStringExtra("jsonArray");
jsonArray = new JSONArray(jSonArray);
for(int i = 0; i < jsonArray.length(); i++) {
Markers branch = new Markers();
branch.latitude = Float.parseFloat(jsonArray.getJSONObject(i).getString("latitude"));
branch.longitude = Float.parseFloat(jsonArray.getJSONObject(i).getString("longitude"));
marker.add(branch);
}
} catch (Exception ex) {
Log.d("Error", ex.toString());
}
}
这是我的Markers
课程:
private class Markers {
public float latitude;
public float longitude;
}
现在,我可以使用Google maps api v2
检索当前的位置坐标 LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(latLng);
markerOptions.title("Current Location");
markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA));
mCurrLocationMarker = mMap.addMarker(markerOptions);
现在我想知道,我有我的商店分店位置列表和我当前的位置,那么如何从当前位置获取最近的商店分支并在其上放置标记?我不明白我见过的一些实现,如果有人教我如何实现这一点,那将会有很大的帮助。干杯!
答案 0 :(得分:2)
一种方法是对标记进行排序并使用排序数组中的第一个元素:
Collections.sort(marker, new Comparator<Markers>() {
@Override
public int compare(Markers a, Markers b) {
Location locationA = new Location("point A");
locationA.setLatitude(a.latitude);
locationA.setLongitude(a.longitude);
Location locationB = new Location("point B");
locationB.setLatitude(b.latitude);
locationB.setLongitude(b.longitude);
float distanceOne = location.distanceTo(locationA);
float distanceTwo = location.distanceTo(locationB);
return Float.compare(distanceOne, distanceTwo);
}
}
然后,您根据与当前位置的距离对标记进行了排序。 之后,使用marker-Array中的第一个元素并将其添加到mMap实例。