显示经度/纬度点的子集?
Posted
技术标签:
【中文标题】显示经度/纬度点的子集?【英文标题】:Displaying a subset of longitude/latitude points? 【发布时间】:2011-01-17 20:23:09 【问题描述】:我有一个以这种方式制作的坐标(纬度和经度)数组:
[0] = "45.01234,9.12345"
[1] = "46.11111,9.12345"
[2] = "47.22222,9.98765"
[...] etc
在一个循环中,将这些坐标转换为米(UTM 北/UTM 东),然后我将这些坐标转换为屏幕上的像素(X / Y)(输出设备是 iPhone),以在自定义地图。
[0] = "512335.00000,502333.666666"
[...] etc
返回的像素被传递给在屏幕上画线的方法(模拟路线计算)。
[0] = "20,30"
[1] = "21,31"
[2] = "25,40"
[...] etc
由于坐标(纬度/经度)太多,我需要截断纬度/经度数组,以消除未填充地图边界的值(屏幕上地图的可见部分)。 地图边界是 2 对坐标纬度/经度、左上角和右下角。
现在,在这个数组上循环(未排序)并检查一个值是否在绑定中并在删除外部值之后的最佳方法是什么? 要返回一个只包含屏幕上可见坐标的干净数组?
注意:坐标数组是一个非常大的数组。 4000/5000 几个项目。 这是一个应该在每次拖动或缩放时循环的方法。
如何优化此数组中的搜索和控件?
【问题讨论】:
这有一个相当具体的技术答案,而不是一个主观的答案。我建议将其迁移到 SO。 @Gary: 帖子可以迁移到 SO(我只见过相反的方向)? 是的,帖子可以迁移到 SO。这就是这个最终的结果。 仅仅消除窗外的那些点并不能解决问题;考虑一个窗口“0,0”..“320,480”和这些点:“-10,240”,“400,240” - 你仍然需要画线,否则会丢失一些东西 你应该改进你的标题。写一些更具描述性的东西 【参考方案1】:我建议把它分成几个步骤:
-
将每个经度/纬度对转换为新坐标系中的米对。
创建一个保存集合中所有点的 kd-tree 数据结构。这使您可以非常高效地查询哪些点位于给定的矩形范围内。
每当视口发生变化时,查找 kd-tree 中将显示在该矩形中的所有点。
要显示点,请遍历将要显示的点集并显示每个点。
【讨论】:
以上是关于显示经度/纬度点的子集?的主要内容,如果未能解决你的问题,请参考以下文章