Leaflet绘制地图并导入保存的数据错误

时间:2017-12-13 18:47:26

标签: leaflet mapbox-gl-js leaflet.draw

我已经创建了一个mapbox-gl和传单地图,我试图使用插件传单来添加和编辑一个图层。

该插件运行良好;我可以创建一个路径(折线)并使用geojson保存它。

当我重新加载包含已保存数据的地图时出错:

TypeError: dataLayer.push is not a function
TypeError: a.slice is not a function

plyline在地图上但是如果我尝试编辑它(点击"编辑图层"按钮)折线改变颜色(这意味着它被选中)但没有显示锚点它无法拖动或编辑。

dataLayer 是我创建的图层,包括新数据。

JSON数据在http://geojson.io/#map=19/44.93382/9.67409上得到验证,看起来不错。

我认为我没有正确创建 dataLayer

  // ADD data stored in DB
  var geojson = {
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {},
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [
            9.67420756816864,
            44.93391475147485
          ],
          [
            9.674186110496521,
            44.93359955072641
          ]
        ]
      }
    },
    {
      "type": "Feature",
      "properties": {},
      "geometry": {
        "type": "Point",
        "coordinates": [
          9.67420756816864,
          44.933929941828694
        ]
      }
    }
  ]
};

    var dataLayer = L.geoJson(geojson);

    // featureGroup is the layer editable
    var featureGroup = L.featureGroup();

    // add  data from DB  to editable layer
    dataLayer.addTo(featureGroup);

    // add editable layer to the Map
    featureGroup.addTo(map);

我的代码有什么问题?

1 个答案:

答案 0 :(得分:0)

Geojson标准不包含额外的功能所以我只有路径而不是额外的项目,如锚点(矩形)。为了解决这个问题,我需要将代码修改为:

  // featureGroup is the layer editable
    var featureGroup = L.featureGroup();
    featureGroup.addTo(map);


    L.geoJson(geojson, {
        onEachFeature: function (feature, layer) {
            if (layer.getLayers) {
                layer.getLayers().forEach(function (l) {
                    featureGroup.addLayer(l);
                })
            } else {
                featureGroup.addLayer(layer);
            }
        }
    });