【问题标题】:Group array of lat/lng coordinates together on map在地图上将 lat/lng 坐标组合在一起
【发布时间】:2012-10-14 02:21:58
【问题描述】:

我正在尝试比较地图的 lat/lng 坐标数组,以查看是否有任何“集群”或群组。我想删除那些靠得太近的,所以如果地图上有 4-5 个堆叠在一起,它只会显示 1,直到你再放大一点,然后它会重新计算所有这些.

我已经尝试将数组与自身进行比较,但它似乎并没有给出一致的结果。有没有人尝试过这样的事情?

JSON 示例:

[
{
    Latitude = "44.033843";
    Longitude = "-79.48865499999999";
},
{
    Latitude = "44.033843";
    Longitude = "-79.48865499999999";
}]

【问题讨论】:

  • 你的经纬度列表的数据结构是什么?它是一个对象数组吗?例如,每个对象都包含一个 .lat 和 .lon。
  • 您可以查看MarkerClustererPlus(专为 Google 地图构建)了解一些想法。谷歌地图有一个内置的集群实用程序,但这个更有效。
  • @MasterAM 我不能使用谷歌地图。我正在使用 Titanium 框架,所以我正在寻找一个更“通用”的解决方案。否则我会使用它。
  • @techfoobar 这是一个 JSON 对象。我会用一个例子来更新我上面的问题。
  • “将数组与自身进行比较”是什么意思?向我们展示您尝试过的代码。此外,您的 JSON 无效;你可能想要方括号。

标签: javascript titanium coordinates


【解决方案1】:

迭代节点并为缩放级别仅显示那些彼此超出设定距离的节点。 hasrsine 公式很容易实现:这里的 JS 示例。

http://www.movable-type.co.uk/scripts/latlong.html

对于效率方面,您可能不想在每次迭代时根据临时列表计算整个列表,以便作为第一级整理简单的舍入工作(每个度数彼此相距约 60 英里)...从四舍五入到最接近的 5 度开始,然后是 1,然后是 10 度、100 度等,然后放大。排序这些列表并首先提取唯一的数组值 - 然后计算与结果列表的距离。

当然还有很多其他算法可以做到这一点 - 但在某些时候你必须计算距离。

【讨论】:

    【解决方案2】:

    编辑:这假设您很乐意稍微捏造一些东西,而不是担心地球上各点之间的实际距离,而是查看它们的纬度/经度坐标的“曼哈顿”距离。这取决于您需要有多精确,以及您是否在地球两极附近有点。但对于大多数实际目的来说,这个假设应该没问题。

    假设您想要的精度是小数点后一位。然后我将遍历数组,构建一个 has ,其中键是舍入坐标,值是经纬度对的数组,它们舍入到相应的键。

    hash = Hash.new
    latLongArray.each { |point|
      key = [point.lat.round(1), point.long.round(1)]
      hash[key] = Array(hash[key]) + [point.lat, point.long]
    }
    

    这样你就可以将它们聚集在一起,实际上你可以在键本身给出的坐标上放置标记。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-03
      • 2017-09-06
      • 2016-02-01
      • 1970-01-01
      • 2018-02-19
      • 2023-04-07
      • 2012-02-12
      • 2010-11-12
      相关资源
      最近更新 更多