@antv/l7-layers 2.8.31 → 2.8.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/Geometry/models/plane.d.ts +13 -11
- package/es/Geometry/models/plane.js +134 -110
- package/es/Geometry/models/plane.js.map +1 -1
- package/es/canvas/models/canvas.js +5 -3
- package/es/canvas/models/canvas.js.map +1 -1
- package/es/core/BaseLayer.d.ts +5 -1
- package/es/core/BaseLayer.js +47 -0
- package/es/core/BaseLayer.js.map +1 -1
- package/es/core/interface.d.ts +3 -0
- package/es/core/interface.js.map +1 -1
- package/es/heatmap/index.d.ts +2 -0
- package/es/heatmap/index.js +9 -0
- package/es/heatmap/index.js.map +1 -1
- package/es/heatmap/models/heatmap.js +1 -0
- package/es/heatmap/models/heatmap.js.map +1 -1
- package/es/line/index.d.ts +1 -1
- package/es/line/index.js +1 -0
- package/es/line/index.js.map +1 -1
- package/es/line/models/index.d.ts +1 -1
- package/es/line/models/index.js +3 -1
- package/es/line/models/index.js.map +1 -1
- package/es/line/models/line.js +1 -0
- package/es/line/models/line.js.map +1 -1
- package/es/line/models/linearline.d.ts +20 -0
- package/es/line/models/linearline.js +267 -0
- package/es/line/models/linearline.js.map +1 -0
- package/es/point/models/fill.js +6 -2
- package/es/point/models/fill.js.map +1 -1
- package/es/point/models/normal.js +1 -0
- package/es/point/models/normal.js.map +1 -1
- package/es/point/models/simplePoint.js +1 -0
- package/es/point/models/simplePoint.js.map +1 -1
- package/es/polygon/models/extrude.d.ts +2 -0
- package/es/polygon/models/extrude.js +11 -5
- package/es/polygon/models/extrude.js.map +1 -1
- package/es/polygon/models/fill.d.ts +1 -0
- package/es/polygon/models/fill.js +6 -2
- package/es/polygon/models/fill.js.map +1 -1
- package/es/utils/layerData.d.ts +2 -0
- package/es/utils/layerData.js +152 -0
- package/es/utils/layerData.js.map +1 -0
- package/lib/Geometry/models/plane.js +133 -108
- package/lib/Geometry/models/plane.js.map +1 -1
- package/lib/canvas/models/canvas.js +5 -3
- package/lib/canvas/models/canvas.js.map +1 -1
- package/lib/core/BaseLayer.js +47 -0
- package/lib/core/BaseLayer.js.map +1 -1
- package/lib/core/interface.js.map +1 -1
- package/lib/heatmap/index.js +9 -0
- package/lib/heatmap/index.js.map +1 -1
- package/lib/heatmap/models/heatmap.js +1 -0
- package/lib/heatmap/models/heatmap.js.map +1 -1
- package/lib/line/index.js +1 -0
- package/lib/line/index.js.map +1 -1
- package/lib/line/models/index.js +4 -1
- package/lib/line/models/index.js.map +1 -1
- package/lib/line/models/line.js +1 -0
- package/lib/line/models/line.js.map +1 -1
- package/lib/line/models/linearline.js +283 -0
- package/lib/line/models/linearline.js.map +1 -0
- package/lib/point/models/fill.js +6 -2
- package/lib/point/models/fill.js.map +1 -1
- package/lib/point/models/normal.js +1 -0
- package/lib/point/models/normal.js.map +1 -1
- package/lib/point/models/simplePoint.js +1 -0
- package/lib/point/models/simplePoint.js.map +1 -1
- package/lib/polygon/models/extrude.js +11 -5
- package/lib/polygon/models/extrude.js.map +1 -1
- package/lib/polygon/models/fill.js +6 -2
- package/lib/polygon/models/fill.js.map +1 -1
- package/lib/utils/layerData.js +163 -0
- package/lib/utils/layerData.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { Version } from '@antv/l7-maps';
|
|
2
|
+
import Source from '@antv/l7-source';
|
|
3
|
+
import { isColor, normalize, rgb2arr } from '@antv/l7-utils';
|
|
4
|
+
|
|
5
|
+
function getArrowPoints(p1, p2) {
|
|
6
|
+
var dir = [p2[0] - p1[0], p2[1] - p1[1]];
|
|
7
|
+
var normalizeDir = normalize(dir);
|
|
8
|
+
var arrowPoint = [p1[0] + normalizeDir[0] * 0.0001, p1[1] + normalizeDir[1] * 0.0001];
|
|
9
|
+
return arrowPoint;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function adjustData2Amap2Coordinates(mappedData, mapService) {
|
|
13
|
+
var _this = this;
|
|
14
|
+
|
|
15
|
+
if (mappedData.length > 0 && mapService.version === Version['GAODE2.x']) {
|
|
16
|
+
if (typeof mappedData[0].coordinates[0] === 'number') {
|
|
17
|
+
mappedData.filter(function (d) {
|
|
18
|
+
return !d.originCoordinates;
|
|
19
|
+
}).map(function (d) {
|
|
20
|
+
d.version = Version['GAODE2.x'];
|
|
21
|
+
d.originCoordinates = cloneDeep(d.coordinates);
|
|
22
|
+
d.coordinates = _this.mapService.lngLatToCoord(d.coordinates);
|
|
23
|
+
});
|
|
24
|
+
} else {
|
|
25
|
+
mappedData.filter(function (d) {
|
|
26
|
+
return !d.originCoordinates;
|
|
27
|
+
}).map(function (d) {
|
|
28
|
+
d.version = Version['GAODE2.x'];
|
|
29
|
+
d.originCoordinates = cloneDeep(d.coordinates);
|
|
30
|
+
d.coordinates = _this.mapService.lngLatToCoords(d.coordinates);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function adjustData2SimpleCoordinates(mappedData, mapService) {
|
|
37
|
+
if (mappedData.length > 0 && mapService.version === Version.SIMPLE) {
|
|
38
|
+
mappedData.map(function (d) {
|
|
39
|
+
if (!d.simpleCoordinate) {
|
|
40
|
+
d.coordinates = unProjectCoordinates(d.coordinates, mapService);
|
|
41
|
+
d.simpleCoordinate = true;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function unProjectCoordinates(coordinates, mapService) {
|
|
48
|
+
if (typeof coordinates[0] === 'number') {
|
|
49
|
+
return mapService.simpleMapCoord.unproject(coordinates);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (coordinates[0] && coordinates[0][0] instanceof Array) {
|
|
53
|
+
var coords = [];
|
|
54
|
+
coordinates.map(function (coord) {
|
|
55
|
+
var c1 = [];
|
|
56
|
+
coord.map(function (co) {
|
|
57
|
+
c1.push(mapService.simpleMapCoord.unproject(co));
|
|
58
|
+
});
|
|
59
|
+
coords.push(c1);
|
|
60
|
+
});
|
|
61
|
+
return coords;
|
|
62
|
+
} else {
|
|
63
|
+
var _coords = [];
|
|
64
|
+
coordinates.map(function (coord) {
|
|
65
|
+
_coords.push(mapService.simpleMapCoord.unproject(coord));
|
|
66
|
+
});
|
|
67
|
+
return _coords;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function applyAttributeMapping(attribute, record, minimumColor) {
|
|
72
|
+
var _attribute$scale;
|
|
73
|
+
|
|
74
|
+
if (!attribute.scale) {
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
var scalers = (attribute === null || attribute === void 0 ? void 0 : (_attribute$scale = attribute.scale) === null || _attribute$scale === void 0 ? void 0 : _attribute$scale.scalers) || [];
|
|
79
|
+
var params = [];
|
|
80
|
+
scalers.forEach(function (_ref) {
|
|
81
|
+
var _attribute$scale2;
|
|
82
|
+
|
|
83
|
+
var field = _ref.field;
|
|
84
|
+
|
|
85
|
+
if (record.hasOwnProperty(field) || ((_attribute$scale2 = attribute.scale) === null || _attribute$scale2 === void 0 ? void 0 : _attribute$scale2.type) === 'variable') {
|
|
86
|
+
params.push(record[field]);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
var mappingResult = attribute.mapping ? attribute.mapping(params) : [];
|
|
90
|
+
|
|
91
|
+
if (attribute.name === 'color' && !isColor(mappingResult[0])) {
|
|
92
|
+
return [minimumColor];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return mappingResult;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function mapping(attributes, data, fontService, mapService, minimumColor, layer) {
|
|
99
|
+
var _ref2 = layer === null || layer === void 0 ? void 0 : layer.getLayerConfig(),
|
|
100
|
+
_ref2$arrow = _ref2.arrow,
|
|
101
|
+
arrow = _ref2$arrow === void 0 ? {
|
|
102
|
+
enable: false
|
|
103
|
+
} : _ref2$arrow;
|
|
104
|
+
|
|
105
|
+
var mappedData = data.map(function (record) {
|
|
106
|
+
var encodeRecord = {
|
|
107
|
+
id: record._id,
|
|
108
|
+
coordinates: record.coordinates
|
|
109
|
+
};
|
|
110
|
+
attributes.filter(function (attribute) {
|
|
111
|
+
return attribute.scale !== undefined;
|
|
112
|
+
}).forEach(function (attribute) {
|
|
113
|
+
var values = applyAttributeMapping(attribute, record, minimumColor);
|
|
114
|
+
attribute.needRemapping = false;
|
|
115
|
+
|
|
116
|
+
if (attribute.name === 'color') {
|
|
117
|
+
values = values.map(function (c) {
|
|
118
|
+
return rgb2arr(c);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
encodeRecord[attribute.name] = Array.isArray(values) && values.length === 1 ? values[0] : values;
|
|
123
|
+
|
|
124
|
+
if (attribute.name === 'shape') {
|
|
125
|
+
encodeRecord.shape = fontService.getIconFontKey(encodeRecord[attribute.name]);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
if (encodeRecord.shape === 'line' && arrow.enable) {
|
|
130
|
+
var coords = encodeRecord.coordinates;
|
|
131
|
+
var arrowPoint = getArrowPoints(coords[0], coords[1]);
|
|
132
|
+
encodeRecord.coordinates.splice(1, 0, arrowPoint, arrowPoint);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return encodeRecord;
|
|
136
|
+
});
|
|
137
|
+
adjustData2Amap2Coordinates(mappedData, mapService);
|
|
138
|
+
adjustData2SimpleCoordinates(mappedData, mapService);
|
|
139
|
+
return mappedData;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export function calculateData(layer, fontService, mapService, styleAttributeService, data, options) {
|
|
143
|
+
var source = new Source(data, options);
|
|
144
|
+
var bottomColor = layer.getBottomColor();
|
|
145
|
+
var attributes = styleAttributeService.getLayerStyleAttributes() || [];
|
|
146
|
+
var dataArray = source.data.dataArray;
|
|
147
|
+
var filterData = dataArray;
|
|
148
|
+
var mappedEncodeData = mapping(attributes, filterData, fontService, mapService, bottomColor, layer);
|
|
149
|
+
source.destroy();
|
|
150
|
+
return mappedEncodeData;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=layerData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/layerData.ts"],"names":["Version","Source","isColor","normalize","rgb2arr","getArrowPoints","p1","p2","dir","normalizeDir","arrowPoint","adjustData2Amap2Coordinates","mappedData","mapService","length","version","coordinates","filter","d","originCoordinates","map","cloneDeep","lngLatToCoord","lngLatToCoords","adjustData2SimpleCoordinates","SIMPLE","simpleCoordinate","unProjectCoordinates","simpleMapCoord","unproject","Array","coords","coord","c1","co","push","applyAttributeMapping","attribute","record","minimumColor","scale","scalers","params","forEach","field","hasOwnProperty","type","mappingResult","mapping","name","attributes","data","fontService","layer","getLayerConfig","arrow","enable","encodeRecord","id","_id","undefined","values","needRemapping","c","isArray","shape","getIconFontKey","splice","calculateData","styleAttributeService","options","source","bottomColor","getBottomColor","getLayerStyleAttributes","dataArray","filterData","mappedEncodeData","destroy"],"mappings":"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","sourcesContent":["import {\n IEncodeFeature,\n IFontService,\n ILayer,\n IMapService,\n IParseDataItem,\n ISourceCFG,\n IStyleAttribute,\n IStyleAttributeService,\n Position,\n} from '@antv/l7-core';\nimport { Version } from '@antv/l7-maps';\nimport Source from '@antv/l7-source';\nimport { isColor, normalize, rgb2arr } from '@antv/l7-utils';\nimport { ILineLayerStyleOptions } from '../core/interface';\n\nfunction getArrowPoints(p1: Position, p2: Position) {\n const dir = [p2[0] - p1[0], p2[1] - p1[1]];\n const normalizeDir = normalize(dir);\n const arrowPoint = [\n p1[0] + normalizeDir[0] * 0.0001,\n p1[1] + normalizeDir[1] * 0.0001,\n ];\n return arrowPoint;\n}\n\nfunction adjustData2Amap2Coordinates(\n mappedData: IEncodeFeature[],\n mapService: IMapService,\n) {\n // 根据地图的类型判断是否需要对点位数据进行处理, 若是高德2.0则需要对坐标进行相对偏移\n if (mappedData.length > 0 && mapService.version === Version['GAODE2.x']) {\n if (typeof mappedData[0].coordinates[0] === 'number') {\n // 单个的点数据\n // @ts-ignore\n mappedData\n // TODO: 避免经纬度被重复计算导致坐标位置偏移\n .filter((d) => !d.originCoordinates)\n .map((d) => {\n d.version = Version['GAODE2.x'];\n // @ts-ignore\n d.originCoordinates = cloneDeep(d.coordinates); // 为了兼容高德1.x 需要保存一份原始的经纬度坐标数据(许多上层逻辑依赖经纬度数据)\n // @ts-ignore\n d.coordinates = this.mapService.lngLatToCoord(d.coordinates);\n });\n } else {\n // 连续的线、面数据\n // @ts-ignore\n mappedData\n // TODO: 避免经纬度被重复计算导致坐标位置偏移\n .filter((d) => !d.originCoordinates)\n .map((d) => {\n d.version = Version['GAODE2.x'];\n // @ts-ignore\n d.originCoordinates = cloneDeep(d.coordinates); // 为了兼容高德1.x 需要保存一份原始的经纬度坐标数据(许多上层逻辑依赖经纬度数据)\n // @ts-ignore\n d.coordinates = this.mapService.lngLatToCoords(d.coordinates);\n });\n }\n }\n}\n\nfunction adjustData2SimpleCoordinates(\n mappedData: IEncodeFeature[],\n mapService: IMapService,\n) {\n if (mappedData.length > 0 && mapService.version === Version.SIMPLE) {\n mappedData.map((d) => {\n if (!d.simpleCoordinate) {\n d.coordinates = unProjectCoordinates(d.coordinates, mapService);\n d.simpleCoordinate = true;\n }\n });\n }\n}\n\nfunction unProjectCoordinates(coordinates: any, mapService: IMapService) {\n if (typeof coordinates[0] === 'number') {\n return mapService.simpleMapCoord.unproject(coordinates as [number, number]);\n }\n\n if (coordinates[0] && coordinates[0][0] instanceof Array) {\n // @ts-ignore\n const coords = [];\n coordinates.map((coord: any) => {\n // @ts-ignore\n const c1 = [];\n coord.map((co: any) => {\n c1.push(mapService.simpleMapCoord.unproject(co as [number, number]));\n });\n // @ts-ignore\n coords.push(c1);\n });\n // @ts-ignore\n return coords;\n } else {\n // @ts-ignore\n const coords = [];\n // @ts-ignore\n coordinates.map((coord) => {\n coords.push(\n mapService.simpleMapCoord.unproject(coord as [number, number]),\n );\n });\n // @ts-ignore\n return coords;\n }\n}\n\nfunction applyAttributeMapping(\n attribute: IStyleAttribute,\n record: { [key: string]: unknown },\n minimumColor?: string,\n) {\n if (!attribute.scale) {\n return [];\n }\n const scalers = attribute?.scale?.scalers || [];\n const params: unknown[] = [];\n\n scalers.forEach(({ field }) => {\n if (record.hasOwnProperty(field) || attribute.scale?.type === 'variable') {\n // TODO:多字段,常量\n params.push(record[field]);\n }\n });\n\n const mappingResult = attribute.mapping ? attribute.mapping(params) : [];\n if (attribute.name === 'color' && !isColor(mappingResult[0])) {\n return [minimumColor];\n }\n return mappingResult;\n}\n\nfunction mapping(\n attributes: IStyleAttribute[],\n data: IParseDataItem[],\n fontService: IFontService,\n mapService: IMapService,\n minimumColor?: string,\n layer?: ILayer,\n): IEncodeFeature[] {\n const {\n arrow = {\n enable: false,\n },\n } = layer?.getLayerConfig() as ILineLayerStyleOptions;\n const mappedData = data.map((record: IParseDataItem) => {\n const encodeRecord: IEncodeFeature = {\n id: record._id,\n coordinates: record.coordinates,\n };\n\n attributes\n .filter((attribute) => attribute.scale !== undefined)\n .forEach((attribute: IStyleAttribute) => {\n let values = applyAttributeMapping(attribute, record, minimumColor);\n\n attribute.needRemapping = false;\n\n // TODO: 支持每个属性配置 postprocess\n if (attribute.name === 'color') {\n values = values.map((c: unknown) => {\n return rgb2arr(c as string);\n });\n }\n // @ts-ignore\n encodeRecord[attribute.name] =\n Array.isArray(values) && values.length === 1 ? values[0] : values;\n\n // 增加对 layer/text/iconfont unicode 映射的解析\n if (attribute.name === 'shape') {\n encodeRecord.shape = fontService.getIconFontKey(\n encodeRecord[attribute.name] as string,\n );\n }\n });\n\n if (encodeRecord.shape === 'line' && arrow.enable) {\n // 只有在线图层且支持配置箭头的时候进行插入顶点的处理\n const coords = encodeRecord.coordinates as Position[];\n const arrowPoint = getArrowPoints(coords[0], coords[1]);\n encodeRecord.coordinates.splice(1, 0, arrowPoint, arrowPoint);\n }\n return encodeRecord;\n }) as IEncodeFeature[];\n // 调整数据兼容 Amap2.0\n adjustData2Amap2Coordinates(mappedData, mapService);\n\n // 调整数据兼容 SimpleCoordinates\n adjustData2SimpleCoordinates(mappedData, mapService);\n\n return mappedData;\n}\n\nexport function calculateData(\n layer: ILayer,\n fontService: IFontService,\n mapService: IMapService,\n styleAttributeService: IStyleAttributeService,\n data: any,\n options: ISourceCFG | undefined,\n): IEncodeFeature[] {\n const source = new Source(data, options);\n const bottomColor = layer.getBottomColor();\n const attributes = styleAttributeService.getLayerStyleAttributes() || [];\n const { dataArray } = source.data;\n const filterData = dataArray;\n\n const mappedEncodeData = mapping(\n attributes,\n filterData,\n fontService,\n mapService,\n bottomColor,\n layer,\n );\n source.destroy();\n return mappedEncodeData;\n}\n"],"file":"layerData.js"}
|
|
@@ -56,9 +56,9 @@ var PlaneModel = function (_BaseModel) {
|
|
|
56
56
|
|
|
57
57
|
_this = _super.call.apply(_super, [this].concat(args));
|
|
58
58
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "texture", void 0);
|
|
59
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "terrainImage", void 0);
|
|
60
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "terrainImageLoaded", false);
|
|
59
61
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mapTexture", void 0);
|
|
60
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "positions", void 0);
|
|
61
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "indices", void 0);
|
|
62
62
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "planeGeometryTriangulation", function () {
|
|
63
63
|
var _this2;
|
|
64
64
|
|
|
@@ -79,11 +79,8 @@ var PlaneModel = function (_BaseModel) {
|
|
|
79
79
|
indices = _this$initPlane.indices,
|
|
80
80
|
positions = _this$initPlane.positions;
|
|
81
81
|
|
|
82
|
-
_this.positions = positions;
|
|
83
|
-
_this.indices = indices;
|
|
84
|
-
|
|
85
82
|
if (terrainTexture) {
|
|
86
|
-
_this.loadTerrainTexture();
|
|
83
|
+
_this.loadTerrainTexture(positions, indices);
|
|
87
84
|
}
|
|
88
85
|
|
|
89
86
|
return {
|
|
@@ -92,13 +89,6 @@ var PlaneModel = function (_BaseModel) {
|
|
|
92
89
|
size: 5
|
|
93
90
|
};
|
|
94
91
|
});
|
|
95
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "planeGeometryUpdateTriangulation", function () {
|
|
96
|
-
return {
|
|
97
|
-
vertices: _this.positions,
|
|
98
|
-
indices: _this.indices,
|
|
99
|
-
size: 5
|
|
100
|
-
};
|
|
101
|
-
});
|
|
102
92
|
return _this;
|
|
103
93
|
}
|
|
104
94
|
|
|
@@ -132,9 +122,9 @@ var PlaneModel = function (_BaseModel) {
|
|
|
132
122
|
var _ref2 = this.mapService.lngLatToCoord([x + lng, -y + lat]),
|
|
133
123
|
_ref3 = (0, _slicedToArray2.default)(_ref2, 2),
|
|
134
124
|
a = _ref3[0],
|
|
135
|
-
|
|
125
|
+
_b = _ref3[1];
|
|
136
126
|
|
|
137
|
-
positions.push(a,
|
|
127
|
+
positions.push(a, _b, 0);
|
|
138
128
|
} else {
|
|
139
129
|
positions.push(x + lng, -y + lat, 0);
|
|
140
130
|
}
|
|
@@ -148,12 +138,12 @@ var PlaneModel = function (_BaseModel) {
|
|
|
148
138
|
for (var _ix = 0; _ix < gridX; _ix++) {
|
|
149
139
|
var _a = _ix + gridX1 * _iy;
|
|
150
140
|
|
|
151
|
-
var
|
|
141
|
+
var _b2 = _ix + gridX1 * (_iy + 1);
|
|
152
142
|
|
|
153
143
|
var c = _ix + 1 + gridX1 * (_iy + 1);
|
|
154
144
|
var d = _ix + 1 + gridX1 * _iy;
|
|
155
|
-
indices.push(_a,
|
|
156
|
-
indices.push(
|
|
145
|
+
indices.push(_a, _b2, d);
|
|
146
|
+
indices.push(_b2, c, d);
|
|
157
147
|
}
|
|
158
148
|
}
|
|
159
149
|
|
|
@@ -192,6 +182,7 @@ var PlaneModel = function (_BaseModel) {
|
|
|
192
182
|
value: function clearModels() {
|
|
193
183
|
var _this$texture2;
|
|
194
184
|
|
|
185
|
+
this.terrainImage = null;
|
|
195
186
|
(_this$texture2 = this.texture) === null || _this$texture2 === void 0 ? void 0 : _this$texture2.destroy();
|
|
196
187
|
}
|
|
197
188
|
}, {
|
|
@@ -228,101 +219,42 @@ var PlaneModel = function (_BaseModel) {
|
|
|
228
219
|
}
|
|
229
220
|
})];
|
|
230
221
|
}
|
|
231
|
-
}, {
|
|
232
|
-
key: "getImageData",
|
|
233
|
-
value: function getImageData(img) {
|
|
234
|
-
var canvas = document.createElement('canvas');
|
|
235
|
-
var ctx = canvas.getContext('2d');
|
|
236
|
-
var width = img.width,
|
|
237
|
-
height = img.height;
|
|
238
|
-
canvas.width = width;
|
|
239
|
-
canvas.height = height;
|
|
240
|
-
ctx.drawImage(img, 0, 0, width, height);
|
|
241
|
-
var imageData = ctx.getImageData(0, 0, width, height);
|
|
242
|
-
return imageData;
|
|
243
|
-
}
|
|
244
|
-
}, {
|
|
245
|
-
key: "loadTerrainTexture",
|
|
246
|
-
value: function loadTerrainTexture() {
|
|
247
|
-
var _this3 = this;
|
|
248
|
-
|
|
249
|
-
var _ref6 = this.layer.getLayerConfig(),
|
|
250
|
-
_ref6$mask = _ref6.mask,
|
|
251
|
-
mask = _ref6$mask === void 0 ? false : _ref6$mask,
|
|
252
|
-
_ref6$maskInside = _ref6.maskInside,
|
|
253
|
-
maskInside = _ref6$maskInside === void 0 ? true : _ref6$maskInside,
|
|
254
|
-
_ref6$widthSegments = _ref6.widthSegments,
|
|
255
|
-
widthSegments = _ref6$widthSegments === void 0 ? 1 : _ref6$widthSegments,
|
|
256
|
-
_ref6$heightSegments = _ref6.heightSegments,
|
|
257
|
-
heightSegments = _ref6$heightSegments === void 0 ? 1 : _ref6$heightSegments,
|
|
258
|
-
terrainTexture = _ref6.terrainTexture,
|
|
259
|
-
_ref6$rgb2height = _ref6.rgb2height,
|
|
260
|
-
rgb2height = _ref6$rgb2height === void 0 ? function (r, g, b) {
|
|
261
|
-
return r + g + b;
|
|
262
|
-
} : _ref6$rgb2height;
|
|
263
|
-
|
|
264
|
-
var terrainImage = new Image();
|
|
265
|
-
terrainImage.crossOrigin = 'anonymous';
|
|
266
|
-
|
|
267
|
-
terrainImage.onload = function () {
|
|
268
|
-
var imgWidth = terrainImage.width;
|
|
269
|
-
var imgHeight = terrainImage.height;
|
|
270
|
-
|
|
271
|
-
var imageData = _this3.getImageData(terrainImage).data;
|
|
272
|
-
|
|
273
|
-
var gridX = Math.floor(widthSegments);
|
|
274
|
-
var gridY = Math.floor(heightSegments);
|
|
275
|
-
var gridX1 = gridX + 1;
|
|
276
|
-
var gridY1 = gridY + 1;
|
|
277
|
-
var widthStep = imgWidth / gridX;
|
|
278
|
-
var heihgtStep = imgHeight / gridY;
|
|
279
|
-
|
|
280
|
-
for (var iy = 0; iy < gridY1; iy++) {
|
|
281
|
-
var imgIndexY = Math.floor(iy * heihgtStep);
|
|
282
|
-
var imgLen = imgIndexY * imgWidth;
|
|
283
|
-
|
|
284
|
-
for (var ix = 0; ix < gridX1; ix++) {
|
|
285
|
-
var imgIndexX = Math.floor(ix * widthStep);
|
|
286
|
-
var imgDataIndex = (imgLen + imgIndexX) * 4;
|
|
287
|
-
var r = imageData[imgDataIndex];
|
|
288
|
-
var g = imageData[imgDataIndex + 1];
|
|
289
|
-
var b = imageData[imgDataIndex + 2];
|
|
290
|
-
var z = (iy * gridX1 + ix) * 5 + 2;
|
|
291
|
-
_this3.positions[z] = rgb2height(r, g, b);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
_this3.layer.models = [_this3.layer.buildLayerModel({
|
|
296
|
-
moduleName: 'geometry_plane',
|
|
297
|
-
vertexShader: planeVert,
|
|
298
|
-
fragmentShader: planeFrag,
|
|
299
|
-
triangulation: _this3.planeGeometryUpdateTriangulation,
|
|
300
|
-
primitive: _l7Core.gl.TRIANGLES,
|
|
301
|
-
depth: {
|
|
302
|
-
enable: true
|
|
303
|
-
},
|
|
304
|
-
blend: _this3.getBlend(),
|
|
305
|
-
stencil: (0, _l7Utils.getMask)(mask, maskInside),
|
|
306
|
-
cull: {
|
|
307
|
-
enable: true,
|
|
308
|
-
face: _l7Core.gl.BACK
|
|
309
|
-
}
|
|
310
|
-
})];
|
|
311
|
-
|
|
312
|
-
_this3.layerService.renderLayers();
|
|
313
|
-
};
|
|
314
|
-
|
|
315
|
-
terrainImage.src = terrainTexture;
|
|
316
|
-
}
|
|
317
222
|
}, {
|
|
318
223
|
key: "buildModels",
|
|
319
224
|
value: function buildModels() {
|
|
320
225
|
return this.initModels();
|
|
321
226
|
}
|
|
227
|
+
}, {
|
|
228
|
+
key: "createModelData",
|
|
229
|
+
value: function createModelData(options) {
|
|
230
|
+
if (options) {
|
|
231
|
+
var _ref6 = this.layer.getLayerConfig(),
|
|
232
|
+
oldwidthSegments = _ref6.widthSegments,
|
|
233
|
+
oldheightSegments = _ref6.heightSegments,
|
|
234
|
+
oldwidth = _ref6.width,
|
|
235
|
+
oldheight = _ref6.height;
|
|
236
|
+
|
|
237
|
+
var _ref7 = options,
|
|
238
|
+
widthSegments = _ref7.widthSegments,
|
|
239
|
+
heightSegments = _ref7.heightSegments,
|
|
240
|
+
width = _ref7.width,
|
|
241
|
+
height = _ref7.height;
|
|
242
|
+
this.layer.style({
|
|
243
|
+
widthSegments: widthSegments !== undefined ? widthSegments : oldwidthSegments,
|
|
244
|
+
heightSegments: heightSegments !== undefined ? heightSegments : oldheightSegments,
|
|
245
|
+
width: width !== undefined ? width : oldwidth,
|
|
246
|
+
height: height !== undefined ? height : oldheight
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
var oldFeatures = this.layer.getEncodedData();
|
|
251
|
+
var res = this.styleAttributeService.createAttributesAndIndices(oldFeatures, this.planeGeometryTriangulation);
|
|
252
|
+
return res;
|
|
253
|
+
}
|
|
322
254
|
}, {
|
|
323
255
|
key: "updateTexture",
|
|
324
256
|
value: function updateTexture(mapTexture) {
|
|
325
|
-
var
|
|
257
|
+
var _this3 = this;
|
|
326
258
|
|
|
327
259
|
var createTexture2D = this.rendererService.createTexture2D;
|
|
328
260
|
|
|
@@ -331,7 +263,7 @@ var PlaneModel = function (_BaseModel) {
|
|
|
331
263
|
img.crossOrigin = 'anonymous';
|
|
332
264
|
|
|
333
265
|
img.onload = function () {
|
|
334
|
-
|
|
266
|
+
_this3.texture = createTexture2D({
|
|
335
267
|
data: img,
|
|
336
268
|
width: img.width,
|
|
337
269
|
height: img.height,
|
|
@@ -339,9 +271,9 @@ var PlaneModel = function (_BaseModel) {
|
|
|
339
271
|
wrapT: _l7Core.gl.CLAMP_TO_EDGE
|
|
340
272
|
});
|
|
341
273
|
|
|
342
|
-
|
|
274
|
+
_this3.layerService.updateLayerRenderList();
|
|
343
275
|
|
|
344
|
-
|
|
276
|
+
_this3.layerService.renderLayers();
|
|
345
277
|
};
|
|
346
278
|
|
|
347
279
|
img.src = mapTexture;
|
|
@@ -352,6 +284,99 @@ var PlaneModel = function (_BaseModel) {
|
|
|
352
284
|
});
|
|
353
285
|
}
|
|
354
286
|
}
|
|
287
|
+
}, {
|
|
288
|
+
key: "getImageData",
|
|
289
|
+
value: function getImageData(img) {
|
|
290
|
+
var canvas = document.createElement('canvas');
|
|
291
|
+
var ctx = canvas.getContext('2d');
|
|
292
|
+
var width = img.width,
|
|
293
|
+
height = img.height;
|
|
294
|
+
canvas.width = width;
|
|
295
|
+
canvas.height = height;
|
|
296
|
+
ctx.drawImage(img, 0, 0, width, height);
|
|
297
|
+
var imageData = ctx.getImageData(0, 0, width, height);
|
|
298
|
+
return imageData;
|
|
299
|
+
}
|
|
300
|
+
}, {
|
|
301
|
+
key: "translateVertex",
|
|
302
|
+
value: function translateVertex(positions, indices, image, widthSegments, heightSegments, rgb2height) {
|
|
303
|
+
var imgWidth = image.width;
|
|
304
|
+
var imgHeight = image.height;
|
|
305
|
+
var imageData = this.getImageData(image).data;
|
|
306
|
+
var gridX = Math.floor(widthSegments);
|
|
307
|
+
var gridY = Math.floor(heightSegments);
|
|
308
|
+
var gridX1 = gridX + 1;
|
|
309
|
+
var gridY1 = gridY + 1;
|
|
310
|
+
var widthStep = imgWidth / gridX;
|
|
311
|
+
var heihgtStep = imgHeight / gridY;
|
|
312
|
+
|
|
313
|
+
for (var iy = 0; iy < gridY1; iy++) {
|
|
314
|
+
var imgIndexY = Math.floor(iy * heihgtStep);
|
|
315
|
+
var imgLen = imgIndexY * imgWidth;
|
|
316
|
+
|
|
317
|
+
for (var ix = 0; ix < gridX1; ix++) {
|
|
318
|
+
var imgIndexX = Math.floor(ix * widthStep);
|
|
319
|
+
var imgDataIndex = (imgLen + imgIndexX) * 4;
|
|
320
|
+
var _r = imageData[imgDataIndex];
|
|
321
|
+
var _g = imageData[imgDataIndex + 1];
|
|
322
|
+
var _b3 = imageData[imgDataIndex + 2];
|
|
323
|
+
var z = (iy * gridX1 + ix) * 5 + 2;
|
|
324
|
+
positions[z] = rgb2height(_r, _g, _b3);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
var oldFeatures = this.layer.getEncodedData();
|
|
329
|
+
var modelData = this.styleAttributeService.createAttributesAndIndices(oldFeatures, function () {
|
|
330
|
+
return {
|
|
331
|
+
vertices: positions,
|
|
332
|
+
indices: indices,
|
|
333
|
+
size: 5
|
|
334
|
+
};
|
|
335
|
+
});
|
|
336
|
+
this.layer.updateModelData(modelData);
|
|
337
|
+
this.layerService.renderLayers();
|
|
338
|
+
}
|
|
339
|
+
}, {
|
|
340
|
+
key: "loadTerrainTexture",
|
|
341
|
+
value: function loadTerrainTexture(positions, indices) {
|
|
342
|
+
var _this4 = this;
|
|
343
|
+
|
|
344
|
+
var _ref8 = this.layer.getLayerConfig(),
|
|
345
|
+
_ref8$widthSegments = _ref8.widthSegments,
|
|
346
|
+
widthSegments = _ref8$widthSegments === void 0 ? 1 : _ref8$widthSegments,
|
|
347
|
+
_ref8$heightSegments = _ref8.heightSegments,
|
|
348
|
+
heightSegments = _ref8$heightSegments === void 0 ? 1 : _ref8$heightSegments,
|
|
349
|
+
terrainTexture = _ref8.terrainTexture,
|
|
350
|
+
_ref8$rgb2height = _ref8.rgb2height,
|
|
351
|
+
rgb2height = _ref8$rgb2height === void 0 ? function (r, g, b) {
|
|
352
|
+
return r + g + b;
|
|
353
|
+
} : _ref8$rgb2height;
|
|
354
|
+
|
|
355
|
+
if (this.terrainImage) {
|
|
356
|
+
if (this.terrainImageLoaded) {
|
|
357
|
+
this.translateVertex(positions, indices, this.terrainImage, widthSegments, heightSegments, rgb2height);
|
|
358
|
+
} else {
|
|
359
|
+
this.terrainImage.onload = function () {
|
|
360
|
+
_this4.translateVertex(positions, indices, _this4.terrainImage, widthSegments, heightSegments, rgb2height);
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
} else {
|
|
364
|
+
var terrainImage = new Image();
|
|
365
|
+
this.terrainImage = terrainImage;
|
|
366
|
+
terrainImage.crossOrigin = 'anonymous';
|
|
367
|
+
|
|
368
|
+
terrainImage.onload = function () {
|
|
369
|
+
_this4.terrainImageLoaded = true;
|
|
370
|
+
setTimeout(function () {
|
|
371
|
+
return _this4.layer.emit('terrainImageLoaded', null);
|
|
372
|
+
});
|
|
373
|
+
|
|
374
|
+
_this4.translateVertex(positions, indices, terrainImage, widthSegments, heightSegments, rgb2height);
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
terrainImage.src = terrainTexture;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
355
380
|
}, {
|
|
356
381
|
key: "getConfigSchema",
|
|
357
382
|
value: function getConfigSchema() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/Geometry/models/plane.ts"],"names":["PlaneModel","layer","getLayerConfig","width","height","widthSegments","heightSegments","center","terrainTexture","initPlane","indices","positions","loadTerrainTexture","vertices","size","lng","lat","widthHalf","heightHalf","gridX","Math","floor","gridY","gridX1","gridY1","segmentWidth","segmentHeight","iy","y","ix","x","mapService","version","Version","lngLatToCoord","a","b","push","c","d","opacity","mapTexture","terrainClipHeight","texture","destroy","updateTexture","u_opacity","u_mapFlag","u_terrainClipHeight","u_texture","mask","maskInside","createTexture2D","rendererService","buildLayerModel","moduleName","vertexShader","planeVert","fragmentShader","planeFrag","triangulation","planeGeometryTriangulation","primitive","gl","TRIANGLES","depth","enable","blend","getBlend","stencil","cull","face","BACK","img","canvas","document","createElement","ctx","getContext","drawImage","imageData","getImageData","rgb2height","r","g","terrainImage","Image","crossOrigin","onload","imgWidth","imgHeight","data","widthStep","heihgtStep","imgIndexY","imgLen","imgIndexX","imgDataIndex","z","models","planeGeometryUpdateTriangulation","layerService","renderLayers","src","initModels","wrapS","CLAMP_TO_EDGE","wrapT","updateLayerRenderList","properties","type","minimum","maximum","styleAttributeService","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","FLOAT","update","feature","featureIdx","vertex","attributeIdx","BaseModel"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IEncodeFeature,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\nimport { Version } from '@antv/l7-maps';\nimport { getMask, isMini } from '@antv/l7-utils';\n// import { mat4, vec3 } from 'gl-matrix';\nimport BaseModel from '../../core/BaseModel';\nimport { IGeometryLayerStyleOptions } from '../../core/interface';\nimport planeFrag from '../shaders/plane_frag.glsl';\nimport planeVert from '../shaders/plane_vert.glsl';\n\nexport default class PlaneModel extends BaseModel {\n protected texture: ITexture2D;\n protected mapTexture: string | undefined;\n protected positions: number[];\n protected indices: number[];\n\n public initPlane(\n width = 1,\n height = 1,\n widthSegments = 1,\n heightSegments = 1,\n lng = 120,\n lat = 30,\n ) {\n // https://github.com/mrdoob/three.js/blob/dev/src/geometries/PlaneGeometry.js\n const widthHalf = width / 2;\n const heightHalf = height / 2;\n\n const gridX = Math.floor(widthSegments);\n const gridY = Math.floor(heightSegments);\n\n const gridX1 = gridX + 1;\n const gridY1 = gridY + 1;\n\n const segmentWidth = width / gridX;\n const segmentHeight = height / gridY;\n\n const indices = [];\n const positions = [];\n\n for (let iy = 0; iy < gridY1; iy++) {\n const y = iy * segmentHeight - heightHalf;\n\n for (let ix = 0; ix < gridX1; ix++) {\n const x = ix * segmentWidth - widthHalf;\n if (this.mapService.version === Version['GAODE2.x']) {\n // @ts-ignore\n const [a, b] = this.mapService.lngLatToCoord([x + lng, -y + lat]) as [\n number,\n number,\n ];\n positions.push(a, b, 0);\n } else {\n positions.push(x + lng, -y + lat, 0);\n }\n\n positions.push(ix / gridX);\n positions.push(1 - iy / gridY);\n }\n }\n\n for (let iy = 0; iy < gridY; iy++) {\n for (let ix = 0; ix < gridX; ix++) {\n const a = ix + gridX1 * iy;\n const b = ix + gridX1 * (iy + 1);\n const c = ix + 1 + gridX1 * (iy + 1);\n const d = ix + 1 + gridX1 * iy;\n\n indices.push(a, b, d);\n indices.push(b, c, d);\n }\n }\n\n return { indices, positions };\n }\n\n public planeGeometryTriangulation = () => {\n const {\n width = 1,\n height = 1,\n widthSegments = 1,\n heightSegments = 1,\n center = [120, 30],\n terrainTexture,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n\n const { indices, positions } = this.initPlane(\n width,\n height,\n widthSegments,\n heightSegments,\n ...center,\n );\n this.positions = positions;\n this.indices = indices;\n\n if (terrainTexture) {\n // 存在地形贴图的时候会根据地形贴图对顶点进行偏移\n this.loadTerrainTexture();\n }\n\n return {\n vertices: positions,\n indices,\n size: 5,\n };\n };\n public planeGeometryUpdateTriangulation = () => {\n return {\n vertices: this.positions,\n indices: this.indices,\n size: 5,\n };\n };\n\n public getUninforms(): IModelUniform {\n const {\n opacity,\n mapTexture,\n terrainClipHeight = 0,\n terrainTexture,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n if (this.mapTexture !== mapTexture) {\n this.mapTexture = mapTexture;\n this.texture?.destroy();\n this.updateTexture(mapTexture);\n }\n return {\n u_opacity: opacity || 1,\n u_mapFlag: mapTexture ? 1 : 0,\n u_terrainClipHeight: terrainTexture ? terrainClipHeight : -1,\n u_texture: this.texture,\n // u_ModelMatrix: mat4.translate(mat4.create(), mat4.create(), [1, 0, 0])\n // u_ModelMatrix: mat4.rotateZ(mat4.create(), mat4.create(), 10)\n // u_ModelMatrix: mat4.rotateZ(mat4.create(), mat4.create(), 10)\n // u_ModelMatrix: this.rotateZ()\n };\n }\n\n public clearModels(): void {\n this.texture?.destroy();\n }\n\n public initModels() {\n const {\n mask = false,\n maskInside = true,\n mapTexture,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n this.mapTexture = mapTexture;\n\n const { createTexture2D } = this.rendererService;\n this.texture = createTexture2D({\n height: 0,\n width: 0,\n });\n\n this.updateTexture(mapTexture);\n\n return [\n this.layer.buildLayerModel({\n moduleName: 'geometry_plane',\n vertexShader: planeVert,\n fragmentShader: planeFrag,\n triangulation: this.planeGeometryTriangulation,\n primitive: gl.TRIANGLES,\n depth: { enable: true },\n blend: this.getBlend(),\n stencil: getMask(mask, maskInside),\n cull: {\n enable: true,\n face: gl.BACK, // gl.FRONT | gl.BACK;\n },\n }),\n ];\n }\n\n public getImageData(img: HTMLImageElement) {\n const canvas: HTMLCanvasElement = document.createElement('canvas');\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n const { width, height } = img;\n canvas.width = width;\n canvas.height = height;\n\n ctx.drawImage(img, 0, 0, width, height);\n const imageData = ctx.getImageData(0, 0, width, height);\n\n return imageData;\n }\n\n /**\n * load terrain texture & offset attribute z\n */\n public loadTerrainTexture(): void {\n const {\n mask = false,\n maskInside = true,\n widthSegments = 1,\n heightSegments = 1,\n terrainTexture,\n rgb2height = (r: number, g: number, b: number) => r + g + b,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n const terrainImage = new Image();\n terrainImage.crossOrigin = 'anonymous';\n terrainImage.onload = () => {\n const imgWidth = terrainImage.width;\n const imgHeight = terrainImage.height;\n\n const imageData = this.getImageData(terrainImage).data;\n\n const gridX = Math.floor(widthSegments);\n const gridY = Math.floor(heightSegments);\n\n const gridX1 = gridX + 1;\n const gridY1 = gridY + 1;\n\n const widthStep = imgWidth / gridX;\n const heihgtStep = imgHeight / gridY;\n\n for (let iy = 0; iy < gridY1; iy++) {\n const imgIndexY = Math.floor(iy * heihgtStep);\n const imgLen = imgIndexY * imgWidth;\n\n for (let ix = 0; ix < gridX1; ix++) {\n const imgIndexX = Math.floor(ix * widthStep);\n const imgDataIndex = (imgLen + imgIndexX) * 4;\n\n const r = imageData[imgDataIndex];\n const g = imageData[imgDataIndex + 1];\n const b = imageData[imgDataIndex + 2];\n\n const z = (iy * gridX1 + ix) * 5 + 2;\n this.positions[z] = rgb2height(r, g, b);\n }\n }\n\n this.layer.models = [\n this.layer.buildLayerModel({\n moduleName: 'geometry_plane',\n vertexShader: planeVert,\n fragmentShader: planeFrag,\n triangulation: this.planeGeometryUpdateTriangulation,\n primitive: gl.TRIANGLES,\n depth: { enable: true },\n blend: this.getBlend(),\n stencil: getMask(mask, maskInside),\n cull: {\n enable: true,\n face: gl.BACK,\n },\n }),\n ];\n this.layerService.renderLayers();\n };\n terrainImage.src = terrainTexture as string;\n }\n\n public buildModels() {\n return this.initModels();\n }\n\n public updateTexture(mapTexture: string | undefined): void {\n const { createTexture2D } = this.rendererService;\n\n if (mapTexture) {\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n this.texture = createTexture2D({\n data: img,\n width: img.width,\n height: img.height,\n wrapS: gl.CLAMP_TO_EDGE,\n wrapT: gl.CLAMP_TO_EDGE,\n });\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n };\n img.src = mapTexture;\n } else {\n this.texture = createTexture2D({\n width: 0,\n height: 0,\n });\n }\n }\n\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n\n protected registerBuiltinAttributes() {\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3], vertex[4]];\n },\n },\n });\n }\n}\n"],"file":"plane.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/Geometry/models/plane.ts"],"names":["PlaneModel","layer","getLayerConfig","width","height","widthSegments","heightSegments","center","terrainTexture","initPlane","indices","positions","loadTerrainTexture","vertices","size","lng","lat","widthHalf","heightHalf","gridX","Math","floor","gridY","gridX1","gridY1","segmentWidth","segmentHeight","iy","y","ix","x","mapService","version","Version","lngLatToCoord","a","b","push","c","d","opacity","mapTexture","terrainClipHeight","texture","destroy","updateTexture","u_opacity","u_mapFlag","u_terrainClipHeight","u_texture","terrainImage","mask","maskInside","createTexture2D","rendererService","buildLayerModel","moduleName","vertexShader","planeVert","fragmentShader","planeFrag","triangulation","planeGeometryTriangulation","primitive","gl","TRIANGLES","depth","enable","blend","getBlend","stencil","cull","face","BACK","initModels","options","oldwidthSegments","oldheightSegments","oldwidth","oldheight","style","undefined","oldFeatures","getEncodedData","res","styleAttributeService","createAttributesAndIndices","img","Image","crossOrigin","onload","data","wrapS","CLAMP_TO_EDGE","wrapT","layerService","updateLayerRenderList","renderLayers","src","canvas","document","createElement","ctx","getContext","drawImage","imageData","getImageData","image","rgb2height","imgWidth","imgHeight","widthStep","heihgtStep","imgIndexY","imgLen","imgIndexX","imgDataIndex","r","g","z","modelData","updateModelData","terrainImageLoaded","translateVertex","setTimeout","emit","properties","type","minimum","maximum","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","FLOAT","update","feature","featureIdx","vertex","attributeIdx","BaseModel"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IAttrubuteAndElements,\n IEncodeFeature,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\nimport { Version } from '@antv/l7-maps';\nimport { getMask, isMini } from '@antv/l7-utils';\n// import { mat4, vec3 } from 'gl-matrix';\nimport BaseModel from '../../core/BaseModel';\nimport { IGeometryLayerStyleOptions } from '../../core/interface';\nimport planeFrag from '../shaders/plane_frag.glsl';\nimport planeVert from '../shaders/plane_vert.glsl';\n\nexport default class PlaneModel extends BaseModel {\n protected texture: ITexture2D;\n protected terrainImage: HTMLImageElement;\n protected terrainImageLoaded: boolean = false;\n protected mapTexture: string | undefined;\n\n public initPlane(\n width = 1,\n height = 1,\n widthSegments = 1,\n heightSegments = 1,\n lng = 120,\n lat = 30,\n ) {\n // https://github.com/mrdoob/three.js/blob/dev/src/geometries/PlaneGeometry.js\n const widthHalf = width / 2;\n const heightHalf = height / 2;\n\n const gridX = Math.floor(widthSegments);\n const gridY = Math.floor(heightSegments);\n\n const gridX1 = gridX + 1;\n const gridY1 = gridY + 1;\n\n const segmentWidth = width / gridX;\n const segmentHeight = height / gridY;\n\n const indices = [];\n const positions = [];\n\n for (let iy = 0; iy < gridY1; iy++) {\n const y = iy * segmentHeight - heightHalf;\n\n for (let ix = 0; ix < gridX1; ix++) {\n const x = ix * segmentWidth - widthHalf;\n if (this.mapService.version === Version['GAODE2.x']) {\n // @ts-ignore\n const [a, b] = this.mapService.lngLatToCoord([x + lng, -y + lat]) as [\n number,\n number,\n ];\n positions.push(a, b, 0);\n } else {\n positions.push(x + lng, -y + lat, 0);\n }\n\n positions.push(ix / gridX);\n positions.push(1 - iy / gridY);\n }\n }\n\n for (let iy = 0; iy < gridY; iy++) {\n for (let ix = 0; ix < gridX; ix++) {\n const a = ix + gridX1 * iy;\n const b = ix + gridX1 * (iy + 1);\n const c = ix + 1 + gridX1 * (iy + 1);\n const d = ix + 1 + gridX1 * iy;\n\n indices.push(a, b, d);\n indices.push(b, c, d);\n }\n }\n\n return { indices, positions };\n }\n\n public planeGeometryTriangulation = () => {\n const {\n width = 1,\n height = 1,\n widthSegments = 1,\n heightSegments = 1,\n center = [120, 30],\n terrainTexture,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n const { indices, positions } = this.initPlane(\n width,\n height,\n widthSegments,\n heightSegments,\n ...center,\n );\n if (terrainTexture) {\n // 存在地形贴图的时候会根据地形贴图对顶点进行偏移\n this.loadTerrainTexture(positions, indices);\n }\n\n return {\n vertices: positions,\n indices,\n size: 5,\n };\n };\n\n public getUninforms(): IModelUniform {\n const {\n opacity,\n mapTexture,\n terrainClipHeight = 0,\n terrainTexture,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n if (this.mapTexture !== mapTexture) {\n this.mapTexture = mapTexture;\n this.texture?.destroy();\n this.updateTexture(mapTexture);\n }\n return {\n u_opacity: opacity || 1,\n u_mapFlag: mapTexture ? 1 : 0,\n u_terrainClipHeight: terrainTexture ? terrainClipHeight : -1,\n u_texture: this.texture,\n };\n }\n\n public clearModels(): void {\n // @ts-ignore\n this.terrainImage = null;\n this.texture?.destroy();\n }\n\n public initModels() {\n const {\n mask = false,\n maskInside = true,\n mapTexture,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n this.mapTexture = mapTexture;\n\n const { createTexture2D } = this.rendererService;\n this.texture = createTexture2D({\n height: 0,\n width: 0,\n });\n\n this.updateTexture(mapTexture);\n return [\n this.layer.buildLayerModel({\n moduleName: 'geometry_plane',\n vertexShader: planeVert,\n fragmentShader: planeFrag,\n triangulation: this.planeGeometryTriangulation,\n primitive: gl.TRIANGLES,\n // primitive: gl.LINES,\n depth: { enable: true },\n blend: this.getBlend(),\n stencil: getMask(mask, maskInside),\n cull: {\n enable: true,\n face: gl.BACK, // gl.FRONT | gl.BACK;\n },\n }),\n ];\n }\n\n public buildModels() {\n return this.initModels();\n }\n\n public createModelData(options?: any) {\n if (options) {\n const {\n widthSegments: oldwidthSegments,\n heightSegments: oldheightSegments,\n width: oldwidth,\n height: oldheight,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n const {\n widthSegments,\n heightSegments,\n width,\n height,\n } = options as IGeometryLayerStyleOptions;\n this.layer.style({\n widthSegments:\n widthSegments !== undefined ? widthSegments : oldwidthSegments,\n heightSegments:\n heightSegments !== undefined ? heightSegments : oldheightSegments,\n width: width !== undefined ? width : oldwidth,\n height: height !== undefined ? height : oldheight,\n });\n }\n const oldFeatures = this.layer.getEncodedData();\n const res = this.styleAttributeService.createAttributesAndIndices(\n oldFeatures,\n this.planeGeometryTriangulation,\n );\n return res;\n }\n\n public updateTexture(mapTexture: string | undefined): void {\n const { createTexture2D } = this.rendererService;\n\n if (mapTexture) {\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n this.texture = createTexture2D({\n data: img,\n width: img.width,\n height: img.height,\n wrapS: gl.CLAMP_TO_EDGE,\n wrapT: gl.CLAMP_TO_EDGE,\n });\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n };\n img.src = mapTexture;\n } else {\n this.texture = createTexture2D({\n width: 0,\n height: 0,\n });\n }\n }\n\n protected getImageData(img: HTMLImageElement) {\n const canvas: HTMLCanvasElement = document.createElement('canvas');\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n const { width, height } = img;\n canvas.width = width;\n canvas.height = height;\n\n ctx.drawImage(img, 0, 0, width, height);\n const imageData = ctx.getImageData(0, 0, width, height);\n\n return imageData;\n }\n\n protected translateVertex(\n positions: number[],\n indices: number[],\n image: HTMLImageElement,\n widthSegments: number,\n heightSegments: number,\n rgb2height: (r: number, g: number, b: number) => number,\n ) {\n const imgWidth = image.width;\n const imgHeight = image.height;\n const imageData = this.getImageData(image).data;\n\n const gridX = Math.floor(widthSegments);\n const gridY = Math.floor(heightSegments);\n\n const gridX1 = gridX + 1;\n const gridY1 = gridY + 1;\n\n const widthStep = imgWidth / gridX;\n const heihgtStep = imgHeight / gridY;\n\n for (let iy = 0; iy < gridY1; iy++) {\n const imgIndexY = Math.floor(iy * heihgtStep);\n const imgLen = imgIndexY * imgWidth;\n\n for (let ix = 0; ix < gridX1; ix++) {\n const imgIndexX = Math.floor(ix * widthStep);\n const imgDataIndex = (imgLen + imgIndexX) * 4;\n\n const r = imageData[imgDataIndex];\n const g = imageData[imgDataIndex + 1];\n const b = imageData[imgDataIndex + 2];\n\n const z = (iy * gridX1 + ix) * 5 + 2;\n positions[z] = rgb2height(r, g, b);\n }\n }\n\n const oldFeatures = this.layer.getEncodedData();\n const modelData = this.styleAttributeService.createAttributesAndIndices(\n oldFeatures,\n () => {\n return {\n vertices: positions,\n indices,\n size: 5,\n };\n },\n );\n this.layer.updateModelData(modelData as IAttrubuteAndElements);\n this.layerService.renderLayers();\n }\n\n /**\n * load terrain texture & offset attribute z\n */\n protected loadTerrainTexture(positions: number[], indices: number[]) {\n const {\n widthSegments = 1,\n heightSegments = 1,\n terrainTexture,\n rgb2height = (r: number, g: number, b: number) => r + g + b,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n if (this.terrainImage) {\n // 若当前已经存在 image,直接进行偏移计算(LOD)\n if (this.terrainImageLoaded) {\n this.translateVertex(\n positions,\n indices,\n this.terrainImage,\n widthSegments,\n heightSegments,\n rgb2height,\n );\n } else {\n this.terrainImage.onload = () => {\n this.translateVertex(\n positions,\n indices,\n this.terrainImage,\n widthSegments,\n heightSegments,\n rgb2height,\n );\n };\n }\n } else {\n // 加载地形贴图、根据地形贴图对 planeGeometry 进行偏移\n const terrainImage = new Image();\n this.terrainImage = terrainImage;\n terrainImage.crossOrigin = 'anonymous';\n terrainImage.onload = () => {\n this.terrainImageLoaded = true;\n // 图片加载完,触发事件,可以进行地形图的顶点计算存储\n setTimeout(() => this.layer.emit('terrainImageLoaded', null));\n this.translateVertex(\n positions,\n indices,\n terrainImage,\n widthSegments,\n heightSegments,\n rgb2height,\n );\n };\n terrainImage.src = terrainTexture as string;\n }\n }\n\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n\n protected registerBuiltinAttributes() {\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3], vertex[4]];\n },\n },\n });\n }\n}\n"],"file":"plane.js"}
|
|
@@ -150,7 +150,9 @@ var CanvaModel = function (_BaseModel) {
|
|
|
150
150
|
key: "clearModels",
|
|
151
151
|
value: function clearModels() {
|
|
152
152
|
if (this.canvas) {
|
|
153
|
-
|
|
153
|
+
var _this$mapService$getC;
|
|
154
|
+
|
|
155
|
+
(_this$mapService$getC = this.mapService.getContainer()) === null || _this$mapService$getC === void 0 ? void 0 : _this$mapService$getC.removeChild(this.canvas);
|
|
154
156
|
this.canvas = null;
|
|
155
157
|
}
|
|
156
158
|
|
|
@@ -173,7 +175,7 @@ var CanvaModel = function (_BaseModel) {
|
|
|
173
175
|
}, {
|
|
174
176
|
key: "initCanvas",
|
|
175
177
|
value: function initCanvas() {
|
|
176
|
-
var _this$mapService$
|
|
178
|
+
var _this$mapService$getC2;
|
|
177
179
|
|
|
178
180
|
var _ref4 = this.layer.getLayerConfig(),
|
|
179
181
|
zIndex = _ref4.zIndex;
|
|
@@ -200,7 +202,7 @@ var CanvaModel = function (_BaseModel) {
|
|
|
200
202
|
canvas.style.top = '0';
|
|
201
203
|
canvas.style.left = '0';
|
|
202
204
|
canvas.style.zIndex = zIndex + '';
|
|
203
|
-
(_this$mapService$
|
|
205
|
+
(_this$mapService$getC2 = this.mapService.getContainer()) === null || _this$mapService$getC2 === void 0 ? void 0 : _this$mapService$getC2.appendChild(canvas);
|
|
204
206
|
var ctx = canvas.getContext('2d');
|
|
205
207
|
this.ctx = ctx;
|
|
206
208
|
}
|