Ответ 1
Временное решение, которое я использовал, - это отображать маркеры с одинаковым расположением, немного разбросанными по карте, так что пользователь получает небольшое представление о нескольких маркерах.
Я отслеживаю маркеры на карте и их местоположения на карте, и всякий раз, когда я хочу добавить маркер на карту, я удостоверяюсь, что никакой другой маркер не отображается в том же месте. Если да, то я добавляю смещение к местоположению нового маркера, который я хочу добавить.
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.