栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Android Mapview:将重叠的标记合并为新标记

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android Mapview:将重叠的标记合并为新标记

嗯…假设标记未分组,不分层或没有其他内容:为什么-在显示标记之前-您不创建特定密度的网格并将标记简单地装到网格的单元格中?

如果您随后算出几个标记落入同一容器(网格单元)中,则可以将它们分组。如果您需要更巧妙的分组,还可以检查相邻的单元格。

也许听起来有点原始,但:

  • 没有n ^ 2个算法
  • 没有关于输入顺序的假设
  • 无需额外处理不会显示的标记

网格的代码:

注意-我来自C 世界(通过[algorithm]标记在此处获得),因此我将坚持使用伪C

。我不知道mapview的API。但是,如果无法将其有效地翻译为您使用的任何语言/库,我会感到惊讶。

输入:-标记列表-世界坐标中的矩形查看窗口(当前正在查看的世界部分)

最简单的形式如下所示:

void draw(MarkerList mlist, View v) {    //binning:    list<Marker> grid[densityX][densityY]; //2D array with some configurable, fixed density    foreach(Marker m in mlist) {        if (m.within(v)) { int2 binIdx; binIdx.x=floor(densityX*(m.coord.x-v.x1)/(v.x2-v.x1)); binIdx.y=floor(densityY*(m.coord.y-v.y1)/(v.y2-v.y1)); grid[binIdx.x][binIdx.y].push(m); //just push the reference        }    //drawing:    for (int i=0; i<densityX; ++i)    for (int j=0; j<densityY; ++j) {        if (grid[i][j].size()>N) { GroupMarker g; g.add(grid[i][j]); //process the list of markers belonging to this cell g.draw();        } else { foreach (Marker m in grid[i][j])     m.draw()        }    }}

可能出现的问题是在某些群集组中可能会出现不必要的网格拆分,从而形成两个GroupMarker。为了解决这个问题,您可能不仅要考虑一个网格单元,而且还要考虑“
绘图”部分中的相邻网格,并且-如果进行分组,则将相邻单元标记为已访问。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637480.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号