-
Notifications
You must be signed in to change notification settings - Fork 625
/
json.ts
51 lines (51 loc) · 1.27 KB
/
json.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// @ts-ignore
import {
IJsonData,
IJsonItem,
IParseDataItem,
IParserCfg,
IParserData,
} from '@antv/l7-core';
// @ts-ignore
import rewind from '@mapbox/geojson-rewind';
export default function json(data: IJsonData, cfg: IParserCfg): IParserData {
const { x, y, x1, y1, coordinates } = cfg;
const resultData: IParseDataItem[] = [];
data.forEach((col: IJsonItem, featureIndex: number) => {
let coords = [];
if (x && y) {
coords = [parseFloat(col[x]), parseFloat(col[y])];
} // 点数据
if (x && y && x1 && y1) {
// 弧线 或者线段
coords = [
[parseFloat(col[x]), parseFloat(col[y])],
[parseFloat(col[x1]), parseFloat(col[y1])],
];
}
if (coordinates) {
let type = 'Polygon';
if (!Array.isArray(coordinates[0])) {
type = 'Point';
}
if (Array.isArray(coordinates[0]) && !Array.isArray(coordinates[0][0])) {
type = 'LineString';
}
const geometry = {
type,
coordinates: [...col[coordinates]],
};
rewind(geometry, true);
coords = geometry.coordinates;
}
const dataItem = {
...col,
_id: featureIndex,
coordinates: coords,
};
resultData.push(dataItem);
});
return {
dataArray: resultData,
};
}