mirror of https://gitee.com/antv-l7/antv-l7
Merge branch 'master' of https://github.com/antvis/L7
This commit is contained in:
commit
83083c43d3
|
@ -81,3 +81,4 @@ packages/l7/package_bak.json
|
||||||
stories/Test
|
stories/Test
|
||||||
packages/draw/node_modules/@turf
|
packages/draw/node_modules/@turf
|
||||||
packages/district/src/data
|
packages/district/src/data
|
||||||
|
yarn.lock
|
|
@ -1,5 +1,6 @@
|
||||||
# L7
|
# L7
|
||||||
|
|
||||||
|
.
|
||||||
[![travis ci](https://travis-ci.com/antvis/L7.svg?branch=master)](https://travis-ci.com/antvis/L7) [![](https://flat.badgen.net/npm/v/@antv/l7?icon=npm)](https://www.npmjs.com/package/@antv/l7) ![最近提交](https://badgen.net/github/last-commit/antvis/L7)
|
[![travis ci](https://travis-ci.com/antvis/L7.svg?branch=master)](https://travis-ci.com/antvis/L7) [![](https://flat.badgen.net/npm/v/@antv/l7?icon=npm)](https://www.npmjs.com/package/@antv/l7) ![最近提交](https://badgen.net/github/last-commit/antvis/L7)
|
||||||
|
|
||||||
Large-scale WebGL-powered Geospatial data visualization analysis framework.
|
Large-scale WebGL-powered Geospatial data visualization analysis framework.
|
||||||
|
|
|
@ -72,6 +72,7 @@ module.exports = [
|
||||||
commonjs({
|
commonjs({
|
||||||
namedExports: {
|
namedExports: {
|
||||||
eventemitter3: [ 'EventEmitter' ],
|
eventemitter3: [ 'EventEmitter' ],
|
||||||
|
inversify: ['inject','injectable','postConstruct','Container','decorate','interfaces'],
|
||||||
// @see https://github.com/rollup/rollup-plugin-commonjs/issues/266
|
// @see https://github.com/rollup/rollup-plugin-commonjs/issues/266
|
||||||
lodash: [
|
lodash: [
|
||||||
'isNil',
|
'isNil',
|
||||||
|
@ -84,7 +85,10 @@ module.exports = [
|
||||||
'isNumber',
|
'isNumber',
|
||||||
'merge'
|
'merge'
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
dynamicRequireTargets: [
|
||||||
|
'node_modules/inversify/lib/syntax/binding_{on,when}_syntax.js',
|
||||||
|
],
|
||||||
}),
|
}),
|
||||||
babel({
|
babel({
|
||||||
extensions: [ '.js', '.ts' ]
|
extensions: [ '.js', '.ts' ]
|
||||||
|
|
|
@ -55,7 +55,7 @@ const scene = new Scene({
|
||||||
id: 'map',
|
id: 'map',
|
||||||
map: new GaodeMap({
|
map: new GaodeMap({
|
||||||
pitch: 35.210526315789465,
|
pitch: 35.210526315789465,
|
||||||
style: 'dark',
|
mapStyle: 'dark',
|
||||||
center: [ 104.288144, 31.239692 ],
|
center: [ 104.288144, 31.239692 ],
|
||||||
zoom: 4.4
|
zoom: 4.4
|
||||||
})
|
})
|
||||||
|
|
|
@ -61,7 +61,7 @@ const scene = new Scene({
|
||||||
id: 'map',
|
id: 'map',
|
||||||
map: new GaodeMap({
|
map: new GaodeMap({
|
||||||
pitch: 35.210526315789465,
|
pitch: 35.210526315789465,
|
||||||
style: 'dark',
|
mapStyle: 'dark',
|
||||||
center: [ 104.288144, 31.239692 ],
|
center: [ 104.288144, 31.239692 ],
|
||||||
zoom: 4.4
|
zoom: 4.4
|
||||||
})
|
})
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
"message": "chore: publish"
|
"message": "chore: publish"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"version": "2.3.9",
|
"version": "2.3.10",
|
||||||
"npmClient": "yarn",
|
"npmClient": "yarn",
|
||||||
"useWorkspaces": true,
|
"useWorkspaces": true,
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
|
|
|
@ -188,7 +188,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"d3-array": "1"
|
"d3-array": "1",
|
||||||
|
"monaco-editor-webpack-plugin": "2.0.0",
|
||||||
|
"monaco-editor": "0.21.0"
|
||||||
},
|
},
|
||||||
"tnpm": {
|
"tnpm": {
|
||||||
"mode": "yarn"
|
"mode": "yarn"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@antv/l7-component",
|
"name": "@antv/l7-component",
|
||||||
"version": "2.3.9",
|
"version": "2.3.10",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"module": "es/index.js",
|
"module": "es/index.js",
|
||||||
|
@ -25,8 +25,8 @@
|
||||||
"author": "lzxue",
|
"author": "lzxue",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@antv/l7-core": "2.3.9",
|
"@antv/l7-core": "^2.3.10",
|
||||||
"@antv/l7-utils": "2.3.9",
|
"@antv/l7-utils": "^2.3.10",
|
||||||
"@babel/runtime": "^7.7.7",
|
"@babel/runtime": "^7.7.7",
|
||||||
"eventemitter3": "^4.0.0",
|
"eventemitter3": "^4.0.0",
|
||||||
"inversify": "^5.0.1",
|
"inversify": "^5.0.1",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@antv/l7-core",
|
"name": "@antv/l7-core",
|
||||||
"version": "2.3.9",
|
"version": "2.3.10",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"module": "es/index.js",
|
"module": "es/index.js",
|
||||||
|
@ -24,7 +24,7 @@
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@antv/async-hook": "^2.1.0",
|
"@antv/async-hook": "^2.1.0",
|
||||||
"@antv/l7-utils": "2.3.9",
|
"@antv/l7-utils": "^2.3.10",
|
||||||
"@babel/runtime": "^7.7.7",
|
"@babel/runtime": "^7.7.7",
|
||||||
"@mapbox/tiny-sdf": "^1.1.1",
|
"@mapbox/tiny-sdf": "^1.1.1",
|
||||||
"ajv": "^6.10.2",
|
"ajv": "^6.10.2",
|
||||||
|
|
|
@ -38,3 +38,17 @@ float pixelDistance(vec2 from, vec2 to) {
|
||||||
vec2 b1 = ProjectFlat(to);
|
vec2 b1 = ProjectFlat(to);
|
||||||
return distance(a1, b1);
|
return distance(a1, b1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vec2 customProject(vec2 lnglat) {
|
||||||
|
float t = lnglat.x;
|
||||||
|
float e = lnglat.y;
|
||||||
|
float Sm = 180.0 / PI;
|
||||||
|
float Tm = 6378137.0;
|
||||||
|
float Rm = PI / 180.0;
|
||||||
|
float r = 85.0511287798;
|
||||||
|
e = max(min(r, e), -r);
|
||||||
|
t *= Rm;
|
||||||
|
e *= Rm;
|
||||||
|
e = log(tan(PI / 4.0 + e / 2.0));
|
||||||
|
return vec2(t * Tm, e * Tm);
|
||||||
|
}
|
|
@ -42,13 +42,7 @@ vec2 project_mercator(vec2 lnglat) {
|
||||||
}
|
}
|
||||||
|
|
||||||
float project_scale(float meters) {
|
float project_scale(float meters) {
|
||||||
if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) {
|
return meters * u_PixelsPerMeter.z;
|
||||||
// 因为高德2.0和1.x的相机控制方向相反,而u_PixelsPerMeter的计算与此相关(计算结果也相反)
|
|
||||||
// 可通过 shaderUniformPlugin -> CoordinateSystemService -> project 的顺序查看区别
|
|
||||||
return meters * u_PixelsPerMeter.z * -1.0;
|
|
||||||
} else {
|
|
||||||
return meters * u_PixelsPerMeter.z;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -117,6 +111,7 @@ vec4 project_position(vec4 position) {
|
||||||
// (position.xy * WORLD_SCALE * u_ZoomScale) * vec2(1., -1.),
|
// (position.xy * WORLD_SCALE * u_ZoomScale) * vec2(1., -1.),
|
||||||
// project_scale(position.z),
|
// project_scale(position.z),
|
||||||
// position.w);
|
// position.w);
|
||||||
|
|
||||||
return vec4(
|
return vec4(
|
||||||
position.xy,
|
position.xy,
|
||||||
project_scale(position.z),
|
project_scale(position.z),
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@antv/l7",
|
"name": "@antv/l7",
|
||||||
"version": "2.3.9",
|
"version": "2.3.10",
|
||||||
"description": "A Large-scale WebGL-powered Geospatial Data Visualization",
|
"description": "A Large-scale WebGL-powered Geospatial Data Visualization",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"module": "es/index.js",
|
"module": "es/index.js",
|
||||||
|
@ -25,12 +25,12 @@
|
||||||
"author": "antv",
|
"author": "antv",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@antv/l7-component": "2.3.9",
|
"@antv/l7-component": "^2.3.10",
|
||||||
"@antv/l7-core": "2.3.9",
|
"@antv/l7-core": "^2.3.10",
|
||||||
"@antv/l7-layers": "2.3.9",
|
"@antv/l7-layers": "^2.3.10",
|
||||||
"@antv/l7-maps": "2.3.9",
|
"@antv/l7-maps": "^2.3.10",
|
||||||
"@antv/l7-scene": "2.3.9",
|
"@antv/l7-scene": "^2.3.10",
|
||||||
"@antv/l7-utils": "2.3.9",
|
"@antv/l7-utils": "^2.3.10",
|
||||||
"@babel/runtime": "^7.7.7"
|
"@babel/runtime": "^7.7.7"
|
||||||
},
|
},
|
||||||
"gitHead": "20154fe30d512024b03ac5e40f77731bc0580bb0",
|
"gitHead": "20154fe30d512024b03ac5e40f77731bc0580bb0",
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
const version = '2.3.7';
|
const version = '2.3.9';
|
||||||
export { version };
|
export { version };
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@antv/l7-layers",
|
"name": "@antv/l7-layers",
|
||||||
"version": "2.3.9",
|
"version": "2.3.10",
|
||||||
"description": "L7's collection of built-in layers",
|
"description": "L7's collection of built-in layers",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"module": "es/index.js",
|
"module": "es/index.js",
|
||||||
|
@ -24,10 +24,10 @@
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@antv/async-hook": "^2.1.0",
|
"@antv/async-hook": "^2.1.0",
|
||||||
"@antv/l7-core": "2.3.9",
|
"@antv/l7-core": "^2.3.10",
|
||||||
"@antv/l7-layers": "2.3.9",
|
"@antv/l7-layers": "^2.3.10",
|
||||||
"@antv/l7-source": "2.3.9",
|
"@antv/l7-source": "^2.3.10",
|
||||||
"@antv/l7-utils": "2.3.9",
|
"@antv/l7-utils": "^2.3.10",
|
||||||
"@babel/runtime": "^7.7.7",
|
"@babel/runtime": "^7.7.7",
|
||||||
"@mapbox/martini": "^0.2.0",
|
"@mapbox/martini": "^0.2.0",
|
||||||
"@turf/meta": "^6.0.2",
|
"@turf/meta": "^6.0.2",
|
||||||
|
|
|
@ -14,6 +14,7 @@ attribute vec2 a_Uv;
|
||||||
varying vec2 v_texCoord;
|
varying vec2 v_texCoord;
|
||||||
|
|
||||||
varying vec4 v_Color;
|
varying vec4 v_Color;
|
||||||
|
uniform mat4 u_Mvp;
|
||||||
|
|
||||||
#pragma include "projection"
|
#pragma include "projection"
|
||||||
#pragma include "light"
|
#pragma include "light"
|
||||||
|
@ -23,7 +24,12 @@ void main() {
|
||||||
vec4 pos = vec4(a_Position.xy, a_Position.z * a_Size, 1.0);
|
vec4 pos = vec4(a_Position.xy, a_Position.z * a_Size, 1.0);
|
||||||
vec4 project_pos = project_position(pos);
|
vec4 project_pos = project_position(pos);
|
||||||
v_texCoord = a_Uv;
|
v_texCoord = a_Uv;
|
||||||
gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));
|
// gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));
|
||||||
|
if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x
|
||||||
|
gl_Position = u_Mvp * (vec4(project_pos.xyz, 1.0));
|
||||||
|
} else {
|
||||||
|
gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));
|
||||||
|
}
|
||||||
|
|
||||||
float lightWeight = calc_lighting(pos);
|
float lightWeight = calc_lighting(pos);
|
||||||
// v_Color = a_Color;
|
// v_Color = a_Color;
|
||||||
|
|
|
@ -39,6 +39,7 @@ export function PointFillTriangulation(feature: IEncodeFeature) {
|
||||||
*/
|
*/
|
||||||
export function PointExtrudeTriangulation(feature: IEncodeFeature) {
|
export function PointExtrudeTriangulation(feature: IEncodeFeature) {
|
||||||
const { shape } = feature;
|
const { shape } = feature;
|
||||||
|
// console.log('PointExtrudeTriangulation', feature)
|
||||||
const { positions, index, normals } = getGeometry(
|
const { positions, index, normals } = getGeometry(
|
||||||
shape as ShapeType3D,
|
shape as ShapeType3D,
|
||||||
false,
|
false,
|
||||||
|
@ -244,6 +245,11 @@ export function LineArcTriangulation(feature: IEncodeFeature) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建热力图密度图的顶点
|
||||||
|
* @param feature
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
export function HeatmapTriangulation(feature: IEncodeFeature) {
|
export function HeatmapTriangulation(feature: IEncodeFeature) {
|
||||||
const coordinates = feature.coordinates as number[];
|
const coordinates = feature.coordinates as number[];
|
||||||
if (coordinates.length === 2) {
|
if (coordinates.length === 2) {
|
||||||
|
@ -286,6 +292,7 @@ function getGeometry(shape: ShapeType3D, needFlat = false): IExtrudeGeomety {
|
||||||
: geometryShape.cylinder();
|
: geometryShape.cylinder();
|
||||||
const geometry = extrude_PolygonNormal([path], needFlat);
|
const geometry = extrude_PolygonNormal([path], needFlat);
|
||||||
GeometryCache[shape] = geometry;
|
GeometryCache[shape] = geometry;
|
||||||
|
// console.log('geometry', geometry)
|
||||||
return geometry;
|
return geometry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,8 @@ export default class GridModel extends BaseModel {
|
||||||
},
|
},
|
||||||
size: 3,
|
size: 3,
|
||||||
update: (feature: IEncodeFeature, featureIdx: number) => {
|
update: (feature: IEncodeFeature, featureIdx: number) => {
|
||||||
const coordinates = feature.coordinates as number[];
|
// const coordinates = feature.coordinates as number[];
|
||||||
|
const coordinates = (feature.version==='GAODE2.x'?feature.originCoordinates:feature.coordinates) as number[];
|
||||||
return [coordinates[0], coordinates[1], 0];
|
return [coordinates[0], coordinates[1], 0];
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -5,11 +5,11 @@ import {
|
||||||
IModel,
|
IModel,
|
||||||
IModelUniform,
|
IModelUniform,
|
||||||
} from '@antv/l7-core';
|
} from '@antv/l7-core';
|
||||||
|
import { aProjectFlat, Satistics, unProjectFlat } from '@antv/l7-utils';
|
||||||
import BaseModel from '../../core/BaseModel';
|
import BaseModel from '../../core/BaseModel';
|
||||||
import { PointExtrudeTriangulation } from '../../core/triangulation';
|
import { PointExtrudeTriangulation } from '../../core/triangulation';
|
||||||
import heatmapGrid3dVert from '../shaders/hexagon_3d_vert.glsl';
|
import heatmapGrid3dVert from '../shaders/hexagon_3d_vert.glsl';
|
||||||
import heatmapGridFrag from '../shaders/hexagon_frag.glsl';
|
import heatmapGridFrag from '../shaders/hexagon_frag.glsl';
|
||||||
|
|
||||||
interface IHeatMapLayerStyleOptions {
|
interface IHeatMapLayerStyleOptions {
|
||||||
opacity: number;
|
opacity: number;
|
||||||
coverage: number;
|
coverage: number;
|
||||||
|
@ -112,7 +112,9 @@ export default class Grid3DModel extends BaseModel {
|
||||||
},
|
},
|
||||||
size: 3,
|
size: 3,
|
||||||
update: (feature: IEncodeFeature, featureIdx: number) => {
|
update: (feature: IEncodeFeature, featureIdx: number) => {
|
||||||
const coordinates = feature.coordinates as number[];
|
const coordinates = (feature.version==='GAODE2.x'?feature.originCoordinates:feature.coordinates) as number[];
|
||||||
|
// const coordinates = feature.coordinates as number[];
|
||||||
|
// const coordinates = feature.originCoordinates as number[];
|
||||||
return [coordinates[0], coordinates[1], 0];
|
return [coordinates[0], coordinates[1], 0];
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -5,7 +5,7 @@ import {
|
||||||
IFramebuffer,
|
IFramebuffer,
|
||||||
IModel,
|
IModel,
|
||||||
IModelUniform,
|
IModelUniform,
|
||||||
ITexture2D,
|
ITexture2D
|
||||||
} from '@antv/l7-core';
|
} from '@antv/l7-core';
|
||||||
import { generateColorRamp, IColorRamp } from '@antv/l7-utils';
|
import { generateColorRamp, IColorRamp } from '@antv/l7-utils';
|
||||||
import { mat4 } from 'gl-matrix';
|
import { mat4 } from 'gl-matrix';
|
||||||
|
@ -18,6 +18,7 @@ import heatmapFrag from '../shaders/heatmap_framebuffer_frag.glsl';
|
||||||
import heatmapVert from '../shaders/heatmap_framebuffer_vert.glsl';
|
import heatmapVert from '../shaders/heatmap_framebuffer_vert.glsl';
|
||||||
import heatmapColorVert from '../shaders/heatmap_vert.glsl';
|
import heatmapColorVert from '../shaders/heatmap_vert.glsl';
|
||||||
import { heatMap3DTriangulation } from '../triangulation';
|
import { heatMap3DTriangulation } from '../triangulation';
|
||||||
|
import { inject, injectable } from 'inversify';
|
||||||
interface IHeatMapLayerStyleOptions {
|
interface IHeatMapLayerStyleOptions {
|
||||||
opacity: number;
|
opacity: number;
|
||||||
intensity: number;
|
intensity: number;
|
||||||
|
@ -25,8 +26,9 @@ interface IHeatMapLayerStyleOptions {
|
||||||
angle: number;
|
angle: number;
|
||||||
rampColors: IColorRamp;
|
rampColors: IColorRamp;
|
||||||
}
|
}
|
||||||
|
@injectable()
|
||||||
export default class HeatMapModel extends BaseModel {
|
export default class HeatMapModel extends BaseModel {
|
||||||
|
|
||||||
protected texture: ITexture2D;
|
protected texture: ITexture2D;
|
||||||
protected colorTexture: ITexture2D;
|
protected colorTexture: ITexture2D;
|
||||||
protected heatmapFramerBuffer: IFramebuffer;
|
protected heatmapFramerBuffer: IFramebuffer;
|
||||||
|
|
|
@ -65,7 +65,10 @@ export default class HexagonModel extends BaseModel {
|
||||||
},
|
},
|
||||||
size: 3,
|
size: 3,
|
||||||
update: (feature: IEncodeFeature, featureIdx: number) => {
|
update: (feature: IEncodeFeature, featureIdx: number) => {
|
||||||
|
// const coordinates = (feature.verison==='GAODE2.x'?feature.originoordinates:feature.coordinates) as number[];
|
||||||
|
|
||||||
const coordinates = feature.coordinates as number[];
|
const coordinates = feature.coordinates as number[];
|
||||||
|
// const coordinates = feature.originCoordinates as number[];
|
||||||
return [coordinates[0], coordinates[1], 0];
|
return [coordinates[0], coordinates[1], 0];
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -9,8 +9,11 @@ uniform vec2 u_radius;
|
||||||
uniform float u_coverage: 0.9;
|
uniform float u_coverage: 0.9;
|
||||||
uniform float u_angle: 0;
|
uniform float u_angle: 0;
|
||||||
uniform mat4 u_ModelMatrix;
|
uniform mat4 u_ModelMatrix;
|
||||||
|
uniform mat4 u_Mvp;
|
||||||
varying vec4 v_color;
|
varying vec4 v_color;
|
||||||
|
|
||||||
|
uniform vec2 u_SceneCenterMKT;
|
||||||
|
|
||||||
#pragma include "projection"
|
#pragma include "projection"
|
||||||
#pragma include "project"
|
#pragma include "project"
|
||||||
#pragma include "picking"
|
#pragma include "picking"
|
||||||
|
@ -20,9 +23,20 @@ void main() {
|
||||||
|
|
||||||
mat2 rotationMatrix = mat2(cos(u_angle), sin(u_angle), -sin(u_angle), cos(u_angle));
|
mat2 rotationMatrix = mat2(cos(u_angle), sin(u_angle), -sin(u_angle), cos(u_angle));
|
||||||
vec2 offset = a_Position.xy * u_radius * rotationMatrix * u_coverage ;
|
vec2 offset = a_Position.xy * u_radius * rotationMatrix * u_coverage ;
|
||||||
vec2 lnglat = unProjectFlat(a_Pos.xy + offset);
|
// vec2 lnglat = unProjectFlat(a_Pos.xy + offset);
|
||||||
vec4 project_pos = project_position(vec4(lnglat, 0, 1.0));
|
// vec4 project_pos = project_position(vec4(lnglat, 0, 1.0));
|
||||||
gl_Position = project_common_position_to_clipspace(project_pos);
|
// gl_Position = project_common_position_to_clipspace(project_pos);
|
||||||
|
|
||||||
|
if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x
|
||||||
|
vec2 lnglat = unProjectFlat(a_Pos.xy + offset);
|
||||||
|
vec2 customLnglat = customProject(lnglat) - u_SceneCenterMKT; // 将经纬度转换为高德2.0需要的平面坐标
|
||||||
|
vec4 project_pos = project_position(vec4(customLnglat, 0, 1.0));
|
||||||
|
gl_Position = u_Mvp * (project_pos);
|
||||||
|
} else {
|
||||||
|
vec2 lnglat = unProjectFlat(a_Pos.xy + offset);
|
||||||
|
vec4 project_pos = project_position(vec4(lnglat, 0, 1.0));
|
||||||
|
gl_Position = project_common_position_to_clipspace(project_pos);
|
||||||
|
}
|
||||||
|
|
||||||
setPickingColor(a_PickingColor);
|
setPickingColor(a_PickingColor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,5 +11,4 @@ void main(){
|
||||||
gl_FragColor = color;
|
gl_FragColor = color;
|
||||||
// gl_FragColor.a = color.a * smoothstep(0.1,0.2,intensity)* u_opacity;
|
// gl_FragColor.a = color.a * smoothstep(0.1,0.2,intensity)* u_opacity;
|
||||||
gl_FragColor.a = color.a * smoothstep(0.,0.1,intensity) * u_opacity;
|
gl_FragColor.a = color.a * smoothstep(0.,0.1,intensity) * u_opacity;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ uniform mat4 u_InverseViewProjectionMatrix;
|
||||||
uniform mat4 u_ViewProjectionMatrixUncentered;
|
uniform mat4 u_ViewProjectionMatrixUncentered;
|
||||||
varying float v_intensity;
|
varying float v_intensity;
|
||||||
|
|
||||||
|
|
||||||
vec2 toBezier(float t, vec2 P0, vec2 P1, vec2 P2, vec2 P3) {
|
vec2 toBezier(float t, vec2 P0, vec2 P1, vec2 P2, vec2 P3) {
|
||||||
float t2 = t * t;
|
float t2 = t * t;
|
||||||
float one_minus_t = 1.0 - t;
|
float one_minus_t = 1.0 - t;
|
||||||
|
@ -21,26 +22,25 @@ vec2 toBezier(float t, vec4 p){
|
||||||
void main() {
|
void main() {
|
||||||
v_texCoord = a_Uv;
|
v_texCoord = a_Uv;
|
||||||
|
|
||||||
vec2 pos =(a_Uv * vec2(2.0) - vec2(1.0));
|
vec2 pos = a_Uv * vec2(2.0) - vec2(1.0); // 将原本 0 -> 1 的 uv 转换为 -1 -> 1 的标准坐标空间(NDC)
|
||||||
|
|
||||||
|
vec4 p1 = vec4(pos, 0.0, 1.0); // x/y 平面上的点(z == 0)可以认为是三维上的点被投影到平面后的点
|
||||||
|
vec4 p2 = vec4(pos, 1.0, 1.0); // 平行于x/y平面、z==1 的平面上的点
|
||||||
|
|
||||||
vec4 p1 = vec4(pos, 0.0, 1.0);
|
vec4 inverseP1 = u_InverseViewProjectionMatrix * p1; // 根据视图投影矩阵的逆矩阵平面上的反算出三维空间中的点(p1平面上的点)
|
||||||
vec4 p2 = vec4(pos, 1.0, 1.0);
|
|
||||||
|
|
||||||
vec4 inverseP1 = u_InverseViewProjectionMatrix * p1;
|
|
||||||
vec4 inverseP2 = u_InverseViewProjectionMatrix * p2;
|
vec4 inverseP2 = u_InverseViewProjectionMatrix * p2;
|
||||||
|
|
||||||
inverseP1 = inverseP1 / inverseP1.w;
|
inverseP1 = inverseP1 / inverseP1.w; // 归一化操作(归一化后为世界坐标)
|
||||||
inverseP2 = inverseP2 / inverseP2.w;
|
inverseP2 = inverseP2 / inverseP2.w;
|
||||||
|
|
||||||
float zPos = (0.0 - inverseP1.z) / (inverseP2.z - inverseP1.z);
|
float zPos = (0.0 - inverseP1.z) / (inverseP2.z - inverseP1.z); // ??
|
||||||
vec4 position = inverseP1 + zPos * (inverseP2 - inverseP1);
|
vec4 position = inverseP1 + zPos * (inverseP2 - inverseP1);
|
||||||
|
|
||||||
vec4 b= vec4(0.5000, 0, 1, 0.5000);
|
vec4 b= vec4(0.5000, 0.0, 1.0, 0.5000);
|
||||||
float fh;
|
float fh;
|
||||||
|
|
||||||
v_intensity = texture2D(u_texture, v_texCoord).r;
|
v_intensity = texture2D(u_texture, v_texCoord).r;
|
||||||
fh = toBezier(v_intensity, b).y;
|
fh = toBezier(v_intensity, b).y;
|
||||||
gl_Position = u_ViewProjectionMatrixUncentered * vec4(position.xy, fh * project_pixel(50.), 1.0);
|
gl_Position = u_ViewProjectionMatrixUncentered * vec4(position.xy, fh * project_pixel(50.), 1.0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ uniform float u_radius;
|
||||||
varying vec2 v_extrude;
|
varying vec2 v_extrude;
|
||||||
varying float v_weight;
|
varying float v_weight;
|
||||||
uniform mat4 u_ModelMatrix;
|
uniform mat4 u_ModelMatrix;
|
||||||
|
uniform mat4 u_Mvp;
|
||||||
|
|
||||||
#define GAUSS_COEF 0.3989422804014327
|
#define GAUSS_COEF 0.3989422804014327
|
||||||
|
|
||||||
|
@ -24,5 +25,11 @@ void main(){
|
||||||
vec2 offset = project_pixel(v_extrude * u_radius);
|
vec2 offset = project_pixel(v_extrude * u_radius);
|
||||||
vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0));
|
vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0));
|
||||||
|
|
||||||
gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));
|
// gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));
|
||||||
|
|
||||||
|
if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x
|
||||||
|
gl_Position = u_Mvp * (vec4(project_pos.xy + offset, 0.0, 1.0));
|
||||||
|
} else {
|
||||||
|
gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,21 +11,54 @@ uniform vec2 u_radius;
|
||||||
uniform float u_coverage: 0.9;
|
uniform float u_coverage: 0.9;
|
||||||
uniform float u_angle: 0;
|
uniform float u_angle: 0;
|
||||||
uniform mat4 u_ModelMatrix;
|
uniform mat4 u_ModelMatrix;
|
||||||
|
uniform mat4 u_Mvp;
|
||||||
varying vec4 v_color;
|
varying vec4 v_color;
|
||||||
|
|
||||||
|
uniform vec2 u_SceneCenterMKT;
|
||||||
|
|
||||||
#pragma include "projection"
|
#pragma include "projection"
|
||||||
#pragma include "project"
|
#pragma include "project"
|
||||||
#pragma include "light"
|
#pragma include "light"
|
||||||
#pragma include "picking"
|
#pragma include "picking"
|
||||||
|
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
mat2 rotationMatrix = mat2(cos(u_angle), sin(u_angle), -sin(u_angle), cos(u_angle));
|
mat2 rotationMatrix = mat2(cos(u_angle), sin(u_angle), -sin(u_angle), cos(u_angle));
|
||||||
vec2 offset =(vec2(a_Position.xy * u_radius * rotationMatrix * u_coverage));
|
vec2 offset =(vec2(a_Position.xy * u_radius * rotationMatrix * u_coverage));
|
||||||
vec2 lnglat = unProjectFlat(a_Pos.xy + offset);
|
// vec2 lnglat = unProjectFlat(a_Pos.xy + offset); // 实际的经纬度
|
||||||
vec4 project_pos = project_position(vec4(lnglat, a_Position.z * a_Size, 1.0));
|
// vec2 lnglat = (a_Pos.xy + offset);
|
||||||
float lightWeight = calc_lighting(project_pos);
|
// vec4 project_pos = project_position(vec4(lnglat, a_Position.z * a_Size, 1.0));
|
||||||
v_color =vec4(a_Color.rgb*lightWeight, a_Color.w);
|
// gl_Position = project_common_position_to_clipspace(project_pos);
|
||||||
|
// float lightWeight = calc_lighting(project_pos);
|
||||||
|
// v_color =vec4(a_Color.rgb*lightWeight, a_Color.w);
|
||||||
|
|
||||||
|
if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x
|
||||||
|
// vec2 lnglat = (a_Pos.xy + offset);
|
||||||
|
// vec4 project_pos = project_position(vec4(lnglat, a_Position.z * a_Size, 1.0));
|
||||||
|
|
||||||
|
// float lightWeight = calc_lighting(project_pos);
|
||||||
|
// v_color =vec4(a_Color.rgb*lightWeight, a_Color.w);
|
||||||
|
|
||||||
|
// gl_Position = u_Mvp * vec4(lnglat , a_Position.z * a_Size, 1.0);
|
||||||
|
vec2 lnglat = unProjectFlat(a_Pos.xy + offset); // 经纬度
|
||||||
|
vec2 customLnglat = customProject(lnglat) - u_SceneCenterMKT; // 将经纬度转换为高德2.0需要的平面坐标
|
||||||
|
vec4 project_pos = project_position(vec4(customLnglat, a_Position.z * a_Size, 1.0));
|
||||||
|
|
||||||
|
float lightWeight = calc_lighting(project_pos);
|
||||||
|
v_color =vec4(a_Color.rgb*lightWeight, a_Color.w);
|
||||||
|
|
||||||
|
gl_Position = u_Mvp * vec4(customLnglat , a_Position.z * a_Size, 1.0);
|
||||||
|
} else {
|
||||||
|
vec2 lnglat = unProjectFlat(a_Pos.xy + offset); // 实际的经纬度
|
||||||
|
vec4 project_pos = project_position(vec4(lnglat, a_Position.z * a_Size, 1.0));
|
||||||
|
|
||||||
|
float lightWeight = calc_lighting(project_pos);
|
||||||
|
v_color =vec4(a_Color.rgb*lightWeight, a_Color.w);
|
||||||
|
|
||||||
|
gl_Position = project_common_position_to_clipspace(project_pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
gl_Position = project_common_position_to_clipspace(project_pos);
|
|
||||||
setPickingColor(a_PickingColor);
|
setPickingColor(a_PickingColor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ uniform vec2 u_radius;
|
||||||
uniform float u_coverage: 0.9;
|
uniform float u_coverage: 0.9;
|
||||||
uniform float u_angle: 0;
|
uniform float u_angle: 0;
|
||||||
uniform mat4 u_ModelMatrix;
|
uniform mat4 u_ModelMatrix;
|
||||||
|
uniform mat4 u_Mvp;
|
||||||
varying vec4 v_color;
|
varying vec4 v_color;
|
||||||
|
|
||||||
#pragma include "projection"
|
#pragma include "projection"
|
||||||
|
@ -20,8 +21,15 @@ void main() {
|
||||||
|
|
||||||
mat2 rotationMatrix = mat2(cos(u_angle), sin(u_angle), -sin(u_angle), cos(u_angle));
|
mat2 rotationMatrix = mat2(cos(u_angle), sin(u_angle), -sin(u_angle), cos(u_angle));
|
||||||
vec2 offset =(vec2(a_Position.xy * u_radius * rotationMatrix * u_coverage));
|
vec2 offset =(vec2(a_Position.xy * u_radius * rotationMatrix * u_coverage));
|
||||||
vec2 lnglat = unProjectFlat(a_Pos.xy + offset);
|
// vec2 lnglat = unProjectFlat(a_Pos.xy + offset);
|
||||||
|
vec2 lnglat = (a_Pos.xy + offset);
|
||||||
vec4 project_pos = project_position(vec4(lnglat, 0, 1.0));
|
vec4 project_pos = project_position(vec4(lnglat, 0, 1.0));
|
||||||
gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy, 0., 1.0));
|
// gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy, 0., 1.0));
|
||||||
|
if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x
|
||||||
|
// gl_Position = u_Mvp * (vec4(project_pos.xy, 0., 1.0));
|
||||||
|
gl_Position = u_Mvp * (vec4(a_Pos.xy + offset, 0., 1.0));
|
||||||
|
} else {
|
||||||
|
gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy, 0., 1.0));
|
||||||
|
}
|
||||||
setPickingColor(a_PickingColor);
|
setPickingColor(a_PickingColor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
precision highp float;
|
precision highp float;
|
||||||
uniform mat4 u_ModelMatrix;
|
uniform mat4 u_ModelMatrix;
|
||||||
|
uniform mat4 u_Mvp;
|
||||||
attribute vec3 a_Position;
|
attribute vec3 a_Position;
|
||||||
attribute vec2 a_Uv;
|
attribute vec2 a_Uv;
|
||||||
varying vec2 v_texCoord;
|
varying vec2 v_texCoord;
|
||||||
|
@ -7,5 +8,10 @@ varying vec2 v_texCoord;
|
||||||
void main() {
|
void main() {
|
||||||
v_texCoord = a_Uv;
|
v_texCoord = a_Uv;
|
||||||
vec4 project_pos = project_position(vec4(a_Position, 1.0));
|
vec4 project_pos = project_position(vec4(a_Position, 1.0));
|
||||||
gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy,0., 1.0));
|
// gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy,0., 1.0));
|
||||||
|
if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x
|
||||||
|
gl_Position = u_Mvp * (vec4(project_pos.xy,0., 1.0));
|
||||||
|
} else {
|
||||||
|
gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy,0., 1.0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ attribute vec4 a_Color;
|
||||||
attribute float a_Size;
|
attribute float a_Size;
|
||||||
|
|
||||||
uniform mat4 u_ModelMatrix;
|
uniform mat4 u_ModelMatrix;
|
||||||
|
uniform mat4 u_Mvp;
|
||||||
uniform float segmentNumber;
|
uniform float segmentNumber;
|
||||||
uniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];
|
uniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];
|
||||||
varying vec4 v_color;
|
varying vec4 v_color;
|
||||||
|
@ -85,6 +86,11 @@ void main() {
|
||||||
vec2 offset = getExtrusionOffset((next.xy - curr.xy) * indexDir, a_Position.y);
|
vec2 offset = getExtrusionOffset((next.xy - curr.xy) * indexDir, a_Position.y);
|
||||||
v_normal = getNormal((next.xy - curr.xy) * indexDir, a_Position.y);
|
v_normal = getNormal((next.xy - curr.xy) * indexDir, a_Position.y);
|
||||||
|
|
||||||
gl_Position = project_common_position_to_clipspace(vec4(curr.xy + project_pixel(offset), curr.z, 1.0));
|
// gl_Position = project_common_position_to_clipspace(vec4(curr.xy + project_pixel(offset), curr.z, 1.0));
|
||||||
|
if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x
|
||||||
|
gl_Position = u_Mvp * (vec4(curr.xy + project_pixel(offset), curr.z, 1.0));
|
||||||
|
} else {
|
||||||
|
gl_Position = project_common_position_to_clipspace(vec4(curr.xy + project_pixel(offset), curr.z, 1.0));
|
||||||
|
}
|
||||||
setPickingColor(a_PickingColor);
|
setPickingColor(a_PickingColor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ attribute vec3 a_Position;
|
||||||
attribute vec4 a_Instance;
|
attribute vec4 a_Instance;
|
||||||
attribute float a_Size;
|
attribute float a_Size;
|
||||||
uniform mat4 u_ModelMatrix;
|
uniform mat4 u_ModelMatrix;
|
||||||
|
uniform mat4 u_Mvp;
|
||||||
uniform float segmentNumber;
|
uniform float segmentNumber;
|
||||||
uniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];
|
uniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];
|
||||||
varying vec4 v_color;
|
varying vec4 v_color;
|
||||||
|
@ -68,21 +69,44 @@ float getAngularDist (vec2 source, vec2 target) {
|
||||||
sin_half_delta.x * sin_half_delta.x;
|
sin_half_delta.x * sin_half_delta.x;
|
||||||
return 2.0 * atan(sqrt(a), sqrt(1.0 - a));
|
return 2.0 * atan(sqrt(a), sqrt(1.0 - a));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vec2 midPoint(vec2 source, vec2 target) {
|
||||||
|
vec2 center = target - source;
|
||||||
|
float r = length(center);
|
||||||
|
float theta = atan(center.y, center.x);
|
||||||
|
float thetaOffset = 0.314;
|
||||||
|
float r2 = r / 2.0 / cos(thetaOffset);
|
||||||
|
float theta2 = theta + thetaOffset;
|
||||||
|
vec2 mid = vec2(r2*cos(theta2) + source.x, r2*sin(theta2) + source.y);
|
||||||
|
return mid;
|
||||||
|
}
|
||||||
|
float bezier3(vec3 arr, float t) {
|
||||||
|
float ut = 1. - t;
|
||||||
|
return (arr.x * ut + arr.y * t) * ut + (arr.y * ut + arr.z * t) * t;
|
||||||
|
}
|
||||||
|
|
||||||
vec2 interpolate (vec2 source, vec2 target, float angularDist, float t) {
|
vec2 interpolate (vec2 source, vec2 target, float angularDist, float t) {
|
||||||
// if the angularDist is PI, linear interpolation is applied. otherwise, use spherical interpolation
|
// if the angularDist is PI, linear interpolation is applied. otherwise, use spherical interpolation
|
||||||
if(abs(angularDist - PI) < 0.001) {
|
if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x
|
||||||
return (1.0 - t) * source + t * target;
|
vec2 mid = midPoint(source, target);
|
||||||
|
vec3 x = vec3(source.x, mid.x, target.x);
|
||||||
|
vec3 y = vec3(source.y, mid.y, target.y);
|
||||||
|
return vec2(bezier3(x ,t), bezier3(y,t));
|
||||||
|
}else {
|
||||||
|
if(abs(angularDist - PI) < 0.001) {
|
||||||
|
return (1.0 - t) * source + t * target;
|
||||||
|
}
|
||||||
|
float a = sin((1.0 - t) * angularDist) / sin(angularDist);
|
||||||
|
float b = sin(t * angularDist) / sin(angularDist);
|
||||||
|
vec2 sin_source = sin(source);
|
||||||
|
vec2 cos_source = cos(source);
|
||||||
|
vec2 sin_target = sin(target);
|
||||||
|
vec2 cos_target = cos(target);
|
||||||
|
float x = a * cos_source.y * cos_source.x + b * cos_target.y * cos_target.x;
|
||||||
|
float y = a * cos_source.y * sin_source.x + b * cos_target.y * sin_target.x;
|
||||||
|
float z = a * sin_source.y + b * sin_target.y;
|
||||||
|
return vec2(atan(y, x), atan(z, sqrt(x * x + y * y)));
|
||||||
}
|
}
|
||||||
float a = sin((1.0 - t) * angularDist) / sin(angularDist);
|
|
||||||
float b = sin(t * angularDist) / sin(angularDist);
|
|
||||||
vec2 sin_source = sin(source);
|
|
||||||
vec2 cos_source = cos(source);
|
|
||||||
vec2 sin_target = sin(target);
|
|
||||||
vec2 cos_target = cos(target);
|
|
||||||
float x = a * cos_source.y * cos_source.x + b * cos_target.y * cos_target.x;
|
|
||||||
float y = a * cos_source.y * sin_source.x + b * cos_target.y * sin_target.x;
|
|
||||||
float z = a * sin_source.y + b * sin_target.y;
|
|
||||||
return vec2(atan(y, x), atan(z, sqrt(x * x + y * y)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
@ -108,7 +132,13 @@ void main() {
|
||||||
v_normal = getNormal((next.xy - curr.xy) * indexDir, a_Position.y);
|
v_normal = getNormal((next.xy - curr.xy) * indexDir, a_Position.y);
|
||||||
vec2 offset = project_pixel(getExtrusionOffset((next.xy - curr.xy) * indexDir, a_Position.y));
|
vec2 offset = project_pixel(getExtrusionOffset((next.xy - curr.xy) * indexDir, a_Position.y));
|
||||||
// vec4 project_pos = project_position(vec4(curr.xy, 0, 1.0));
|
// vec4 project_pos = project_position(vec4(curr.xy, 0, 1.0));
|
||||||
gl_Position = project_common_position_to_clipspace(vec4(curr.xy + offset, curr.z, 1.0));
|
// gl_Position = project_common_position_to_clipspace(vec4(curr.xy + offset, curr.z, 1.0));
|
||||||
|
|
||||||
|
if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x
|
||||||
|
gl_Position = u_Mvp * (vec4(curr.xy + offset, curr.z, 1.0));
|
||||||
|
} else {
|
||||||
|
gl_Position = project_common_position_to_clipspace(vec4(curr.xy + offset, curr.z, 1.0));
|
||||||
|
}
|
||||||
setPickingColor(a_PickingColor);
|
setPickingColor(a_PickingColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ import {
|
||||||
IStyleAttributeService,
|
IStyleAttributeService,
|
||||||
TYPES,
|
TYPES,
|
||||||
} from '@antv/l7-core';
|
} from '@antv/l7-core';
|
||||||
import { rgb2arr } from '@antv/l7-utils';
|
import { rgb2arr, unProjectFlat } from '@antv/l7-utils';
|
||||||
import { inject, injectable } from 'inversify';
|
import { inject, injectable } from 'inversify';
|
||||||
import { cloneDeep } from 'lodash';
|
import { cloneDeep } from 'lodash';
|
||||||
|
|
||||||
|
@ -131,12 +131,16 @@ export default class DataMappingPlugin implements ILayerPlugin {
|
||||||
return encodeRecord;
|
return encodeRecord;
|
||||||
}) as IEncodeFeature[];
|
}) as IEncodeFeature[];
|
||||||
|
|
||||||
// console.log('mappedData', mappedData)
|
// console.log('mappedData', unProjectFlat(mappedData[0].coordinates as [number, number]))
|
||||||
|
// @ts-ignore
|
||||||
|
// console.log(this.mapService.getCustomCoordCenter())
|
||||||
// 根据地图的类型判断是否需要对点位数据进行处理
|
// 根据地图的类型判断是否需要对点位数据进行处理
|
||||||
if (this.mapService.version === 'GAODE2.x') {
|
if (this.mapService.version === 'GAODE2.x') {
|
||||||
// 若是高德2.0则需要对坐标进行相对偏移
|
// 若是高德2.0则需要对坐标进行相对偏移
|
||||||
|
|
||||||
if (typeof mappedData[0].coordinates[0] === 'number') {
|
if (typeof mappedData[0].coordinates[0] === 'number') {
|
||||||
|
|
||||||
|
// console.log('111', mappedData)
|
||||||
// 单个的点数据
|
// 单个的点数据
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
mappedData.map((d) => {
|
mappedData.map((d) => {
|
||||||
|
@ -145,8 +149,10 @@ export default class DataMappingPlugin implements ILayerPlugin {
|
||||||
d.originCoordinates = cloneDeep(d.coordinates); // 为了兼容高德1.x 需要保存一份原始的经纬度坐标数据(许多上层逻辑依赖经纬度数据)
|
d.originCoordinates = cloneDeep(d.coordinates); // 为了兼容高德1.x 需要保存一份原始的经纬度坐标数据(许多上层逻辑依赖经纬度数据)
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
d.coordinates = this.mapService.lngLatToCoord(d.coordinates);
|
d.coordinates = this.mapService.lngLatToCoord(d.coordinates);
|
||||||
|
// d.coordinates = this.mapService.lngLatToCoord(unProjectFlat(d.coordinates));
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
// console.log('2')
|
||||||
// 连续的线、面数据
|
// 连续的线、面数据
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
mappedData.map((d) => {
|
mappedData.map((d) => {
|
||||||
|
|
|
@ -20,12 +20,12 @@ export default class DataSourcePlugin implements ILayerPlugin {
|
||||||
this.updateClusterData(layer);
|
this.updateClusterData(layer);
|
||||||
});
|
});
|
||||||
|
|
||||||
// 检测数据不否需要更新
|
// 检测数据是否需要更新
|
||||||
layer.hooks.beforeRenderData.tap('DataSourcePlugin', () => {
|
layer.hooks.beforeRenderData.tap('DataSourcePlugin', () => {
|
||||||
const neeUpdate1 = this.updateClusterData(layer);
|
const neeUpdateCluster = this.updateClusterData(layer);
|
||||||
const neeUpdate2 = layer.dataState.dataSourceNeedUpdate;
|
const dataSourceNeedUpdate = layer.dataState.dataSourceNeedUpdate;
|
||||||
layer.dataState.dataSourceNeedUpdate = false;
|
layer.dataState.dataSourceNeedUpdate = false;
|
||||||
return neeUpdate1 || neeUpdate2;
|
return neeUpdateCluster || dataSourceNeedUpdate;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +34,13 @@ export default class DataSourcePlugin implements ILayerPlugin {
|
||||||
const cluster = source.cluster;
|
const cluster = source.cluster;
|
||||||
const { zoom = 0, maxZoom = 16 } = source.clusterOptions;
|
const { zoom = 0, maxZoom = 16 } = source.clusterOptions;
|
||||||
const newZoom = this.mapService.getZoom() - 1;
|
const newZoom = this.mapService.getZoom() - 1;
|
||||||
if (cluster && Math.abs(zoom - newZoom) > 1 && maxZoom > zoom) {
|
const dataSourceNeedUpdate = layer.dataState.dataSourceNeedUpdate;
|
||||||
|
// 如果 dataSource 有更新,跳过 zoom 的判断,直接更新一次
|
||||||
|
if (
|
||||||
|
cluster &&
|
||||||
|
(dataSourceNeedUpdate || Math.abs(zoom - newZoom) > 1) &&
|
||||||
|
maxZoom > zoom
|
||||||
|
) {
|
||||||
source.updateClusterData(Math.floor(newZoom));
|
source.updateClusterData(Math.floor(newZoom));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ export default class ShaderUniformPlugin implements ILayerPlugin {
|
||||||
const version = this.mapService.version;
|
const version = this.mapService.version;
|
||||||
|
|
||||||
let mvp = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]; // default matrix (for gaode2.x)
|
let mvp = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]; // default matrix (for gaode2.x)
|
||||||
// let sceneCenterMKT = [0, 0]
|
let sceneCenterMKT = [0, 0]
|
||||||
layer.hooks.beforeRender.tap('ShaderUniformPlugin', () => {
|
layer.hooks.beforeRender.tap('ShaderUniformPlugin', () => {
|
||||||
// 重新计算坐标系参数
|
// 重新计算坐标系参数
|
||||||
this.coordinateSystemService.refresh();
|
this.coordinateSystemService.refresh();
|
||||||
|
@ -47,7 +47,7 @@ export default class ShaderUniformPlugin implements ILayerPlugin {
|
||||||
mvp = this.mapService.map.customCoords.getMVPMatrix();
|
mvp = this.mapService.map.customCoords.getMVPMatrix();
|
||||||
// mvp = amapCustomCoords.getMVPMatrix()
|
// mvp = amapCustomCoords.getMVPMatrix()
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
// sceneCenterMKT = this.mapService.getCustomCoordCenter()
|
sceneCenterMKT = this.mapService.getCustomCoordCenter()
|
||||||
}
|
}
|
||||||
|
|
||||||
const { width, height } = this.rendererService.getViewportSize();
|
const { width, height } = this.rendererService.getViewportSize();
|
||||||
|
@ -70,7 +70,7 @@ export default class ShaderUniformPlugin implements ILayerPlugin {
|
||||||
[CoordinateUniform.PixelsPerMeter]: this.coordinateSystemService.getPixelsPerMeter(),
|
[CoordinateUniform.PixelsPerMeter]: this.coordinateSystemService.getPixelsPerMeter(),
|
||||||
// 坐标系是高德2.0的时候单独计算
|
// 坐标系是高德2.0的时候单独计算
|
||||||
[CoordinateUniform.Mvp]: mvp,
|
[CoordinateUniform.Mvp]: mvp,
|
||||||
// u_SceneCenterMKT: sceneCenterMKT,
|
u_SceneCenterMKT: sceneCenterMKT,
|
||||||
// 其他参数,例如视口大小、DPR 等
|
// 其他参数,例如视口大小、DPR 等
|
||||||
u_ViewportSize: [width, height],
|
u_ViewportSize: [width, height],
|
||||||
u_DevicePixelRatio: window.devicePixelRatio,
|
u_DevicePixelRatio: window.devicePixelRatio,
|
||||||
|
|
|
@ -44,5 +44,7 @@ void main() {
|
||||||
gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));
|
gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));
|
||||||
|
|
||||||
setPickingColor(a_PickingColor);
|
setPickingColor(a_PickingColor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@ import BaseLayer from '../core/BaseLayer';
|
||||||
import { RasterTriangulation } from './buffers/triangulation';
|
import { RasterTriangulation } from './buffers/triangulation';
|
||||||
import rasterFrag from './shaders/raster_frag.glsl';
|
import rasterFrag from './shaders/raster_frag.glsl';
|
||||||
import rasterVert from './shaders/raster_vert.glsl';
|
import rasterVert from './shaders/raster_vert.glsl';
|
||||||
interface IRasterLayerStyleOptions {
|
interface IRasterLayerStyleOptions {
|
||||||
opacity: number;
|
opacity: number;
|
||||||
min: number;
|
min: number;
|
||||||
max: number;
|
max: number;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
precision highp float;
|
precision highp float;
|
||||||
uniform mat4 u_ModelMatrix;
|
uniform mat4 u_ModelMatrix;
|
||||||
|
uniform mat4 u_Mvp;
|
||||||
attribute vec3 a_Position;
|
attribute vec3 a_Position;
|
||||||
attribute vec2 a_Uv;
|
attribute vec2 a_Uv;
|
||||||
varying vec2 v_texCoord;
|
varying vec2 v_texCoord;
|
||||||
|
@ -8,4 +9,10 @@ void main() {
|
||||||
v_texCoord = a_Uv;
|
v_texCoord = a_Uv;
|
||||||
vec4 project_pos = project_position(vec4(a_Position, 1.0));
|
vec4 project_pos = project_position(vec4(a_Position, 1.0));
|
||||||
gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy,0., 1.0));
|
gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy,0., 1.0));
|
||||||
|
|
||||||
|
if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x
|
||||||
|
gl_Position = u_Mvp * (vec4(project_pos.xy,0., 1.0));
|
||||||
|
} else {
|
||||||
|
gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy,0., 1.0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
precision highp float;
|
precision highp float;
|
||||||
attribute vec3 a_Position;
|
attribute vec3 a_Position;
|
||||||
uniform mat4 u_ModelMatrix;
|
uniform mat4 u_ModelMatrix;
|
||||||
|
uniform mat4 u_Mvp;
|
||||||
uniform vec4 u_extent;
|
uniform vec4 u_extent;
|
||||||
uniform sampler2D u_texture;
|
uniform sampler2D u_texture;
|
||||||
uniform sampler2D u_colorTexture;
|
uniform sampler2D u_colorTexture;
|
||||||
|
@ -32,6 +33,12 @@ void main() {
|
||||||
|
|
||||||
// vec2 range = u_extent.zw - u_extent.xy;
|
// vec2 range = u_extent.zw - u_extent.xy;
|
||||||
// vec4 project_pos = project_position(vec4(pos, 0, 1.0));
|
// vec4 project_pos = project_position(vec4(pos, 0, 1.0));
|
||||||
gl_Position = project_common_position_to_clipspace(vec4(pos.xy, project_scale(value) * u_heightRatio, 1.0));
|
// gl_Position = project_common_position_to_clipspace(vec4(pos.xy, project_scale(value) * u_heightRatio, 1.0));
|
||||||
|
|
||||||
|
if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x
|
||||||
|
gl_Position = u_Mvp * (vec4(pos.xy, project_scale(value) * u_heightRatio, 1.0));
|
||||||
|
} else {
|
||||||
|
gl_Position = project_common_position_to_clipspace(vec4(pos.xy, project_scale(value) * u_heightRatio, 1.0));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@antv/l7-map",
|
"name": "@antv/l7-map",
|
||||||
"version": "2.3.9",
|
"version": "2.3.10",
|
||||||
"description": "l7 map",
|
"description": "l7 map",
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "thinkinggis <lzx199065@gmail.com>",
|
"author": "thinkinggis <lzx199065@gmail.com>",
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/antvis/L7#readme",
|
"homepage": "https://github.com/antvis/L7#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@antv/l7-utils": "2.3.9",
|
"@antv/l7-utils": "^2.3.10",
|
||||||
"@babel/runtime": "^7.7.7",
|
"@babel/runtime": "^7.7.7",
|
||||||
"@mapbox/point-geometry": "^0.1.0",
|
"@mapbox/point-geometry": "^0.1.0",
|
||||||
"@mapbox/unitbezier": "^0.0.0",
|
"@mapbox/unitbezier": "^0.0.0",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@antv/l7-maps",
|
"name": "@antv/l7-maps",
|
||||||
"version": "2.3.9",
|
"version": "2.3.10",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"module": "es/index.js",
|
"module": "es/index.js",
|
||||||
|
@ -27,9 +27,9 @@
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@amap/amap-jsapi-loader": "^0.0.3",
|
"@amap/amap-jsapi-loader": "^0.0.3",
|
||||||
"@antv/l7-core": "2.3.9",
|
"@antv/l7-core": "^2.3.10",
|
||||||
"@antv/l7-map": "2.3.9",
|
"@antv/l7-map": "^2.3.10",
|
||||||
"@antv/l7-utils": "2.3.9",
|
"@antv/l7-utils": "^2.3.10",
|
||||||
"@babel/runtime": "^7.7.7",
|
"@babel/runtime": "^7.7.7",
|
||||||
"@types/amap-js-api": "^1.4.6",
|
"@types/amap-js-api": "^1.4.6",
|
||||||
"@types/mapbox-gl": "^1.11.2",
|
"@types/mapbox-gl": "^1.11.2",
|
||||||
|
|
|
@ -33,7 +33,6 @@ export default class Viewport implements IViewport {
|
||||||
|
|
||||||
// 计算透视投影矩阵 projectionMatrix
|
// 计算透视投影矩阵 projectionMatrix
|
||||||
mat4.perspective(this.projectionMatrix, fov, aspect, near, far);
|
mat4.perspective(this.projectionMatrix, fov, aspect, near, far);
|
||||||
|
|
||||||
// 计算相机矩阵 viewMatrix
|
// 计算相机矩阵 viewMatrix
|
||||||
const eye = vec3.fromValues(
|
const eye = vec3.fromValues(
|
||||||
cameraHeight * Math.sin(pitchInRadians) * Math.sin(rotationInRadians),
|
cameraHeight * Math.sin(pitchInRadians) * Math.sin(rotationInRadians),
|
||||||
|
@ -46,7 +45,6 @@ export default class Viewport implements IViewport {
|
||||||
Math.sin(pitchInRadians),
|
Math.sin(pitchInRadians),
|
||||||
);
|
);
|
||||||
mat4.lookAt(this.viewMatrix, eye, vec3.fromValues(0, 0, 0), up);
|
mat4.lookAt(this.viewMatrix, eye, vec3.fromValues(0, 0, 0), up);
|
||||||
|
|
||||||
this.viewUncenteredMatrix = mat4.clone(this.viewMatrix);
|
this.viewUncenteredMatrix = mat4.clone(this.viewMatrix);
|
||||||
|
|
||||||
// 移动相机位置
|
// 移动相机位置
|
||||||
|
|
|
@ -444,6 +444,10 @@ export default class AMapService
|
||||||
const { lng, lat } = this.getCenter();
|
const { lng, lat } = this.getCenter();
|
||||||
if (this.cameraChangedCallback) {
|
if (this.cameraChangedCallback) {
|
||||||
// resync viewport
|
// resync viewport
|
||||||
|
// console.log('cameraHeight', height)
|
||||||
|
// console.log('pitch', pitch)
|
||||||
|
// console.log('rotation', rotation)
|
||||||
|
// console.log('zoom', this.map.getZoom())
|
||||||
this.viewport.syncWithMapCamera({
|
this.viewport.syncWithMapCamera({
|
||||||
aspect,
|
aspect,
|
||||||
// AMap 定义 rotation 为顺时针方向,而 Mapbox 为逆时针
|
// AMap 定义 rotation 为顺时针方向,而 Mapbox 为逆时针
|
||||||
|
@ -460,6 +464,7 @@ export default class AMapService
|
||||||
offsetOrigin: [position.x, position.y],
|
offsetOrigin: [position.x, position.y],
|
||||||
});
|
});
|
||||||
const { offsetZoom = LNGLAT_OFFSET_ZOOM_THRESHOLD } = this.config;
|
const { offsetZoom = LNGLAT_OFFSET_ZOOM_THRESHOLD } = this.config;
|
||||||
|
// console.log('this.viewport', this.viewport)
|
||||||
// set coordinate system
|
// set coordinate system
|
||||||
if (this.viewport.getZoom() > offsetZoom) {
|
if (this.viewport.getZoom() > offsetZoom) {
|
||||||
this.coordinateSystemService.setCoordinateSystem(
|
this.coordinateSystemService.setCoordinateSystem(
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { IMapCamera, IViewport } from '@antv/l7-core';
|
import { IMapCamera, IViewport } from '@antv/l7-core';
|
||||||
import { mat4, vec3 } from 'gl-matrix';
|
import { mat4, vec3 } from 'gl-matrix';
|
||||||
|
|
||||||
|
const DEGREES_TO_RADIANS = Math.PI / 180;
|
||||||
export default class Viewport implements IViewport {
|
export default class Viewport implements IViewport {
|
||||||
private projectionMatrix: mat4 = mat4.create();
|
private projectionMatrix: mat4 = mat4.create();
|
||||||
private viewMatrix: mat4 = mat4.create();
|
private viewMatrix: mat4 = mat4.create();
|
||||||
|
@ -22,17 +23,37 @@ export default class Viewport implements IViewport {
|
||||||
near = 0.1,
|
near = 0.1,
|
||||||
far = 1000,
|
far = 1000,
|
||||||
fov = 0,
|
fov = 0,
|
||||||
|
|
||||||
|
pitch = 0,
|
||||||
|
bearing = 0,
|
||||||
|
cameraHeight = 1,
|
||||||
} = mapCamera;
|
} = mapCamera;
|
||||||
this.zoom = zoom;
|
this.zoom = zoom;
|
||||||
this.center = center;
|
this.center = center;
|
||||||
|
|
||||||
// 计算透视投影矩阵 projectionMatrix
|
// 计算透视投影矩阵 projectionMatrix
|
||||||
mat4.perspective(this.projectionMatrix, fov, aspect, near, far);
|
mat4.perspective(this.projectionMatrix, fov/180*Math.PI, aspect, near, far);
|
||||||
|
// mat4.perspective(this.projectionMatrix, 0.91, aspect, near, far);
|
||||||
|
// const pitchInRadians = pitch * DEGREES_TO_RADIANS;
|
||||||
|
// const rotationInRadians = (360 - bearing) * DEGREES_TO_RADIANS;
|
||||||
|
|
||||||
// 计算相机矩阵 viewMatrix
|
// 计算相机矩阵 viewMatrix
|
||||||
const eyePoint = vec3.fromValues(...cameraPosition);
|
// const eyePoint = vec3.fromValues(...cameraPosition);
|
||||||
|
const eyePoint = vec3.fromValues(cameraPosition[0], cameraPosition[1], cameraPosition[2]);
|
||||||
|
// 计算相机矩阵 viewMatrix
|
||||||
|
// const eyePoint = vec3.fromValues(
|
||||||
|
// (cameraPosition[2]) * Math.sin(pitchInRadians) * Math.sin(rotationInRadians),
|
||||||
|
// -(cameraPosition[2]) * Math.sin(pitchInRadians) * Math.cos(rotationInRadians),
|
||||||
|
// (cameraPosition[2]) * Math.cos(pitchInRadians),
|
||||||
|
// );
|
||||||
const lookAtPoint = vec3.fromValues(...lookAt);
|
const lookAtPoint = vec3.fromValues(...lookAt);
|
||||||
|
// const lookAtPoint = vec3.fromValues(0, 0, 0);
|
||||||
const upDirect = vec3.fromValues(...up);
|
const upDirect = vec3.fromValues(...up);
|
||||||
|
// const upDirect = vec3.fromValues(
|
||||||
|
// -Math.cos(pitchInRadians) * Math.sin(rotationInRadians),
|
||||||
|
// Math.cos(pitchInRadians) * Math.cos(rotationInRadians),
|
||||||
|
// Math.sin(pitchInRadians),
|
||||||
|
// );
|
||||||
mat4.lookAt(this.viewMatrix, eyePoint, lookAtPoint, upDirect);
|
mat4.lookAt(this.viewMatrix, eyePoint, lookAtPoint, upDirect);
|
||||||
|
|
||||||
this.viewUncenteredMatrix = mat4.clone(this.viewMatrix);
|
this.viewUncenteredMatrix = mat4.clone(this.viewMatrix);
|
||||||
|
|
|
@ -124,18 +124,17 @@ export default class AMapService
|
||||||
/**
|
/**
|
||||||
* 转化线、面类型的点位数据
|
* 转化线、面类型的点位数据
|
||||||
*/
|
*/
|
||||||
// public lngLatToCoords(lnglatArray: Array<Array<[number, number]>> | Array<[number, number]>): Array<Array<[number, number]>>|Array<[number, number]> {
|
|
||||||
public lngLatToCoords(
|
public lngLatToCoords(
|
||||||
lnglatArray: number[][][] | number[][],
|
lnglatArray: number[][][] | number[][],
|
||||||
): number[][][] | number[][] {
|
): number[][][] | number[][] {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
return lnglatArray.map((lnglats) => {
|
return lnglatArray.map((lnglats) => {
|
||||||
if (typeof lnglats[0] === 'number') {
|
if (typeof lnglats[0] === 'number') {
|
||||||
return this.lngLatToCoord(lnglats);
|
return this.lngLatToCoord(lnglats as [number, number]);
|
||||||
} else {
|
} else {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
return lnglats.map((lnglat) => {
|
return lnglats.map((lnglat) => {
|
||||||
return this.lngLatToCoord(lnglat);
|
return this.lngLatToCoord(lnglat as [number, number]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -523,9 +522,13 @@ export default class AMapService
|
||||||
up,
|
up,
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
} = this.map.customCoords.getCameraParams();
|
} = this.map.customCoords.getCameraParams();
|
||||||
const center = this.map.getCenter();
|
|
||||||
const zoom = this.map.getZoom();
|
|
||||||
|
|
||||||
|
// @ts-ignore
|
||||||
|
const center = this.map.customCoords.getCenter() as [number, number]
|
||||||
|
const zoom = this.map.getZoom();
|
||||||
|
const pitch = this.map.getPitch()
|
||||||
|
const rotation = this.map.getRotation()
|
||||||
|
// @ts-ignore
|
||||||
if (this.cameraChangedCallback) {
|
if (this.cameraChangedCallback) {
|
||||||
this.viewport.syncWithMapCamera({
|
this.viewport.syncWithMapCamera({
|
||||||
aspect,
|
aspect,
|
||||||
|
@ -537,10 +540,16 @@ export default class AMapService
|
||||||
up,
|
up,
|
||||||
// AMap 定义的缩放等级 与 Mapbox 相差 1
|
// AMap 定义的缩放等级 与 Mapbox 相差 1
|
||||||
zoom: zoom - 1, // 与amap1.x对比相差一个级别
|
zoom: zoom - 1, // 与amap1.x对比相差一个级别
|
||||||
center: [center.getLat(), center.getLng()],
|
// center: [center.getLng(), center.getLat()],
|
||||||
|
center: center,
|
||||||
offsetOrigin: [position[0], position[1]],
|
offsetOrigin: [position[0], position[1]],
|
||||||
|
|
||||||
|
pitch,
|
||||||
|
bearing: 360 - rotation,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// console.log('this.viewport', this.viewport)
|
||||||
|
// console.log('position', position)
|
||||||
// set coordinate system
|
// set coordinate system
|
||||||
this.coordinateSystemService.setCoordinateSystem(CoordinateSystem.P20_2);
|
this.coordinateSystemService.setCoordinateSystem(CoordinateSystem.P20_2);
|
||||||
this.cameraChangedCallback(this.viewport);
|
this.cameraChangedCallback(this.viewport);
|
||||||
|
@ -559,6 +568,7 @@ export default class AMapService
|
||||||
* @param e
|
* @param e
|
||||||
*/
|
*/
|
||||||
private handleViewChanged = (e: any): void => {
|
private handleViewChanged = (e: any): void => {
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
const {
|
const {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
|
@ -577,9 +587,12 @@ export default class AMapService
|
||||||
up,
|
up,
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
} = this.map.customCoords.getCameraParams();
|
} = this.map.customCoords.getCameraParams();
|
||||||
const { zoom } = e;
|
const { zoom, pitch, rotation } = e;
|
||||||
|
// console.log(this.viewport)
|
||||||
// console.log('zoom', zoom, this.map.getZoom())
|
// console.log('zoom', zoom, this.map.getZoom())
|
||||||
const center = this.map.getCenter();
|
// const center = this.map.getCenter();
|
||||||
|
// @ts-ignore
|
||||||
|
const center = this.map.customCoords.getCenter() as [number, number]
|
||||||
if (this.cameraChangedCallback) {
|
if (this.cameraChangedCallback) {
|
||||||
// resync viewport
|
// resync viewport
|
||||||
this.viewport.syncWithMapCamera({
|
this.viewport.syncWithMapCamera({
|
||||||
|
@ -592,8 +605,14 @@ export default class AMapService
|
||||||
near,
|
near,
|
||||||
// AMap 定义的缩放等级 与 Mapbox 相差 1
|
// AMap 定义的缩放等级 与 Mapbox 相差 1
|
||||||
zoom: zoom - 1, // 与amap1.x对比相差一个级别
|
zoom: zoom - 1, // 与amap1.x对比相差一个级别
|
||||||
center: [center.getLat(), center.getLng()],
|
// center: [center.getLng(), center.getLat()],
|
||||||
|
center: center,
|
||||||
offsetOrigin: [position[0], position[1]],
|
offsetOrigin: [position[0], position[1]],
|
||||||
|
|
||||||
|
pitch,
|
||||||
|
bearing: 360 - rotation,
|
||||||
|
// // @ts-ignore
|
||||||
|
// mvp: this.map.customCoords.getMVPMatrix()
|
||||||
});
|
});
|
||||||
|
|
||||||
// set coordinate system
|
// set coordinate system
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@antv/l7-renderer",
|
"name": "@antv/l7-renderer",
|
||||||
"version": "2.3.9",
|
"version": "2.3.10",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"module": "es/index.js",
|
"module": "es/index.js",
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
"gl": "^4.4.0"
|
"gl": "^4.4.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@antv/l7-core": "2.3.9",
|
"@antv/l7-core": "^2.3.10",
|
||||||
"@babel/runtime": "^7.7.7",
|
"@babel/runtime": "^7.7.7",
|
||||||
"inversify": "^5.0.1",
|
"inversify": "^5.0.1",
|
||||||
"lodash": "^4.17.15",
|
"lodash": "^4.17.15",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@antv/l7-scene",
|
"name": "@antv/l7-scene",
|
||||||
"version": "2.3.9",
|
"version": "2.3.10",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"module": "es/index.js",
|
"module": "es/index.js",
|
||||||
|
@ -23,12 +23,12 @@
|
||||||
"author": "xiaoiver",
|
"author": "xiaoiver",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@antv/l7-component": "2.3.9",
|
"@antv/l7-component": "^2.3.10",
|
||||||
"@antv/l7-core": "2.3.9",
|
"@antv/l7-core": "^2.3.10",
|
||||||
"@antv/l7-maps": "2.3.9",
|
"@antv/l7-layers": "^2.3.10",
|
||||||
"@antv/l7-renderer": "2.3.9",
|
"@antv/l7-maps": "^2.3.10",
|
||||||
"@antv/l7-layers": "2.3.9",
|
"@antv/l7-renderer": "^2.3.10",
|
||||||
"@antv/l7-utils": "2.3.9",
|
"@antv/l7-utils": "^2.3.10",
|
||||||
"@babel/runtime": "^7.7.7",
|
"@babel/runtime": "^7.7.7",
|
||||||
"inversify": "^5.0.1",
|
"inversify": "^5.0.1",
|
||||||
"mapbox-gl": "^1.2.1",
|
"mapbox-gl": "^1.2.1",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@antv/l7-source",
|
"name": "@antv/l7-source",
|
||||||
"version": "2.3.9",
|
"version": "2.3.10",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"module": "es/index.js",
|
"module": "es/index.js",
|
||||||
|
@ -26,8 +26,8 @@
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@antv/async-hook": "^2.1.0",
|
"@antv/async-hook": "^2.1.0",
|
||||||
"@antv/l7-core": "2.3.9",
|
"@antv/l7-core": "^2.3.10",
|
||||||
"@antv/l7-utils": "2.3.9",
|
"@antv/l7-utils": "^2.3.10",
|
||||||
"@babel/runtime": "^7.7.7",
|
"@babel/runtime": "^7.7.7",
|
||||||
"@mapbox/geojson-rewind": "^0.4.0",
|
"@mapbox/geojson-rewind": "^0.4.0",
|
||||||
"@turf/helpers": "^6.1.4",
|
"@turf/helpers": "^6.1.4",
|
||||||
|
|
|
@ -56,6 +56,8 @@ export default class Source extends EventEmitter {
|
||||||
method: 'count',
|
method: 'count',
|
||||||
};
|
};
|
||||||
private readonly mapService: IMapService;
|
private readonly mapService: IMapService;
|
||||||
|
// 是否有效范围
|
||||||
|
private invalidExtent: boolean = false;
|
||||||
|
|
||||||
// 原始数据
|
// 原始数据
|
||||||
private originData: any;
|
private originData: any;
|
||||||
|
@ -90,16 +92,15 @@ export default class Source extends EventEmitter {
|
||||||
this.emit('update');
|
this.emit('update');
|
||||||
}
|
}
|
||||||
public getClusters(zoom: number): any {
|
public getClusters(zoom: number): any {
|
||||||
return this.clusterIndex.getClusters(this.extent, zoom);
|
return this.clusterIndex.getClusters(this.caculClusterExtent(2), zoom);
|
||||||
}
|
}
|
||||||
public getClustersLeaves(id: number): any {
|
public getClustersLeaves(id: number): any {
|
||||||
return this.clusterIndex.getLeaves(id, Infinity);
|
return this.clusterIndex.getLeaves(id, Infinity);
|
||||||
}
|
}
|
||||||
public updateClusterData(zoom: number): void {
|
public updateClusterData(zoom: number): void {
|
||||||
const { method = 'sum', field } = this.clusterOptions;
|
const { method = 'sum', field } = this.clusterOptions;
|
||||||
const newBounds = padBounds(bBoxToBounds(this.extent), 2);
|
|
||||||
let data = this.clusterIndex.getClusters(
|
let data = this.clusterIndex.getClusters(
|
||||||
newBounds[0].concat(newBounds[1]),
|
this.caculClusterExtent(2),
|
||||||
Math.floor(zoom),
|
Math.floor(zoom),
|
||||||
);
|
);
|
||||||
this.clusterOptions.zoom = zoom;
|
this.clusterOptions.zoom = zoom;
|
||||||
|
@ -170,6 +171,18 @@ export default class Source extends EventEmitter {
|
||||||
this.data = null;
|
this.data = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private caculClusterExtent(bufferRatio: number): any {
|
||||||
|
let newBounds = [
|
||||||
|
[-Infinity, -Infinity],
|
||||||
|
[Infinity, Infinity],
|
||||||
|
];
|
||||||
|
|
||||||
|
if (!this.invalidExtent) {
|
||||||
|
newBounds = padBounds(bBoxToBounds(this.extent), bufferRatio);
|
||||||
|
}
|
||||||
|
return newBounds[0].concat(newBounds[1]);
|
||||||
|
}
|
||||||
|
|
||||||
private initCfg(option?: ISourceCFG) {
|
private initCfg(option?: ISourceCFG) {
|
||||||
this.cfg = mergeWith(this.cfg, option, mergeCustomizer);
|
this.cfg = mergeWith(this.cfg, option, mergeCustomizer);
|
||||||
const cfg = this.cfg;
|
const cfg = this.cfg;
|
||||||
|
@ -197,6 +210,8 @@ export default class Source extends EventEmitter {
|
||||||
this.data = sourceParser(this.originData, parser);
|
this.data = sourceParser(this.originData, parser);
|
||||||
// 计算范围
|
// 计算范围
|
||||||
this.extent = extent(this.data.dataArray);
|
this.extent = extent(this.data.dataArray);
|
||||||
|
this.invalidExtent =
|
||||||
|
this.extent[0] === this.extent[2] || this.extent[1] === this.extent[3];
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 数据统计
|
* 数据统计
|
||||||
|
|
|
@ -33,7 +33,6 @@ export function pointToHexbin(data: IParserData, option: ITransform) {
|
||||||
.x((d: IRawData) => d.coordinates[0])
|
.x((d: IRawData) => d.coordinates[0])
|
||||||
.y((d: IRawData) => d.coordinates[1]);
|
.y((d: IRawData) => d.coordinates[1]);
|
||||||
const hexbinBins = newHexbin(screenPoints);
|
const hexbinBins = newHexbin(screenPoints);
|
||||||
|
|
||||||
const result: IParserData = {
|
const result: IParserData = {
|
||||||
dataArray: hexbinBins.map((hex: IHexBinItem<IRawData>, index: number) => {
|
dataArray: hexbinBins.map((hex: IHexBinItem<IRawData>, index: number) => {
|
||||||
if (option.field && method) {
|
if (option.field && method) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@antv/l7-three",
|
"name": "@antv/l7-three",
|
||||||
"version": "2.3.9",
|
"version": "2.3.10",
|
||||||
"description": "three for L7 ",
|
"description": "three for L7 ",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"3D",
|
"3D",
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
"build:cjs": "BABEL_ENV=cjs babel src --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
|
"build:cjs": "BABEL_ENV=cjs babel src --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
|
||||||
"build:esm": "BABEL_ENV=esm babel src --root-mode upward --out-dir es --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
|
"build:esm": "BABEL_ENV=esm babel src --root-mode upward --out-dir es --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
|
||||||
"watch": "BABEL_ENV=cjs babel src --watch --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
|
"watch": "BABEL_ENV=cjs babel src --watch --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
|
||||||
"buildcdn": "node_modules/.bin/rollup -c",
|
"build:cdn": "node_modules/.bin/rollup -c",
|
||||||
"lint:ts": "run-p -c lint:ts-*",
|
"lint:ts": "run-p -c lint:ts-*",
|
||||||
"test": "jest",
|
"test": "jest",
|
||||||
"sync": "tnpm sync"
|
"sync": "tnpm sync"
|
||||||
|
@ -44,7 +44,7 @@
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/antvis/L7#readme",
|
"homepage": "https://github.com/antvis/L7#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@antv/l7": "2.3.9",
|
"@antv/l7": "^2.3.10",
|
||||||
"@babel/runtime": "^7.7.7",
|
"@babel/runtime": "^7.7.7",
|
||||||
"inversify": "^5.0.1",
|
"inversify": "^5.0.1",
|
||||||
"rollup": "^2.3.3",
|
"rollup": "^2.3.3",
|
||||||
|
|
|
@ -25,8 +25,12 @@ export default {
|
||||||
commonjs({
|
commonjs({
|
||||||
namedExports: {
|
namedExports: {
|
||||||
eventemitter3: [ 'EventEmitter' ],
|
eventemitter3: [ 'EventEmitter' ],
|
||||||
lodash: [ 'merge' ]
|
lodash: [ 'merge' ],
|
||||||
}
|
inversify: ['inject','injectable']
|
||||||
|
},
|
||||||
|
dynamicRequireTargets: [
|
||||||
|
'node_modules/inversify/lib/syntax/binding_{on,when}_syntax.js',
|
||||||
|
],
|
||||||
}),
|
}),
|
||||||
buble({
|
buble({
|
||||||
transforms: { generator: false }
|
transforms: { generator: false }
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { IMapService, IMercator, IRendererService, TYPES } from '@antv/l7';
|
import { IMapService, IMercator, IRendererService, TYPES } from '@antv/l7';
|
||||||
import { inject, injectable } from 'inversify';
|
import { inject, injectable } from 'inversify';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
AnimationMixer,
|
AnimationMixer,
|
||||||
Camera,
|
Camera,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@antv/l7-utils",
|
"name": "@antv/l7-utils",
|
||||||
"version": "2.3.9",
|
"version": "2.3.10",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"module": "es/index.js",
|
"module": "es/index.js",
|
||||||
|
|
|
@ -47,7 +47,10 @@ export default class Amap2demo extends React.Component {
|
||||||
|
|
||||||
scene.on('loaded', () => {
|
scene.on('loaded', () => {
|
||||||
console.log('event test');
|
console.log('event test');
|
||||||
|
// @ts-ignore
|
||||||
|
console.log(scene.map.getProjection().project)
|
||||||
|
// @ts-ignore
|
||||||
|
console.log(scene.map.customCoords.lngLatToCoord)
|
||||||
const layer = new PointLayer()
|
const layer = new PointLayer()
|
||||||
.source(originData, {
|
.source(originData, {
|
||||||
parser: {
|
parser: {
|
||||||
|
|
|
@ -0,0 +1,114 @@
|
||||||
|
import { vec2, vec3 } from 'gl-matrix';
|
||||||
|
// @ts-ignore
|
||||||
|
import { ILngLat, PointLayer, LineLayer, Scene } from '@antv/l7';
|
||||||
|
import { GaodeMap, GaodeMap2 } from '@antv/l7-maps';
|
||||||
|
import * as React from 'react';
|
||||||
|
|
||||||
|
export default class Amap2demo_arcLine3d extends React.Component {
|
||||||
|
// @ts-ignore
|
||||||
|
private scene: Scene;
|
||||||
|
|
||||||
|
public componentWillUnmount() {
|
||||||
|
this.scene.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async componentDidMount() {
|
||||||
|
const scene = new Scene({
|
||||||
|
id: 'map',
|
||||||
|
map: new GaodeMap2({
|
||||||
|
pitch: 40,
|
||||||
|
center: [ 3.438, 40.16797 ],
|
||||||
|
zoom: 0
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
this.scene = scene;
|
||||||
|
|
||||||
|
scene.on('loaded', () => {
|
||||||
|
Promise.all([
|
||||||
|
fetch('https://gw.alipayobjects.com/os/basement_prod/dbd008f1-9189-461c-88aa-569357ffc07d.json').then(d => d.json()),
|
||||||
|
fetch('https://gw.alipayobjects.com/os/basement_prod/4472780b-fea1-4fc2-9e4b-3ca716933dc7.json').then(d => d.text()),
|
||||||
|
fetch('https://gw.alipayobjects.com/os/basement_prod/a5ac7bce-181b-40d1-8a16-271356264ad8.json').then(d => d.text())
|
||||||
|
]).then(function onLoad([ world, dot, flyline ]) {
|
||||||
|
const dotData = eval(dot);
|
||||||
|
// @ts-ignore
|
||||||
|
const flydata = eval(flyline).map(item => {
|
||||||
|
// @ts-ignore
|
||||||
|
const latlng1 = item.from.split(',').map(e => { return e * 1; });
|
||||||
|
// @ts-ignore
|
||||||
|
const latlng2 = item.to.split(',').map(e => { return e * 1; });
|
||||||
|
return { coord: [ latlng1, latlng2 ] };
|
||||||
|
});
|
||||||
|
// const worldFill = new PolygonLayer()
|
||||||
|
// .source(world)
|
||||||
|
// .color('#98E3FA')
|
||||||
|
// .shape('fill')
|
||||||
|
// .style({
|
||||||
|
// opacity: 1
|
||||||
|
// });
|
||||||
|
|
||||||
|
const worldLine = new LineLayer()
|
||||||
|
.source(world)
|
||||||
|
.color('#41fc9d')
|
||||||
|
.size(0.5)
|
||||||
|
.style({
|
||||||
|
opacity: 0.4
|
||||||
|
});
|
||||||
|
const dotPoint = new PointLayer()
|
||||||
|
.source(dotData, {
|
||||||
|
parser: {
|
||||||
|
type: 'json',
|
||||||
|
x: 'lng',
|
||||||
|
y: 'lat'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.shape('circle')
|
||||||
|
.color('#ffed11')
|
||||||
|
.animate(true)
|
||||||
|
.size(40)
|
||||||
|
.style({
|
||||||
|
opacity: 1.0
|
||||||
|
});
|
||||||
|
const flyLine = new LineLayer()
|
||||||
|
.source(flydata, {
|
||||||
|
parser: {
|
||||||
|
type: 'json',
|
||||||
|
coordinates: 'coord'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.color('#ff6b34')
|
||||||
|
.shape('arc3d')
|
||||||
|
.size(2)
|
||||||
|
.active(true)
|
||||||
|
.animate({
|
||||||
|
interval: 2,
|
||||||
|
trailLength: 2,
|
||||||
|
duration: 1
|
||||||
|
})
|
||||||
|
.style({
|
||||||
|
opacity: 1
|
||||||
|
});
|
||||||
|
// scene.addLayer(worldFill);
|
||||||
|
scene.addLayer(worldLine);
|
||||||
|
scene.addLayer(dotPoint);
|
||||||
|
scene.addLayer(flyLine);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public render() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<div
|
||||||
|
id="map"
|
||||||
|
style={{
|
||||||
|
position: 'absolute',
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
right: 0,
|
||||||
|
bottom: 0,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,72 @@
|
||||||
|
import { vec2, vec3 } from 'gl-matrix';
|
||||||
|
// @ts-ignore
|
||||||
|
import { ILngLat, PointLayer, LineLayer, Scene } from '@antv/l7';
|
||||||
|
import { GaodeMap, GaodeMap2 } from '@antv/l7-maps';
|
||||||
|
import * as React from 'react';
|
||||||
|
|
||||||
|
export default class Amap2demo_arcLine_greatCircle extends React.Component {
|
||||||
|
// @ts-ignore
|
||||||
|
private scene: Scene;
|
||||||
|
|
||||||
|
public componentWillUnmount() {
|
||||||
|
this.scene.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async componentDidMount() {
|
||||||
|
const scene = new Scene({
|
||||||
|
id: 'map',
|
||||||
|
map: new GaodeMap2({
|
||||||
|
pitch: 0,
|
||||||
|
center: [107.77791556935472, 35.443286920228644],
|
||||||
|
zoom: 2.9142882493605033,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
this.scene = scene;
|
||||||
|
|
||||||
|
scene.on('loaded', () => {
|
||||||
|
const layer = new LineLayer({})
|
||||||
|
.source([
|
||||||
|
{
|
||||||
|
lng1: 75.9375,
|
||||||
|
lat1: 37.71859032558816,
|
||||||
|
lng2: 123.3984375,
|
||||||
|
lat2: 39.639537564366684
|
||||||
|
}
|
||||||
|
], {
|
||||||
|
parser: {
|
||||||
|
type: 'json',
|
||||||
|
x: 'lng1',
|
||||||
|
y: 'lat1',
|
||||||
|
x1: 'lng2',
|
||||||
|
y1: 'lat2',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.size(1)
|
||||||
|
.shape('greatcircle')
|
||||||
|
.color('#ff0000')
|
||||||
|
.style({
|
||||||
|
opacity: 0.8,
|
||||||
|
blur: 0.99,
|
||||||
|
});
|
||||||
|
scene.addLayer(layer);
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public render() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<div
|
||||||
|
id="map"
|
||||||
|
style={{
|
||||||
|
position: 'absolute',
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
right: 0,
|
||||||
|
bottom: 0,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
import { PointLayer, CityBuildingLayer, Scene } from '@antv/l7';
|
||||||
|
import { GaodeMap, GaodeMap2 } from '@antv/l7-maps';
|
||||||
|
import * as React from 'react';
|
||||||
|
import * as dat from 'dat.gui';
|
||||||
|
|
||||||
|
|
||||||
|
export default class Amap2demo_citybuilding extends React.Component {
|
||||||
|
// @ts-ignore
|
||||||
|
private scene: Scene;
|
||||||
|
|
||||||
|
public componentWillUnmount() {
|
||||||
|
this.scene.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async componentDidMount() {
|
||||||
|
const response = await fetch(
|
||||||
|
'https://gw.alipayobjects.com/os/rmsportal/vmvAxgsEwbpoSWbSYvix.json',
|
||||||
|
);
|
||||||
|
const scene = new Scene({
|
||||||
|
id: 'map',
|
||||||
|
map: new GaodeMap2({
|
||||||
|
style: 'dark',
|
||||||
|
center: [121.507674, 31.223043],
|
||||||
|
pitch: 65.59312320916906,
|
||||||
|
zoom: 15.4
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
const pointLayer = new CityBuildingLayer();
|
||||||
|
pointLayer
|
||||||
|
.source(await response.json())
|
||||||
|
.size('floor', [0, 500])
|
||||||
|
.color('rgba(242,246,250,1.0)')
|
||||||
|
.animate({
|
||||||
|
enable: false,
|
||||||
|
})
|
||||||
|
.style({
|
||||||
|
opacity: 0.7,
|
||||||
|
baseColor: 'rgb(16,16,16)',
|
||||||
|
windowColor: 'rgb(30,60,89)',
|
||||||
|
brightColor: 'rgb(255,176,38)',
|
||||||
|
});
|
||||||
|
scene.addLayer(pointLayer);
|
||||||
|
|
||||||
|
this.scene = scene;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public render() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<div
|
||||||
|
id="map"
|
||||||
|
style={{
|
||||||
|
position: 'absolute',
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
right: 0,
|
||||||
|
bottom: 0,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,73 @@
|
||||||
|
import { vec2, vec3 } from 'gl-matrix';
|
||||||
|
// @ts-ignore
|
||||||
|
import { ILngLat, PointLayer, PolygonLayer, Scene, HeatmapLayer } from '@antv/l7';
|
||||||
|
import { GaodeMap, GaodeMap2 } from '@antv/l7-maps';
|
||||||
|
import * as React from 'react';
|
||||||
|
|
||||||
|
export default class Amap2demo_heatmap extends React.Component {
|
||||||
|
// @ts-ignore
|
||||||
|
private scene: Scene;
|
||||||
|
|
||||||
|
public componentWillUnmount() {
|
||||||
|
this.scene.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async componentDidMount() {
|
||||||
|
const scene = new Scene({
|
||||||
|
id: 'map',
|
||||||
|
map: new GaodeMap2({
|
||||||
|
pitch: 0,
|
||||||
|
center: [ 127.5671666579043, 7.445038892195569 ],
|
||||||
|
zoom: 2.632456779444394
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
this.scene = scene;
|
||||||
|
|
||||||
|
scene.on('loaded', () => {
|
||||||
|
fetch(
|
||||||
|
'https://gw.alipayobjects.com/os/basement_prod/d3564b06-670f-46ea-8edb-842f7010a7c6.json'
|
||||||
|
)
|
||||||
|
.then(res => res.json())
|
||||||
|
.then(data => {
|
||||||
|
const layer = new HeatmapLayer({})
|
||||||
|
.source(data)
|
||||||
|
.shape('heatmap')
|
||||||
|
.size('mag', [ 0, 1.0 ]) // weight映射通道
|
||||||
|
.style({
|
||||||
|
intensity: 2,
|
||||||
|
radius: 20,
|
||||||
|
opacity: 1.0,
|
||||||
|
rampColors: {
|
||||||
|
colors: [
|
||||||
|
'#FF4818',
|
||||||
|
'#F7B74A',
|
||||||
|
'#FFF598',
|
||||||
|
'#91EABC',
|
||||||
|
'#2EA9A1',
|
||||||
|
'#206C7C'
|
||||||
|
].reverse(),
|
||||||
|
positions: [ 0, 0.2, 0.4, 0.6, 0.8, 1.0 ]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
scene.addLayer(layer);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public render() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<div
|
||||||
|
id="map"
|
||||||
|
style={{
|
||||||
|
position: 'absolute',
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
right: 0,
|
||||||
|
bottom: 0,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,76 @@
|
||||||
|
import { vec2, vec3 } from 'gl-matrix';
|
||||||
|
// @ts-ignore
|
||||||
|
import { ILngLat, PointLayer, PolygonLayer, Scene, HeatmapLayer } from '@antv/l7';
|
||||||
|
import { GaodeMap, GaodeMap2 } from '@antv/l7-maps';
|
||||||
|
import * as React from 'react';
|
||||||
|
|
||||||
|
export default class Amap2demo_heatmap extends React.Component {
|
||||||
|
// @ts-ignore
|
||||||
|
private scene: Scene;
|
||||||
|
|
||||||
|
public componentWillUnmount() {
|
||||||
|
this.scene.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async componentDidMount() {
|
||||||
|
const scene = new Scene({
|
||||||
|
id: 'map',
|
||||||
|
map: new GaodeMap2({
|
||||||
|
// pitch: 58.5,
|
||||||
|
pitch: 0,
|
||||||
|
center: [ 111.8759, 30.6942 ],
|
||||||
|
rotation: 0.519,
|
||||||
|
zoom: 3.6116
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
this.scene = scene;
|
||||||
|
|
||||||
|
scene.on('loaded', () => {
|
||||||
|
fetch(
|
||||||
|
'https://gw.alipayobjects.com/os/basement_prod/337ddbb7-aa3f-4679-ab60-d64359241955.json'
|
||||||
|
)
|
||||||
|
.then(res => res.json())
|
||||||
|
.then(data => {
|
||||||
|
const layer = new HeatmapLayer({})
|
||||||
|
.source(data)
|
||||||
|
.size('capacity', [ 0, 1 ])
|
||||||
|
.shape('heatmap3D')
|
||||||
|
// weight映射通道
|
||||||
|
.style({
|
||||||
|
intensity: 10,
|
||||||
|
radius: 5,
|
||||||
|
opacity: 1.0,
|
||||||
|
rampColors: {
|
||||||
|
colors: [
|
||||||
|
'#2E8AE6',
|
||||||
|
'#69D1AB',
|
||||||
|
'#DAF291',
|
||||||
|
'#FFD591',
|
||||||
|
'#FF7A45',
|
||||||
|
'#CF1D49'
|
||||||
|
],
|
||||||
|
positions: [ 0, 0.2, 0.4, 0.6, 0.8, 1.0 ]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
scene.addLayer(layer);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public render() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<div
|
||||||
|
id="map"
|
||||||
|
style={{
|
||||||
|
position: 'absolute',
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
right: 0,
|
||||||
|
bottom: 0,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,91 @@
|
||||||
|
import { vec2, vec3 } from 'gl-matrix';
|
||||||
|
// @ts-ignore
|
||||||
|
import { ILngLat, PointLayer, PolygonLayer, Scene, HeatmapLayer } from '@antv/l7';
|
||||||
|
import { GaodeMap, GaodeMap2 } from '@antv/l7-maps';
|
||||||
|
import * as React from 'react';
|
||||||
|
|
||||||
|
export default class Amap2demo_heatmap_grid extends React.Component {
|
||||||
|
// @ts-ignore
|
||||||
|
private scene: Scene;
|
||||||
|
|
||||||
|
public componentWillUnmount() {
|
||||||
|
this.scene.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async componentDidMount() {
|
||||||
|
const scene = new Scene({
|
||||||
|
id: 'map',
|
||||||
|
map: new GaodeMap2({
|
||||||
|
pitch: 0,
|
||||||
|
center: [ 110.097892, 33.853662 ],
|
||||||
|
zoom: 4.056
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
this.scene = scene;
|
||||||
|
|
||||||
|
scene.on('loaded', () => {
|
||||||
|
fetch(
|
||||||
|
'https://gw.alipayobjects.com/os/basement_prod/7359a5e9-3c5e-453f-b207-bc892fb23b84.csv'
|
||||||
|
)
|
||||||
|
.then(res => res.text())
|
||||||
|
.then(data => {
|
||||||
|
const layer = new HeatmapLayer({})
|
||||||
|
.source(data, {
|
||||||
|
parser: {
|
||||||
|
type: 'csv',
|
||||||
|
x: 'lng',
|
||||||
|
y: 'lat'
|
||||||
|
},
|
||||||
|
transforms: [
|
||||||
|
{
|
||||||
|
type: 'grid',
|
||||||
|
size: 20000,
|
||||||
|
field: 'v',
|
||||||
|
method: 'sum'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
.shape('circle')
|
||||||
|
.style({
|
||||||
|
coverage: 0.9,
|
||||||
|
angle: 0
|
||||||
|
})
|
||||||
|
.color(
|
||||||
|
'count',
|
||||||
|
[
|
||||||
|
'#8C1EB2',
|
||||||
|
'#8C1EB2',
|
||||||
|
'#DA05AA',
|
||||||
|
'#F0051A',
|
||||||
|
'#FF2A3C',
|
||||||
|
'#FF4818',
|
||||||
|
'#FF4818',
|
||||||
|
'#FF8B18',
|
||||||
|
'#F77B00',
|
||||||
|
'#ED9909',
|
||||||
|
'#ECC357',
|
||||||
|
'#EDE59C'
|
||||||
|
].reverse()
|
||||||
|
);
|
||||||
|
scene.addLayer(layer);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public render() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<div
|
||||||
|
id="map"
|
||||||
|
style={{
|
||||||
|
position: 'absolute',
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
right: 0,
|
||||||
|
bottom: 0,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,93 @@
|
||||||
|
import { vec2, vec3 } from 'gl-matrix';
|
||||||
|
// @ts-ignore
|
||||||
|
import { ILngLat, PointLayer, PolygonLayer, Scene, HeatmapLayer } from '@antv/l7';
|
||||||
|
import { GaodeMap, GaodeMap2 } from '@antv/l7-maps';
|
||||||
|
import * as React from 'react';
|
||||||
|
|
||||||
|
export default class Amap2demo_heatmap_hexagon extends React.Component {
|
||||||
|
// @ts-ignore
|
||||||
|
private scene: Scene;
|
||||||
|
|
||||||
|
public componentWillUnmount() {
|
||||||
|
this.scene.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async componentDidMount() {
|
||||||
|
const scene = new Scene({
|
||||||
|
id: 'map',
|
||||||
|
map: new GaodeMap2({
|
||||||
|
// pitch: 58.5,
|
||||||
|
pitch: 43,
|
||||||
|
center: [ 120.13383079335335, 29.651873105004427 ],
|
||||||
|
zoom: 7.068989519212174
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
this.scene = scene;
|
||||||
|
|
||||||
|
scene.on('loaded', () => {
|
||||||
|
fetch(
|
||||||
|
'https://gw.alipayobjects.com/os/basement_prod/a1a8158d-6fe3-424b-8e50-694ccf61c4d7.csv'
|
||||||
|
)
|
||||||
|
.then(res => res.text())
|
||||||
|
.then(data => {
|
||||||
|
const layer = new HeatmapLayer({})
|
||||||
|
.source(data, {
|
||||||
|
parser: {
|
||||||
|
type: 'csv',
|
||||||
|
x: 'lng',
|
||||||
|
y: 'lat'
|
||||||
|
},
|
||||||
|
transforms: [
|
||||||
|
{
|
||||||
|
type: 'hexagon',
|
||||||
|
size: 2500,
|
||||||
|
field: 'v',
|
||||||
|
method: 'sum'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
.size('sum', sum => {
|
||||||
|
return sum * 200;
|
||||||
|
})
|
||||||
|
.shape('hexagonColumn')
|
||||||
|
.style({
|
||||||
|
coverage: 0.8,
|
||||||
|
angle: 0,
|
||||||
|
opacity: 1.0
|
||||||
|
})
|
||||||
|
.color('sum', [
|
||||||
|
'#094D4A',
|
||||||
|
'#146968',
|
||||||
|
'#1D7F7E',
|
||||||
|
'#289899',
|
||||||
|
'#34B6B7',
|
||||||
|
'#4AC5AF',
|
||||||
|
'#5FD3A6',
|
||||||
|
'#7BE39E',
|
||||||
|
'#A1EDB8',
|
||||||
|
'#C3F9CC',
|
||||||
|
'#DEFAC0',
|
||||||
|
'#ECFFB1'
|
||||||
|
]);
|
||||||
|
scene.addLayer(layer);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public render() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<div
|
||||||
|
id="map"
|
||||||
|
style={{
|
||||||
|
position: 'absolute',
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
right: 0,
|
||||||
|
bottom: 0,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
import { ImageLayer, Scene } from '@antv/l7';
|
||||||
|
import { GaodeMap, GaodeMap2, Mapbox } from '@antv/l7-maps';
|
||||||
|
import * as React from 'react';
|
||||||
|
|
||||||
|
export default class Amap2demo_imageLayer extends React.Component {
|
||||||
|
// @ts-ignore
|
||||||
|
private scene: Scene;
|
||||||
|
|
||||||
|
public componentWillUnmount() {
|
||||||
|
this.scene.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async componentDidMount() {
|
||||||
|
const scene = new Scene({
|
||||||
|
id: 'map',
|
||||||
|
map: new GaodeMap2({
|
||||||
|
center: [121.268, 30.3628],
|
||||||
|
pitch: 0,
|
||||||
|
style: 'normal',
|
||||||
|
zoom: 10,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
this.scene = scene;
|
||||||
|
|
||||||
|
scene.on('loaded', () => {
|
||||||
|
const layer = new ImageLayer({});
|
||||||
|
layer.source(
|
||||||
|
'https://gw.alipayobjects.com/zos/rmsportal/FnHFeFklTzKDdUESRNDv.jpg',
|
||||||
|
{
|
||||||
|
parser: {
|
||||||
|
type: 'image',
|
||||||
|
extent: [121.168, 30.2828, 121.384, 30.4219],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
|
scene.addLayer(layer);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public render() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<div
|
||||||
|
id="map"
|
||||||
|
style={{
|
||||||
|
position: 'absolute',
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
right: 0,
|
||||||
|
bottom: 0,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,101 @@
|
||||||
|
import { PointLayer, RasterLayer, Scene } from '@antv/l7';
|
||||||
|
import { GaodeMap, GaodeMap2 } from '@antv/l7-maps';
|
||||||
|
import * as React from 'react';
|
||||||
|
// tslint:disable-next-line:no-submodule-imports
|
||||||
|
// @ts-ignore
|
||||||
|
import * as GeoTIFF from 'geotiff';
|
||||||
|
|
||||||
|
export default class Amap2demo_rasterLayer extends React.Component {
|
||||||
|
// @ts-ignore
|
||||||
|
private scene: Scene;
|
||||||
|
|
||||||
|
private async getTiffData() {
|
||||||
|
const response = await fetch(
|
||||||
|
'https://gw.alipayobjects.com/os/rmsportal/XKgkjjGaAzRyKupCBiYW.dat',
|
||||||
|
// 'https://gw.alipayobjects.com/zos/antvdemo/assets/2019_clip/ndvi_201905.tiff',
|
||||||
|
);
|
||||||
|
const arrayBuffer = await response.arrayBuffer();
|
||||||
|
const tiff = await GeoTIFF.fromArrayBuffer(arrayBuffer);
|
||||||
|
const image = await tiff.getImage();
|
||||||
|
const width = image.getWidth();
|
||||||
|
const height = image.getHeight();
|
||||||
|
const values = await image.readRasters();
|
||||||
|
return {
|
||||||
|
data: values[0],
|
||||||
|
width,
|
||||||
|
height,
|
||||||
|
min: 0,
|
||||||
|
max: 8000,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public componentWillUnmount() {
|
||||||
|
this.scene.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async componentDidMount() {
|
||||||
|
const scene = new Scene({
|
||||||
|
id: 'map',
|
||||||
|
map: new GaodeMap2({
|
||||||
|
center: [121.268, 30.3628],
|
||||||
|
pitch: 0,
|
||||||
|
style: 'dark',
|
||||||
|
zoom: 2,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
this.scene = scene;
|
||||||
|
|
||||||
|
const tiffdata = await this.getTiffData();
|
||||||
|
const layer = new RasterLayer({});
|
||||||
|
const mindata = -0;
|
||||||
|
const maxdata = 8000;
|
||||||
|
layer
|
||||||
|
.source(tiffdata.data, {
|
||||||
|
parser: {
|
||||||
|
type: 'raster',
|
||||||
|
width: tiffdata.width,
|
||||||
|
height: tiffdata.height,
|
||||||
|
extent: [73.482190241, 3.82501784112, 135.106618732, 57.6300459963],
|
||||||
|
// extent: [
|
||||||
|
// 73.4766000000000048,
|
||||||
|
// 18.1054999999999993,
|
||||||
|
// 135.1066187,
|
||||||
|
// 57.630046,
|
||||||
|
// ],
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.style({
|
||||||
|
opacity: 0.8,
|
||||||
|
domain: [mindata, maxdata],
|
||||||
|
clampLow: true,
|
||||||
|
rampColors: {
|
||||||
|
colors: [
|
||||||
|
'rgb(166,97,26)',
|
||||||
|
'rgb(223,194,125)',
|
||||||
|
'rgb(245,245,245)',
|
||||||
|
'rgb(128,205,193)',
|
||||||
|
'rgb(1,133,113)',
|
||||||
|
],
|
||||||
|
positions: [0, 0.25, 0.5, 0.75, 1.0],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
scene.addLayer(layer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public render() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<div
|
||||||
|
id="map"
|
||||||
|
style={{
|
||||||
|
position: 'absolute',
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
right: 0,
|
||||||
|
bottom: 0,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,6 +10,19 @@ import Amap2demo_image from './components/amap2demo_image'
|
||||||
import Amap2demo_polygon from './components/amap2demo_polygon'
|
import Amap2demo_polygon from './components/amap2demo_polygon'
|
||||||
import Amap2demo_polygon_extrude from './components/amap2demo_polygon_extrude'
|
import Amap2demo_polygon_extrude from './components/amap2demo_polygon_extrude'
|
||||||
import Amap2demo_arcLine from "./components/amap2demo_arcLine"
|
import Amap2demo_arcLine from "./components/amap2demo_arcLine"
|
||||||
|
import Amap2demo_arcLine3d from "./components/amap2demo_arcLine3d"
|
||||||
|
import Amap2demo_arcLine_greatCircle from "./components/amap2demo_arcLine_greatCircle"
|
||||||
|
|
||||||
|
import Amap2demo_heatmap from "./components/amap2demo_heatmap"
|
||||||
|
import Amap2demo_heatmap3D from "./components/amap2demo_heatmap3D"
|
||||||
|
import Amap2demo_heatmap_hexagon from "./components/amap2demo_heatmap_hexagon"
|
||||||
|
import Amap2demo_heatmap_grid from "./components/amap2demo_heatmap_grid"
|
||||||
|
|
||||||
|
import Amap2demo_imageLayer from "./components/amap2demo_imagelayer"
|
||||||
|
|
||||||
|
import Amap2demo_rasterLayer from "./components/amap2demo_rasterlayer"
|
||||||
|
|
||||||
|
import Amap2demo_citybuilding from "./components/amap2demo_citybuilding"
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
storiesOf('地图方法', module)
|
storiesOf('地图方法', module)
|
||||||
|
@ -22,3 +35,12 @@ storiesOf('地图方法', module)
|
||||||
.add('高德地图2.0 polygon', () => <Amap2demo_polygon />)
|
.add('高德地图2.0 polygon', () => <Amap2demo_polygon />)
|
||||||
.add('高德地图2.0 polygon_extrude', () => <Amap2demo_polygon_extrude />)
|
.add('高德地图2.0 polygon_extrude', () => <Amap2demo_polygon_extrude />)
|
||||||
.add('高德地图2.0 line_arc', () => <Amap2demo_arcLine />)
|
.add('高德地图2.0 line_arc', () => <Amap2demo_arcLine />)
|
||||||
|
.add('高德地图2.0 line_arc3d', () => <Amap2demo_arcLine3d />)
|
||||||
|
.add('高德地图2.0 line_arc3d_greatCircle', () => <Amap2demo_arcLine_greatCircle />)
|
||||||
|
.add('高德地图2.0 heatmap', () => <Amap2demo_heatmap />)
|
||||||
|
.add('高德地图2.0 heatmap3D', () => <Amap2demo_heatmap3D />)
|
||||||
|
.add('高德地图2.0 heatmap3D/hexagon', () => <Amap2demo_heatmap_hexagon />)
|
||||||
|
.add('高德地图2.0 heatmap3D/grid', () => <Amap2demo_heatmap_grid />)
|
||||||
|
.add('高德地图2.0 imageLayer', () => <Amap2demo_imageLayer />)
|
||||||
|
.add('高德地图2.0 rasterLayer', () => <Amap2demo_rasterLayer />)
|
||||||
|
.add('高德地图2.0 citybuildLayer', () => <Amap2demo_citybuilding />)
|
||||||
|
|
Loading…
Reference in New Issue