我使用的解决方法是在地图上显示相同位置的标记,以便用户稍微了解多个标记。
我会跟踪地图上的标记及其在地图上的位置,每当我想在地图上添加标记时,我都会确保没有其他标记显示在同一位置。如果是,那么我在要添加的新标记的位置添加一个偏移量。
static final float COORDINATE_OFFSET = 0.00002f; // You can change this value according to your need
以下方法返回必须用于新标记的位置。此方法将新标记的当前纬度和经度作为参数。
// Check if any marker is displayed on given coordinate. If yes then decide
// another appropriate coordinate to display this marker. It returns an
// array with latitude(at index 0) and longitude(at index 1).
private String[] coordinateForMarker(float latitude, float longitude) {
String[] location = new String[2];
for (int i = 0; i <= MAX_NUMBER_OF_MARKERS; i++) {
if (mapAlreadyHasMarkerForLocation((latitude + i
* COORDINATE_OFFSET)
+ "," + (longitude + i * COORDINATE_OFFSET))) {
// If i = 0 then below if condition is same as upper one. Hence, no need to execute below if condition.
if (i == 0)
continue;
if (mapAlreadyHasMarkerForLocation((latitude - i
* COORDINATE_OFFSET)
+ "," + (longitude - i * COORDINATE_OFFSET))) {
continue;
} else {
location[0] = latitude - (i * COORDINATE_OFFSET) + "";
location[1] = longitude - (i * COORDINATE_OFFSET) + "";
break;
}
} else {
location[0] = latitude + (i * COORDINATE_OFFSET) + "";
location[1] = longitude + (i * COORDINATE_OFFSET) + "";
break;
}
}
return location;
}
// Return whether marker with same location is already on map
private boolean mapAlreadyHasMarkerForLocation(String location) {
return (markerLocation.containsValue(location));
}
在上面的代码中,markerLocation 是一个 HashMap。
HashMap<String, String> markerLocation; // HashMap of marker identifier and its location as a string
此答案包含适用于 android 的代码,但同样的逻辑适用于 iOS。