根據(jù)基礎(chǔ)聚合類,我們構(gòu)建geojosn序列化的聚合使用類
首先是參數(shù)定義
interface ClassBreak {
minValue: number,
maxValue: number,
symbol: any
}
interface UniqueValue {
value: number,
symbol: any
}
export interface PRenderer {
type:?"simple"|"uniqueValue"|"classBreaks",
field?: string,//simple不需要該參數(shù)
symbol: any,
classBreakInfos?:?Array<ClassBreak>,
uniqueValueInfos?:Array<UniqueValue>
}
renderer設(shè)置
```javascript
import {PRenderer} from "./PRenderer";
import {ColorUtil} from "../utils/ColorUtil";
export class Renderer {
type = "Renderer";
private renderer: PRenderer;
constructor(renderer: PRenderer) {
this.renderer = renderer;
}
/**
* 獲得symbol
* @param attributes 屬性
* @param {boolean} isEntity 是否是Entity解析
* @returns {any} symbol
*/
public?getSymbol(attributes: any, isEntity =?false): any {
const {type, field, symbol, uniqueValueInfos, classBreakInfos} =?this.renderer;
if (type ===?"simple") {
if (!symbol) {
throw?new Error("缺少屬性symbol");
}
return symbol;
}
let?value = attributes[field ||?""];
if (isEntity) {
value =?value?._value
}
if (type ===?"uniqueValue") {
if (!uniqueValueInfos) {
throw?new Error("缺少屬性uniqueValueInfos");
}
for (const item of uniqueValueInfos) {
if (item.value ==?value) {
return item.symbol;
}
}
}
if (type ===?"classBreaks") {
if (!classBreakInfos) {
throw?new Error("缺少屬性classBreakInfos");
}
for (const item of classBreakInfos) {
if (value >= item.minValue &&?value < item.maxValue) {
return item.symbol;
}
}
}
return symbol;
}
public?setEntitySymbol(entity: any, attributes: any) {
const symbol =?this.getSymbol(attributes,?true);
Renderer.setEntityProperties(entity, attributes, symbol);
}
public?static?setEntityProperties(obj: any, attributes: any, properties: any) {
for (const key?in properties) {
const?value = properties[key];
if (Object.prototype.toString.call(value) ==?"[object Object]") {
if (value instanceof Cesium.Color) {
obj[key] =?value
}?else?if (value instanceof Cesium.LabelGraphics) {
const v =?value.clone();
v.text = v.text._value.replace(/\${(\w+)+}/g, function (match, key) {
return attributes[key]._value;
});
?更多參考?https://xiaozhuanlan.com/topic/4596712380
首先是參數(shù)定義
interface ClassBreak {
minValue: number,
maxValue: number,
symbol: any
}
interface UniqueValue {
value: number,
symbol: any
}
export interface PRenderer {
type:?"simple"|"uniqueValue"|"classBreaks",
field?: string,//simple不需要該參數(shù)
symbol: any,
classBreakInfos?:?Array<ClassBreak>,
uniqueValueInfos?:Array<UniqueValue>
}
renderer設(shè)置
```javascript
import {PRenderer} from "./PRenderer";
import {ColorUtil} from "../utils/ColorUtil";
export class Renderer {
type = "Renderer";
private renderer: PRenderer;
constructor(renderer: PRenderer) {
this.renderer = renderer;
}
/**
* 獲得symbol
* @param attributes 屬性
* @param {boolean} isEntity 是否是Entity解析
* @returns {any} symbol
*/
public?getSymbol(attributes: any, isEntity =?false): any {
const {type, field, symbol, uniqueValueInfos, classBreakInfos} =?this.renderer;
if (type ===?"simple") {
if (!symbol) {
throw?new Error("缺少屬性symbol");
}
return symbol;
}
let?value = attributes[field ||?""];
if (isEntity) {
value =?value?._value
}
if (type ===?"uniqueValue") {
if (!uniqueValueInfos) {
throw?new Error("缺少屬性uniqueValueInfos");
}
for (const item of uniqueValueInfos) {
if (item.value ==?value) {
return item.symbol;
}
}
}
if (type ===?"classBreaks") {
if (!classBreakInfos) {
throw?new Error("缺少屬性classBreakInfos");
}
for (const item of classBreakInfos) {
if (value >= item.minValue &&?value < item.maxValue) {
return item.symbol;
}
}
}
return symbol;
}
public?setEntitySymbol(entity: any, attributes: any) {
const symbol =?this.getSymbol(attributes,?true);
Renderer.setEntityProperties(entity, attributes, symbol);
}
public?static?setEntityProperties(obj: any, attributes: any, properties: any) {
for (const key?in properties) {
const?value = properties[key];
if (Object.prototype.toString.call(value) ==?"[object Object]") {
if (value instanceof Cesium.Color) {
obj[key] =?value
}?else?if (value instanceof Cesium.LabelGraphics) {
const v =?value.clone();
v.text = v.text._value.replace(/\${(\w+)+}/g, function (match, key) {
return attributes[key]._value;
});
?更多參考?https://xiaozhuanlan.com/topic/4596712380