我正在尝试即时更改许多地图元素的样式,但没有成功。我所说的动态是指从计算的颜色动态更改地图元素的颜色,例如水体。使用 Tangram,但如果有更好的解决方案,则对其他引擎开放。由于 Tangram 使用 YAML 文件来设置各种元素的样式,因此我在场景 (YAML) 文件中使用内联 Javascript。换句话说,我不想给它一个固定的颜色,而是想计算颜色(从图像中)。而不是这个:
water:
draw:
polygons:
color: "blue"
我正在按照这些思路做一些事情(因为我使用的是 Vue 路由器,所以更加复杂):
water:
draw:
polygons:
color: function() { return this.colors[0]; }
computedColors
在 a 中计算mixing
,然后广播到适当的路由:
var colorize = {
data: function () {
return {
computedColors: []
};
},
created: function () {
this.getColors();
},
methods: {
getColors: function () {
...
self.computedColors = [
...
];
self.$broadcast('parent-colors', self.computedColors);
...
};
};
}
这是路线:
router.map({
'/map': {
name: 'map',
component: Vue.extend({
template: '#map',
mixins: [colorize],
data: function () {
return {
colors: []
};
},
events: {
'parent-colors': function (computedColors) {
this.colors = computedColors;
}
},
ready: {
var map = L.map('map');
var layer = Tangram.leafletLayer({
scene: './tiles/scene.yaml'
});
layer.addTo(map);
map.setView([40.70531887544228, -74.00976419448853], 15);
}
});
任何关于我可能做错了什么的提示都表示赞赏。
更新
我遇到了各种各样的错误。它与七巧板有关,但不太能够弄清楚它到底是什么。似乎是解析 YAML 文件的问题。如果我在我的scene.yaml
:
water:
draw:
polygons:
color: function() { return this.colors[0]; }
有了这个:
water:
draw:
polygons:
color: function() { return this.color1; }
我没有收到任何错误,但不幸的是水团仍然没有分配任何颜色。
当然,我也必须在地图路线实例中更改这些行:
data: function () {
return {
color1: ''
};
},
...
events: {
'parent-colors': function (computedColors) {
this.color1 = computedColors[0];
}
}