我目前正在尝试在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>
非常感谢任何提示。
答案 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}}回调。