Я пытаюсь изменить стиль нескольких элементов карты на лету, но безуспешно.Под «на лету» я имею в виду изменение цвета элемента карты, например, массы воды, динамически от вычисленного цвета.Используя Tangram, но открывайте другие движки, если есть лучшее решение.Так как Tangram использует файл YAML для стилизации различных элементов, я использую встроенный файл Javascript на сцене (YAML).Другими словами, вместо того, чтобы придать ему фиксированный цвет, я хочу вычислить цвет (из изображения).Вместо этого:
water:
draw:
polygons:
color: "blue"
Я делаю что-то в этом духе (еще сложнее, потому что я использую Vue Router):
water:
draw:
polygons:
color: function() { return this.colors[0]; }
computedColors
вычисляется в 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);
}
});
Любые намеки на то, что я могу делать неправильно, оценены.
ОБНОВЛЕНИЕ
Я получаю ошибку типа.Это связано с Tangram, но не совсем в состоянии понять, что это такое.Кажется, проблема с разбором файла 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];
}
}