Gee*_*eek 18 android google-maps objective-c google-maps-markers ios
我在应用中使用谷歌地图,很可能多个标记附加到每个标记代表一个人的同一位置.在这种情况下,用户将不知道该特定标记后面还有其他标记/人.
我环顾四周来处理这种情况,关于SO的一个问题表明我可以显示一个标记并将所有人与该单个标记相关联.当用户点击该标记时,我应该显示与该标记关联的所有用户的列表.这是一个很好的解决方法,但我想避免显示主要隐藏谷歌地图的视图.
有没有人在类似情况下使用过任何解决方法?
Gee*_*eek 18
我使用的解决方法是在地图上显示位置相同的标记,以便用户轻松了解多个标记.
我在地图上跟踪标记及其在地图上的位置,每当我想在地图上添加标记时,我确保在同一位置不显示其他标记.如果是,那么我添加一个偏移量到我要添加的新标记的位置.
static final float COORDINATE_OFFSET = 0.00002f; // You can change this value according to your need
Run Code Online (Sandbox Code Playgroud)
下面的方法返回必须用于新标记的位置.此方法将新标记的当前纬度和经度作为参数.
// 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));
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,markerLocation
是一个HashMap.
HashMap<String, String> markerLocation; // HashMap of marker identifier and its location as a string
Run Code Online (Sandbox Code Playgroud)
这个答案有Android的代码,但同样的逻辑适用于iOS.
归档时间: |
|
查看次数: |
20712 次 |
最近记录: |