流星:带有mapbox的反应标记

时间:2015-10-22 20:33:16

标签: meteor mapbox

我目前正在尝试在Mapbox地图上反应性地显示标记。我的方法是观察一个集合,同时创建一个GeoJSON对象。但是,该特定对象的更改不会反映在地图上。

var featureArray = [];
CollectionName.find({}).observe({
  added: function(item) {
      featureArray.push({
        type: "Feature",
        geometry: {
          type: "Point",
          coordinates: [+item.location.coordinates[0], +item.location.coordinates[1]]
        },
        properties: {
          _id: item._id,
        }
      });
  },
  changedAt: function(newDocument, oldDocument, atIndex) {
    //..
  },
  removed: function(oldDocument, atIndex) {
    //..
  }
});

var CollectionGeoJSON = {
  'type': 'FeatureCollection',
  'features': testmarkers
};

var markers  = L.mapbox.featureLayer().setGeoJSON(CollectionGeoJSON);

// add cluster markers and add them to map

我的想法是手动添加/删除/更改客户端上的标记(因为更改已同步到服务器),但是这里也没有成功,因为我不确定如何使用Mapbox API。< / p>

非常感谢任何提示。

1 个答案:

答案 0 :(得分:1)

我创建了一个meteorpad示例,显示了这一点。

通过调用template.autorun回调中的onRendered来创建反应性。对template.autorun结果的任何更改都会触发Cities.find()回调,并使用.setGeoJSON

更新地图
this.autorun(function () {
  if (Mapbox.loaded()) {
    geojson = Cities.find().fetch()
    view.featureLayer.setGeoJSON(geojson);
  }
});

在此示例中,Cities集合的内容已经以正确的格式传递给.setGeoJSON,但如果您愿意,可以使用不同的Colleciton架构,并在{{}}内创建此格式的列表。 {1}}回调。