leaflet geodesic - 较大的数据集不会显示

时间:2017-09-17 21:37:25

标签: jquery json ajax leaflet

我正在使用以下内容:

$.ajax({
  type: "GET",
  url: "/geojson/routes",
  dataType: 'json',
  async: true,
  success: function(latlngs) {
    var Geodesic = L.geodesic([latlngs], {
      weight: 3,
      opacity: 1,
      color: 'navy',
      steps: 200
    }).addTo(mymap);
  }
});

使用此数据集:

[
  [
    33.63669961111111, -84.427864
  ],
  [
    28.42938888888889, -81.309
  ],
  [
    44.65094444444444, -73.46813888888889
  ],
  [
    28.42938888888889, -81.309
  ]
]

我得到了很好的平滑测地线,但是当我使用更大的数据集时:

[
  [
    33.43427777777777, -112.01158333333333
  ],
  [
    41.97732013888889, -87.90800591666667
  ],
  [
    41.97732013888889, -87.90800591666667
  ],
  [
    33.942625, -118.40780277777779
  ],
  [
    39.861666666666665, -104.67316666666667
  ],
  [
    39.861666666666665, -104.67316666666667
  ],
  [
    33.942625, -118.40780277777779
  ],
  [
    44.881972222222224, -93.22177777777777
  ],
  [
    44.881972222222224, -93.22177777777777
  ],
  [
    41.97732013888889, -87.90800591666667
  ],
  [
    41.97732013888889, -87.90800591666667
  ],
  [
    39.861666666666665, -104.67316666666667
  ],
  [
    33.942625, -118.40780277777779
  ],
  [
    33.63669961111111, -84.427864
  ],
  [
    33.63669961111111, -84.427864
  ],
  [
    28.42938888888889, -81.309
  ],
  [
    44.65094444444444, -73.46813888888889
  ],
  [
    28.42938888888889, -81.309
  ],
  [
    28.42938888888889, -81.309
  ],
  [
    41.97732013888889, -87.90800591666667
  ],
  [
    41.97732013888889, -87.90800591666667
  ],
  [
    26.071666666666665, -80.14969444444445
  ],
  [
    26.071666666666665, -80.14969444444445
  ],
  [
    29.984444444444446, -95.34144444444443
  ],
  [
    32.733555555555554, -117.18966666666667
  ],
  [
    32.733555555555554, -117.18966666666667
  ],
  [
    41.97732013888889, -87.90800591666667
  ],
  [
    41.97732013888889, -87.90800591666667
  ],
  [
    27.97547222222222, -82.53325
  ],
  [
    41.97732013888889, -87.90800591666667
  ],
  [
    44.881972222222224, -93.22177777777777
  ],
  [
    44.881972222222224, -93.22177777777777
  ],
  [
    33.43427777777777, -112.01158333333333
  ],
  [
    39.861666666666665, -104.67316666666667
  ],
  [
    39.861666666666665, -104.67316666666667
  ],
  [
    41.97732013888889, -87.90800591666667
  ]
]

什么都没有出现。我进行了双重检查,两组在语法上看似相同。可以以这种方式加载的数据量是否有限制?

我正在使用https://github.com/henrythasler/Leaflet.Geodesic

1 个答案:

答案 0 :(得分:1)

您的第二个("较大的")数据集有多个连续相同(重复)的坐标。

看起来Leaflet.Geodesic插件不喜欢这样,因为它无法计算2个相同位置之间的任何方位。

只需过滤掉那些重复项,然后一切正常。

理想情况下,您可以重构数据集以消除这些位置,或者您也可以在运行时执行此操作:

function filterSuccessiveDuplicatePositions(latlngs) {
  var result = [];

  if (latlngs.length > 0) {
    result.push(latlngs[0]);
  }

  for (var i = 1; i < latlngs.length; i += 1) {
    if (!L.latLng(latlngs[i]).equals(latlngs[i - 1])) {
      result.push(latlngs[i]);
    }
  }

  return result;
}

$.ajax({
  type: "GET",
  url: "routes2",
  dataType: 'json',
  async: true,
  success: function(latlngs) {
    console.log(latlngs);
    var filtered = filterSuccessiveDuplicatePositions(latlngs);
    var Geodesic = L.geodesic([filtered], {
      weight: 3,
      opacity: 1,
      color: 'navy',
      steps: 200
    }).addTo(mymap);
  }
});

演示:https://plnkr.co/edit/HaQPp6PzoW9mRVcIimw0?p=preview

BTW在plugin repository issue #9

上跟踪此错误