|
|
@@ -22,22 +22,6 @@ import {krajeLayer, obceIndexLayer, okresyLayer} from './app.config';
|
|
|
|
|
|
@Injectable({providedIn: 'root'})
|
|
|
export class AppService {
|
|
|
- // https://colorbrewer2.org/?type=qualitative&scheme=Paired&n=12
|
|
|
- colorPalette = [
|
|
|
- '#a6cee3',
|
|
|
- '#1f78b4',
|
|
|
- '#b2df8a',
|
|
|
- '#33a02c',
|
|
|
- '#fb9a99',
|
|
|
- '#e31a1c',
|
|
|
- '#fdbf6f',
|
|
|
- '#ff7f00',
|
|
|
- '#cab2d6',
|
|
|
- '#6a3d9a',
|
|
|
- '#ffff99',
|
|
|
- '#b15928',
|
|
|
- ];
|
|
|
-
|
|
|
constructor(
|
|
|
public adjusterService: AdjusterService,
|
|
|
public adjusterEventService: AdjusterEventService,
|
|
|
@@ -52,7 +36,7 @@ export class AppService {
|
|
|
) {
|
|
|
this.adjusterEventService.loaded.subscribe(({success}) => {
|
|
|
if (success) {
|
|
|
- this.colorPalette = this.generateRandomColorPalette(
|
|
|
+ this.adjusterLegendService.refreshColorPalette(
|
|
|
this.adjusterService.numberOfClusters
|
|
|
);
|
|
|
}
|
|
|
@@ -109,36 +93,12 @@ export class AppService {
|
|
|
// so they will display in correct order
|
|
|
this.hsConfig.default_layers.push(obceIndexLayer);
|
|
|
obceIndexLayer.on('featuresloadend', this.adjusterService.init());
|
|
|
- const indexLegend = this.adjusterLegendService.createIndexLegend();
|
|
|
- obceIndexLayer.getSource().legend_categories = indexLegend;
|
|
|
+ obceIndexLayer.getSource().legend_categories = this.adjusterLegendService.createIndexLegend();
|
|
|
this.hsConfig.default_layers.push(okresyLayer);
|
|
|
this.hsConfig.default_layers.push(krajeLayer);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * https://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/
|
|
|
- * @private
|
|
|
- * @description Only generates random colors if the current palette does not provide enough colors for all the clusters
|
|
|
- * @param {number} colorCount Number of colors to randomly generate
|
|
|
- * @returns {Array<Array<number> | string>} Array of RGB colors
|
|
|
- */
|
|
|
- private generateRandomColorPalette(colorCount: number) {
|
|
|
- const palette = this.colorPalette;
|
|
|
- const goldenRatioConjugate = 0.618033988749895;
|
|
|
- let i = palette.length;
|
|
|
- while (i < colorCount) {
|
|
|
- let h = Math.random();
|
|
|
- h += goldenRatioConjugate;
|
|
|
- h %= 1;
|
|
|
- h *= 360;
|
|
|
- palette.push(hsv2rgb(h, 0.5, 0.95));
|
|
|
- i++;
|
|
|
- }
|
|
|
- return palette;
|
|
|
- //return `rgba(${r}, ${g}, ${b}, 0.7)`;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
* @description Function factory for generating style functions based on different clustering methods
|
|
|
* @param {string} method selected method
|
|
|
* @returns {function} style function
|
|
|
@@ -158,7 +118,9 @@ export class AppService {
|
|
|
} else {
|
|
|
return new Style({
|
|
|
fill: new Fill({
|
|
|
- color: this.colorPalette[feature.get(method) - 1],
|
|
|
+ color: this.adjusterLegendService.colorPalette[
|
|
|
+ feature.get(method) - 1
|
|
|
+ ],
|
|
|
}),
|
|
|
stroke: new Stroke({
|
|
|
color: '#FFF',
|