Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

「WIP」wip: 复现设置数据为空的案例 #2483

Open
wants to merge 27 commits into
base: master
Choose a base branch
from
Open
Changes from 4 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
9f03717
refactor: 重构高德地图 V2 以视口进行同步 (#2387)
lvisei Apr 17, 2024
6a1d703
Merge branch 'master' into beta
lvisei Apr 17, 2024
6ffc717
wip: data shake case
lvisei Apr 19, 2024
5c82d3a
Merge branch 'master' into fix/data-shake
lvisei Apr 24, 2024
6166750
Merge branch 'master' into beta
lvisei Apr 24, 2024
33f505d
fix: 新版高德大于 21 级别抖动问题
lvisei Apr 28, 2024
a44d34e
Merge branch 'fix/amap-data-shake' into beta
lvisei Apr 28, 2024
0913661
fix: Mapbox/Maplibre 20 层级以上数据偏移问题 (#2416)
lvisei Apr 30, 2024
21ec03a
Merge branch 'master' into beta
lvisei Apr 30, 2024
46efdc5
chore: set to beta version
lvisei Apr 30, 2024
969b533
refactor: remove old amap v1 and v2 (#2435)
lvisei May 6, 2024
048c203
chore: add changeset
lvisei May 6, 2024
3f508ff
fix: type EventEmitter
lvisei May 6, 2024
18db6f7
chore: set changeset
lvisei May 6, 2024
4a73001
chore: version (beta) (#2442)
github-actions[bot] May 6, 2024
d408bdb
fix: mapbox 下部分面数据图层绘制异常 (#2453)
lvisei May 15, 2024
e9b9583
Merge branch 'master' into beta
lvisei May 16, 2024
ed86b03
Merge branch 'master' into beta
lvisei May 16, 2024
7e3b672
fix: 修复 WebGPU 模式渲染问题 (#2450)
lvisei May 16, 2024
3e33888
fix: mapbox 线图层的贴图变形 (#2474)
lvisei May 16, 2024
05dd5cc
refactor: set default renderer to device (#2477)
lvisei May 16, 2024
37b72bd
chore: set changeset
lvisei May 16, 2024
c4c6004
chore: version (beta) (#2480)
github-actions[bot] May 16, 2024
f68e1be
revert: use cache for createInputLayout
lvisei May 17, 2024
87a7e8b
chore: set changesets
lvisei May 17, 2024
5e4a474
chore: type throttle
lvisei May 17, 2024
6f9e431
wip: 复现设置数据为空的案例
lvisei May 17, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions examples/constants.ts
Original file line number Diff line number Diff line change
@@ -4,10 +4,10 @@ export const MAP_TYPES: RenderDemoMap[] = [
'Map',
'GaodeMap',
'GaodeMapNext',
'BaiduMap',
'Mapbox',
'MapLibre',
'BaiduMap',
'TencentMap',
'Mapbox',
'TMap',
'GoogleMap',
] as const;
1 change: 1 addition & 0 deletions examples/demos/basemap/amap-data.ts
Original file line number Diff line number Diff line change
@@ -10,6 +10,7 @@ export function MapRender(options: RenderDemoOptions) {
style: 'normal',
center: [121.434765, 31.256735],
zoom: 14.83,
maxZoom: 25,
}),
});
const geoData = {
1 change: 1 addition & 0 deletions examples/demos/basemap/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export { MapRender as amapData } from './amap-data';
export { MapRender as wgs84Data } from './wgs84-data';
73 changes: 73 additions & 0 deletions examples/demos/basemap/wgs84-data.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import { LineLayer, Scene, Source } from '@antv/l7';
import * as allMap from '@antv/l7-maps';
import type { Map } from 'maplibre-gl';
import type { RenderDemoOptions } from '../../types';

export function MapRender(options: RenderDemoOptions) {
const scene = new Scene({
id: 'map',
renderer: options.renderer,
map: new allMap[options.map]({
style: ['MapLibre', 'Mapbox'].includes(options.map)
? 'https://basemaps.cartocdn.com/gl/positron-nolabels-gl-style/style.json'
: 'normal',
center: [121.434765, 31.256735],
zoom: 14.83,
maxZoom: 23.9,
}),
});
const geoData = {
type: 'FeatureCollection',
features: [
{
type: 'Feature',
properties: {},
geometry: {
type: 'LineString',
coordinates: [
[120.10121458655186, 30.269329295915544],
[120.10122467185921, 30.2693341645727],
[120.10123176240315, 30.269323019911795],
],
},
},
],
};

const source = new Source(geoData);
const layer = new LineLayer({ blend: 'normal', autoFit: true })
.source(source)
.size(2)
.shape('line')
.color('#f00')
.style({
opacity: 1,
});

scene.on('loaded', () => {
scene.addLayer(layer);
});

if (scene.getType() === 'mapbox') {
const baseMap = scene.map as Map;
baseMap.on('load', () => {
baseMap.addSource('route', {
type: 'geojson',
data: geoData,
});
baseMap.addLayer({
id: 'route',
type: 'line',
source: 'route',
layout: {
'line-join': 'round',
'line-cap': 'round',
},
paint: {
'line-color': '#0083FE',
'line-width': 2,
},
});
});
}
}
53 changes: 46 additions & 7 deletions examples/demos/bugfix/data-shake.ts
Original file line number Diff line number Diff line change
@@ -21,20 +21,59 @@ export function MapRender(options: RenderDemoOptions) {
id: 'map',
renderer: options.renderer,
map: new allMap[options.map]({
style: 'normal',
center: [121.434765, 31.256735],
zoom: 14.83,
style: ['MapLibre', 'Mapbox'].includes(options.map)
? 'https://basemaps.cartocdn.com/gl/positron-nolabels-gl-style/style.json'
: 'normal',
center: [120.10321541789858, 30.261273569440405],
// zoom: 23,
zoom: 21.588541277244076,
maxZoom: 23,
}),
});

const layer = new PointLayer({ autoFit: true })
const layer = new PointLayer({ autoFit: false })
.source(GEO_DATA)
.size(10)
.color('#f00')
.shape('simple');
.size(15)
.color('rgb(255, 0, 0)')
.shape('circle')
.style({
stroke: '#0083FE',
strokeWidth: 2,
// unit: 'meter',
});

scene.on('loaded', () => {
scene.addLayer(layer);
// scene.setZoomAndCenter(22, [120.10348, 30.261506]);

// const mapType = scene.getType();
// if (!['default', 'mapbox'].includes(mapType)) return;
// setTimeout(() => {
// const isMapbox = mapType === 'mapbox';
// const dom = document.querySelector(
// isMapbox ? '.l7-marker-container' : '.l7-canvas-container',
// );
// // console.log('dom: ', dom);
// const wheelEvt = new WheelEvent('wheel', {
// bubbles: true,
// cancelable: true,
// composed: true,
// clientX: 1329,
// clientY: 168,
// deltaY: 200,
// });
// // console.log('wheelEvt: ', wheelEvt);
// dom?.dispatchEvent(wheelEvt);

// const wheelEvt2 = new WheelEvent('wheel', {
// bubbles: true,
// cancelable: true,
// composed: true,
// clientX: 1329,
// clientY: 168,
// deltaY: 400,
// });
// dom?.dispatchEvent(wheelEvt2);
// }, 1000 * 3);
});
}
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -68,6 +68,7 @@
"geotiff": "^2.0.1",
"kdbush": "^4.0.2",
"lil-gui": "^0.19.1",
"maplibre-gl": "^3.5.2",
"pmtiles": "^2.7.2",
"react": "^18.2.0",
"react-dom": "^18.2.0",
26 changes: 23 additions & 3 deletions packages/maps/src/amap-next/map.ts
Original file line number Diff line number Diff line change
@@ -118,13 +118,14 @@ export default class BMapService extends BaseMap<AMap.Map> {
};

private getViewState() {
const { center, zoom } = getMapHighPrecisionState(this.map);
const option = {
center: [this.map.getCenter().getLng(), this.map.getCenter().getLat()] as [number, number],
center: center,
viewportWidth: this.map.getContainer()!.clientWidth,
viewportHeight: this.map.getContainer()!.clientHeight,
bearing: -this.map.getRotation(),
pitch: this.map.getPitch(),
zoom: this.map.getZoom() - ZOOM_OFFSET,
zoom: zoom - ZOOM_OFFSET,
};

return option;
@@ -292,7 +293,11 @@ export default class BMapService extends BaseMap<AMap.Map> {
}

public fitBounds(extent: Bounds): void {
this.map.setBounds(new AMap.Bounds([extent[0][0], extent[0][1], extent[1][0], extent[1][1]]));
this.map.setBounds(
new AMap.Bounds([extent[0][0], extent[0][1], extent[1][0], extent[1][1]]),
// @ts-expect-error 立即缩放到指定位置
true,
);
}

public setZoomAndCenter(zoom: number, center: [number, number]): void {
@@ -433,3 +438,18 @@ export default class BMapService extends BaseMap<AMap.Map> {
this.map.destroy();
}
}

/**
* 访问高精度的地图状态(临时解决方案)
* - 解决 map.getCenter() 方法只返回小数点五位有效数据
* - 解决 map.getZoom() 方法只返回小数点两位有效数据
*/
function getMapHighPrecisionState(map: AMap.Map) {
// @ts-expect-error 访问未暴露的内部属性
const viewStatus = map._view.getOptions();

const center: [number, number] = viewStatus.center;
const zoom: number = viewStatus.zoom;

return { center, zoom };
}
22 changes: 10 additions & 12 deletions packages/maps/src/lib/web-mercator-viewport.ts
Original file line number Diff line number Diff line change
@@ -2,22 +2,20 @@ import type { IMapCamera, IViewport } from '@antv/l7-core';
import WebMercatorViewport from 'viewport-mercator-project';

export default class Viewport implements IViewport {
public viewport: WebMercatorViewport;
public viewport = new WebMercatorViewport();

public syncWithMapCamera(mapCamera: Partial<IMapCamera>) {
const { center, zoom, pitch, bearing, viewportHeight, viewportWidth } = mapCamera;

const preView = this.viewport
? {
width: this.viewport.width,
height: this.viewport.height,
longitude: this.viewport.center[0],
latitude: this.viewport.center[1],
zoom: this.viewport.zoom,
pitch: this.viewport.pitch,
bearing: this.viewport.bearing,
}
: {};
const preView = {
width: this.viewport.width,
height: this.viewport.height,
longitude: this.viewport.center[0],
latitude: this.viewport.center[1],
zoom: this.viewport.zoom,
pitch: this.viewport.pitch,
bearing: this.viewport.bearing,
};

this.viewport = new WebMercatorViewport({
...preView,
6 changes: 5 additions & 1 deletion packages/maps/src/utils/amap/AMapBaseService.ts
Original file line number Diff line number Diff line change
@@ -248,7 +248,11 @@ export default abstract class AMapBaseService implements IMapService<AMap.Map &
}

public fitBounds(extent: Bounds): void {
this.map.setBounds(new AMap.Bounds([extent[0][0], extent[0][1], extent[1][0], extent[1][1]]));
this.map.setBounds(
new AMap.Bounds([extent[0][0], extent[0][1], extent[1][0], extent[1][1]]),
// @ts-expect-error 立即缩放到指定位置
true,
);
}

public setZoomAndCenter(zoom: number, center: [number, number]): void {
Loading