From f45c6a19d10dafcb792ef1e9107e4a8853400ef3 Mon Sep 17 00:00:00 2001 From: "@thinkinggis" Date: Wed, 19 Oct 2022 10:44:24 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=8B=BE=E5=8F=96=E6=93=8D=E4=BD=9C=20(?= =?UTF-8?q?#1405)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev-demos/tile/district/chinamap.tsx | 1 + dev-demos/tile/district/rasterData.tsx | 4 ++-- dev-demos/tile/district/worldmap.tsx | 2 ++ .../services/interaction/PickingService.ts | 5 +++-- .../core/src/services/layer/ILayerService.ts | 11 ++++++---- .../core/src/services/layer/LayerService.ts | 20 +++++++++++++++++++ packages/layers/src/core/BaseLayer.ts | 2 -- .../src/tile/service/TileLayerService.ts | 2 +- .../src/tile/service/TilePickService.ts | 8 +++----- .../tile/tileFactory/layers/TileDebugLayer.ts | 1 + .../layers/src/tile/tileLayer/MapTileLayer.ts | 4 ++-- packages/layers/src/tile/tileLayer/base.ts | 7 +++++++ 12 files changed, 49 insertions(+), 18 deletions(-) diff --git a/dev-demos/tile/district/chinamap.tsx b/dev-demos/tile/district/chinamap.tsx index 2a813fa515..501a5ab563 100644 --- a/dev-demos/tile/district/chinamap.tsx +++ b/dev-demos/tile/district/chinamap.tsx @@ -67,6 +67,7 @@ export default () => { stencil: true, map: new Map({ center: [112, 30], + // zoom: 12, zoom: 3, }), diff --git a/dev-demos/tile/district/rasterData.tsx b/dev-demos/tile/district/rasterData.tsx index b68f58d987..fce01eef99 100644 --- a/dev-demos/tile/district/rasterData.tsx +++ b/dev-demos/tile/district/rasterData.tsx @@ -75,8 +75,8 @@ export default () => { .then((res) => res.json()) .then((maskData) => { const layer = new RasterLayer({ - // mask: true, - // maskfence: maskData, + mask: true, + maskfence: maskData, }); const tileSource = new Source( diff --git a/dev-demos/tile/district/worldmap.tsx b/dev-demos/tile/district/worldmap.tsx index 9dd777c40a..2b0b0199f4 100644 --- a/dev-demos/tile/district/worldmap.tsx +++ b/dev-demos/tile/district/worldmap.tsx @@ -21,6 +21,7 @@ export default () => { map: new Map({ center: [60, 30], // zoom: 12, + minZoom: 0, zoom: 1, }), }); @@ -51,6 +52,7 @@ export default () => { zIndex: 1, }) .source(source) + .select(true) .shape('fill') .color('NAME_CHN', (NAME_CHN) => { const namestr = unicode2Char(NAME_CHN); diff --git a/packages/core/src/services/interaction/PickingService.ts b/packages/core/src/services/interaction/PickingService.ts index a728ff83a3..a543bd9a43 100644 --- a/packages/core/src/services/interaction/PickingService.ts +++ b/packages/core/src/services/interaction/PickingService.ts @@ -281,15 +281,16 @@ export default class PickingService implements IPickingService { type === 'click' && pickedColors?.toString() !== [0, 0, 0, 0].toString() ) { + const selectedId = decodePickingColor(pickedColors); if ( layer.getCurrentSelectedId() === null || selectedId !== layer.getCurrentSelectedId() ) { - this.selectFeature(layer, pickedColors); + this.layerService.selectFeature(layer, pickedColors); layer.setCurrentSelectedId(selectedId); } else { - this.selectFeature(layer, new Uint8Array([0, 0, 0, 0])); // toggle select + this.layerService.selectFeature(layer, new Uint8Array([0, 0, 0, 0])); // toggle select layer.setCurrentSelectedId(null); } // if (!layer.isVector) { diff --git a/packages/core/src/services/layer/ILayerService.ts b/packages/core/src/services/layer/ILayerService.ts index 465a1a27a8..343ece84ec 100644 --- a/packages/core/src/services/layer/ILayerService.ts +++ b/packages/core/src/services/layer/ILayerService.ts @@ -237,18 +237,19 @@ export interface ITileLayerManager extends IBaseTileLayerManager{ export interface IBaseTileLayer { sourceLayer: string; - pickRender(target: IInteractionTarget):void; parent: ILayer; - tileLayerManager: IBaseTileLayerManager; + tileLayerManager: ITileLayerManager; tilesetManager: TilesetManager | undefined; + pickRender(target: IInteractionTarget):void; + selectFeature(pickedColors: Uint8Array | undefined):void; + highlightPickedFeature(pickedColors: Uint8Array | undefined):void; children: ILayer[]; scaleField: any; render(isPicking?: boolean): void; destroy(): void; } export interface ITileLayer extends IBaseTileLayer{ - - tileLayerManager: ITileLayerManager; + pickRender(target: IInteractionTarget):void; pickLayers(target: IInteractionTarget): boolean; clearPick(type: string): void; clearPickState(): void; @@ -667,6 +668,8 @@ export interface ILayerService { setEnableRender(flag: boolean): void; getOESTextureFloat(): boolean; pickRender(layer: ILayer,target?: IInteractionTarget):void + selectFeature(layer: ILayer, pickedColors: Uint8Array | undefined):void; + highlightPickedFeature(layer: ILayer, pickedColors: Uint8Array | undefined):void; destroy(): void; } diff --git a/packages/core/src/services/layer/LayerService.ts b/packages/core/src/services/layer/LayerService.ts index 252eeeec92..f7bc61fe09 100644 --- a/packages/core/src/services/layer/LayerService.ts +++ b/packages/core/src/services/layer/LayerService.ts @@ -185,6 +185,7 @@ export default class LayerService implements ILayerService { .forEach((layer) => { this.layerList.push(layer); }); + } public destroy() { @@ -226,6 +227,9 @@ export default class LayerService implements ILayerService { public getShaderPickStat() { return this.shaderPicking; } + + // For Pick + // 拾取绘制 public pickRender(layer: ILayer,target: IInteractionTarget) { if(layer.tileLayer) { @@ -248,6 +252,22 @@ export default class LayerService implements ILayerService { } + public selectFeature(layer: ILayer, pickedColors: Uint8Array | undefined) { + + if(layer.tileLayer) { + return layer.tileLayer.selectFeature(pickedColors) + } + // @ts-ignore + const [r, g, b] = pickedColors; + layer.hooks.beforeSelect.call([r, g, b]); + } + + public highlightPickedFeature(layer: ILayer,pickedColors: Uint8Array | undefined): void { + if(layer.tileLayer) { + return layer.tileLayer.highlightPickedFeature(pickedColors) + } + } + public clear() { const color = rgb2arr(this.mapService.bgColor) as [ number, diff --git a/packages/layers/src/core/BaseLayer.ts b/packages/layers/src/core/BaseLayer.ts index f28c71c523..f018850628 100644 --- a/packages/layers/src/core/BaseLayer.ts +++ b/packages/layers/src/core/BaseLayer.ts @@ -1302,8 +1302,6 @@ export default class BaseLayer ) { isPick = true; } - if (type === 'click') - console.log('enableSelect', type, this.isVisible(), enableSelect, isPick); return this.isVisible() && isPick; } diff --git a/packages/layers/src/tile/service/TileLayerService.ts b/packages/layers/src/tile/service/TileLayerService.ts index a1cacd7a20..fb5c63b7af 100644 --- a/packages/layers/src/tile/service/TileLayerService.ts +++ b/packages/layers/src/tile/service/TileLayerService.ts @@ -19,7 +19,7 @@ export class TileLayerService { this.parent = parent; } get tiles():Tile[] { - return this.tiles; + return this._tiles; } hasTile(tileKey: string): boolean { diff --git a/packages/layers/src/tile/service/TilePickService.ts b/packages/layers/src/tile/service/TilePickService.ts index 1e40409e9a..facfbdc038 100644 --- a/packages/layers/src/tile/service/TilePickService.ts +++ b/packages/layers/src/tile/service/TilePickService.ts @@ -1,6 +1,6 @@ import { ILayerService } from '@antv/l7-core'; import { TileLayerService } from './TileLayerService'; -import { ILayer, IInteractionTarget } from '@antv/l7-core'; +import { IInteractionTarget } from '@antv/l7-core'; import Tile from '../tileFactory/Tile'; export interface ITilePickServiceOptions { layerService: ILayerService; @@ -20,10 +20,9 @@ export class TilePickService { this.layerService.pickRender(pickLayer); } } - selectFeature(layer: ILayer, pickedColors: Uint8Array | undefined) { + selectFeature(pickedColors: Uint8Array | undefined) { // @ts-ignore const [r, g, b] = pickedColors; - layer.hooks.beforeSelect.call([r, g, b]); this.tileLayerService.tiles.map((tile: Tile) => { const layers = tile.getLayers(); layers.forEach((layer) => { @@ -31,10 +30,9 @@ export class TilePickService { }); }); } - highlightPickedFeature(layer: ILayer, pickedColors: Uint8Array | undefined) { + highlightPickedFeature(pickedColors: Uint8Array | undefined) { // @ts-ignore const [r, g, b] = pickedColors; - layer.hooks.beforeSelect.call([r, g, b]); this.tileLayerService.tiles.map((tile: Tile) => { const layers = tile.getLayers(); layers.forEach((layer) => { diff --git a/packages/layers/src/tile/tileFactory/layers/TileDebugLayer.ts b/packages/layers/src/tile/tileFactory/layers/TileDebugLayer.ts index 4a0d87a483..b0ee5cba5f 100644 --- a/packages/layers/src/tile/tileFactory/layers/TileDebugLayer.ts +++ b/packages/layers/src/tile/tileFactory/layers/TileDebugLayer.ts @@ -4,6 +4,7 @@ import TileModel from '../../models/tileModel'; export default class TileDebugLayer extends BaseLayer { public type: string = 'TileDebugLayer'; + public zIndex:number = 10000; public defaultSourceConfig = { data: [], options: { diff --git a/packages/layers/src/tile/tileLayer/MapTileLayer.ts b/packages/layers/src/tile/tileLayer/MapTileLayer.ts index 2c40a54bfb..053250bd98 100644 --- a/packages/layers/src/tile/tileLayer/MapTileLayer.ts +++ b/packages/layers/src/tile/tileLayer/MapTileLayer.ts @@ -1,14 +1,14 @@ import { IBaseTileLayer, ITileLayerOPtions, - IBaseTileLayerManager, + // IBaseTileLayerManager, } from '@antv/l7-core'; import { BaseMapTileLayerManager } from '../manager/mapLayerManager'; import { Base } from './base'; export class MapTileLayer extends Base implements IBaseTileLayer { - public tileLayerManager: IBaseTileLayerManager; + // public tileLayerManager: IBaseTileLayerManager; constructor({ parent, rendererService, diff --git a/packages/layers/src/tile/tileLayer/base.ts b/packages/layers/src/tile/tileLayer/base.ts index a71483dcdd..e83362cfba 100644 --- a/packages/layers/src/tile/tileLayer/base.ts +++ b/packages/layers/src/tile/tileLayer/base.ts @@ -184,6 +184,13 @@ export class Base { public pickRender(target: IInteractionTarget) { this.tilePickService.pickRender(target); } + public selectFeature(pickedColors: Uint8Array | undefined) { + this.tilePickService.selectFeature(pickedColors) + } + + public highlightPickedFeature(pickedColors: Uint8Array | undefined) { + this.tilePickService.highlightPickedFeature(pickedColors) + } }