mirror of https://gitee.com/antv-l7/antv-l7
fix(layer): 去除线图层绘制异常的问题
处理线图层数据存在重复点的时候,绘制的线图层粗细表现异常的问题。
This commit is contained in:
parent
687986a6d5
commit
4323ef5d2f
|
@ -1,48 +0,0 @@
|
|||
import { Scene, PolygonLayer, LineLayer } from '@antv/l7';
|
||||
import { GaodeMap } from '@antv/l7-maps';
|
||||
|
||||
const scene = new Scene({
|
||||
id: 'map',
|
||||
map: new GaodeMap({
|
||||
pitch: 0,
|
||||
style: 'light',
|
||||
center: [ 107.042225, 37.66565 ],
|
||||
zoom: 3.87
|
||||
})
|
||||
});
|
||||
|
||||
fetch('https://gw.alipayobjects.com/os/rmsportal/JToMOWvicvJOISZFCkEI.json')
|
||||
.then(res => res.json())
|
||||
.then(data => {
|
||||
const colors = [
|
||||
'#D7F9F0',
|
||||
'#A6E1E0',
|
||||
'#72BED6',
|
||||
'#5B8FF9',
|
||||
'#3474DB',
|
||||
'#005CBE',
|
||||
'#00419F',
|
||||
'#00287E'
|
||||
];
|
||||
const layer = new PolygonLayer({})
|
||||
.source(data)
|
||||
.color('name', colors)
|
||||
.shape('fill')
|
||||
.active(true)
|
||||
.style({
|
||||
opacity: 0.9
|
||||
});
|
||||
|
||||
const layer2 = new LineLayer({
|
||||
zIndex: 2
|
||||
})
|
||||
.source(data)
|
||||
.color('#fff')
|
||||
.size(0.3)
|
||||
.style({
|
||||
opacity: 1
|
||||
});
|
||||
|
||||
scene.addLayer(layer);
|
||||
scene.addLayer(layer2);
|
||||
});
|
|
@ -1,144 +0,0 @@
|
|||
import { Container } from 'inversify';
|
||||
import 'reflect-metadata';
|
||||
import { TYPES } from '../../../index';
|
||||
import GlobalConfigService from '../ConfigService';
|
||||
import { IGlobalConfigService } from '../IConfigService';
|
||||
|
||||
describe('ConfigService', () => {
|
||||
let container: Container;
|
||||
let configService: IGlobalConfigService;
|
||||
|
||||
beforeAll(() => {
|
||||
container = new Container();
|
||||
container
|
||||
.bind<IGlobalConfigService>(TYPES.IGlobalConfigService)
|
||||
.to(GlobalConfigService);
|
||||
configService = container.get<IGlobalConfigService>(
|
||||
TYPES.IGlobalConfigService,
|
||||
);
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
container.unbind(TYPES.IGlobalConfigService);
|
||||
});
|
||||
|
||||
it("should validate scene's options according to JSON schema", () => {
|
||||
const { valid, errorText } = configService.validateSceneConfig({
|
||||
id: 0,
|
||||
});
|
||||
expect(valid).toBeFalsy();
|
||||
expect(errorText).toMatch('id should be string');
|
||||
|
||||
expect(
|
||||
configService.validateSceneConfig({
|
||||
id: 'map',
|
||||
}).valid,
|
||||
).toBeTruthy();
|
||||
});
|
||||
|
||||
it("should validate map's `zoom` option", () => {
|
||||
const { valid, errorText } = configService.validateMapConfig({
|
||||
zoom: 100,
|
||||
minZoom: 100,
|
||||
maxZoom: -2,
|
||||
});
|
||||
expect(valid).toBeFalsy();
|
||||
expect(errorText).toMatch('zoom should be <= 24');
|
||||
expect(errorText).toMatch('minZoom should be <= 24');
|
||||
expect(errorText).toMatch('maxZoom should be >= -1');
|
||||
|
||||
expect(
|
||||
configService.validateMapConfig({
|
||||
zoom: 10,
|
||||
minZoom: 1,
|
||||
maxZoom: 15,
|
||||
}).valid,
|
||||
).toBeTruthy();
|
||||
});
|
||||
|
||||
it("should validate map's `pitch` option", () => {
|
||||
const { valid, errorText } = configService.validateMapConfig({
|
||||
pitch: '1',
|
||||
});
|
||||
expect(valid).toBeFalsy();
|
||||
expect(errorText).toMatch('pitch should be number');
|
||||
|
||||
expect(
|
||||
configService.validateMapConfig({
|
||||
pitch: 10,
|
||||
}).valid,
|
||||
).toBeTruthy();
|
||||
});
|
||||
|
||||
it("should validate map's `center` option", () => {
|
||||
const { valid, errorText } = configService.validateMapConfig({
|
||||
center: [1, 2, 3],
|
||||
});
|
||||
expect(valid).toBeFalsy();
|
||||
expect(errorText).toMatch('center should NOT have more than 2 items');
|
||||
|
||||
const { valid: v2, errorText: e2 } = configService.validateMapConfig({
|
||||
center: [1],
|
||||
});
|
||||
expect(v2).toBeFalsy();
|
||||
expect(e2).toMatch('center should NOT have fewer than 2 items');
|
||||
|
||||
const { valid: v3, errorText: e3 } = configService.validateMapConfig({
|
||||
center: 100,
|
||||
});
|
||||
expect(v3).toBeFalsy();
|
||||
expect(e3).toMatch('center should be array');
|
||||
|
||||
expect(
|
||||
configService.validateMapConfig({
|
||||
center: [100, 100],
|
||||
}).valid,
|
||||
).toBeTruthy();
|
||||
});
|
||||
|
||||
it("should validate layer's options according to JSON schema", () => {
|
||||
configService.registerLayerConfigSchemaValidator('testLayer', {
|
||||
properties: {
|
||||
opacity: {
|
||||
type: 'number',
|
||||
minimum: 0,
|
||||
maximum: 1,
|
||||
},
|
||||
enablePicking: {
|
||||
type: 'boolean',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const { valid, errorText } = configService.validateLayerConfig(
|
||||
'testLayer',
|
||||
{ opacity: 'invalid' },
|
||||
);
|
||||
expect(valid).toBeFalsy();
|
||||
expect(errorText).toMatch('opacity should be number');
|
||||
|
||||
expect(
|
||||
configService.validateLayerConfig('testLayer', {
|
||||
opacity: 1.5,
|
||||
}).valid,
|
||||
).toBeFalsy();
|
||||
|
||||
expect(
|
||||
configService.validateLayerConfig('testLayer', {
|
||||
enablePicking: 1.5,
|
||||
}).valid,
|
||||
).toBeFalsy();
|
||||
|
||||
expect(
|
||||
configService.validateLayerConfig('testLayer', {
|
||||
opacity: 1.0,
|
||||
}).valid,
|
||||
).toBeTruthy();
|
||||
|
||||
expect(
|
||||
configService.validateLayerConfig('testLayer', {
|
||||
opacity: 0.0,
|
||||
}).valid,
|
||||
).toBeTruthy();
|
||||
});
|
||||
});
|
|
@ -1,65 +0,0 @@
|
|||
import { PointLayer, Scene } from '@antv/l7';
|
||||
import { GaodeMap, Mapbox } from '@antv/l7-maps';
|
||||
import * as React from 'react';
|
||||
// @ts-ignore
|
||||
export default class Light extends React.Component {
|
||||
// @ts-ignore
|
||||
private scene: Scene;
|
||||
|
||||
public componentWillUnmount() {
|
||||
this.scene.destroy();
|
||||
}
|
||||
|
||||
public async componentDidMount() {
|
||||
const response = await fetch(
|
||||
'https://alipay-rmsdeploy-image.cn-hangzhou.alipay.aliyun-inc.com/antvdemo/assets/city/bj.csv',
|
||||
);
|
||||
const pointsData = await response.text();
|
||||
|
||||
const scene = new Scene({
|
||||
id: 'map',
|
||||
map: new GaodeMap({
|
||||
pitch: 0,
|
||||
style: 'dark',
|
||||
center: [116.405289, 39.904987],
|
||||
zoom: 6,
|
||||
}),
|
||||
});
|
||||
this.scene = scene;
|
||||
scene.on('loaded', async () => {
|
||||
const pointLayer = new PointLayer({
|
||||
blend: 'normal',
|
||||
})
|
||||
.source(pointsData, {
|
||||
parser: {
|
||||
type: 'csv',
|
||||
x: 'lng',
|
||||
y: 'lat',
|
||||
},
|
||||
})
|
||||
.size(1)
|
||||
.color('#ffa842')
|
||||
.style({
|
||||
opacity: 1,
|
||||
});
|
||||
|
||||
scene.addLayer(pointLayer);
|
||||
this.scene = scene;
|
||||
});
|
||||
}
|
||||
|
||||
public render() {
|
||||
return (
|
||||
<div
|
||||
id="map"
|
||||
style={{
|
||||
position: 'absolute',
|
||||
top: 0,
|
||||
left: 0,
|
||||
right: 0,
|
||||
bottom: 0,
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue