显示经度/纬度点的子集?

时间:2011-01-17 20:23:10

标签: algorithm sorting

我有一个以这种方式交配的坐标数组(纬度和经度):

[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

由于坐标(lat / lon)太多,我需要截断lat / lon数组,消除未填充地图边界的值(屏幕上地图的可见部分)。
地图边界是两对坐标,左/右,左上和右下。

现在,循环使用此数组的最佳方法是什么(NOT SORTED)并检查一个值是否在绑定中并在删除外部的值后?
要返回仅包含屏幕上可见的坐标的干净数组?

注意:coords数组是一个非常大的数组。 4000/5000几件物品。
这是一种应该在每次拖动或缩放时循环的方法。

如何优化此阵列中的搜索和控件?

1 个答案:

答案 0 :(得分:2)

我建议将其分为几个步骤:

  1. 将每个经度/纬度对转换为新坐标系中的一对仪表。
  2. 创建一个kd-tree数据结构,保存集合中的所有点。这使您可以非常有效地查询给定矩形范围内的哪些点。
  3. 每当视口发生变化时,找到kd树中将在该矩形中显示的所有点。
  4. 要显示点,请迭代将显示的点集并显示每个点。