【发布时间】:2017-08-05 03:44:34
【问题描述】:
我有一个带有 google 地图的 android 地图,它可以根据用户屏幕位置从服务器动态加载标记。因此,例如,如果用户移动地图,我只需向服务器发出请求并发送屏幕边界,并基于此获得标记数据(id 和 corrdinates),这些数据稍后会被解析并创建为实际指针。问题是当用户回到同一个区域(之前创建了哪些标记)时,我仍然发出相同的请求并获得相同的数据(但显然我不会让重新创建该标记,所以我只是运行 for 循环遍历那里的所有标记在地图上并检查地图标记 ID 是否等于服务器发送数据标记 ID,如果相等,我只需打破循环)
try {
Collection<MarkerItemData> mapMarkers = algorithm.getItems();
JSONObject jsonObject = new JSONObject(strings[0]);
JSONArray respondArray = jsonObject.getJSONArray("respond");
list = new ArrayList();
for (int i = 0; i < respondArray.length(); i++) {
JSONObject station = respondArray.getJSONObject(i);
int id = station.getInt("_id");
boolean skip = false;
for (final MarkerItemData m : mapMarkers) {
if (m.getId() == id) {
skip = true;
break;
}
}
}
}
但是我不认为这种方法是最好的。我还有其他想法应该可行(至少我认为)
- 发送到服务器屏幕边界以及屏幕上可见的所有标记 ID(我可以选择屏幕范围内的所有标记以及屏幕边界之外的所有标记)
- 每次从 android 应用程序中删除标记并基本上每次从服务器重新创建所有标记(我个人认为这是一个糟糕的解决方案)
那么这些想法中哪一个是最好的?还有其他想法吗? (对不起我的英语)
【问题讨论】:
-
每次移动地图时都需要获取标记的位置吗?你不能先下载所有并显示标记吗?
-
@WaqasAhmedAnsari 当服务器上的总标记数很大时,预先获取所有标记是低效的
标签: android google-maps dynamic