@terra.gl/core 0.0.1-alpha.11 → 0.0.1-alpha.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -748,7 +748,7 @@ export declare function concatenateTypedArrays<T extends TypedArray>(...typedArr
748
748
  * @param zoom - 缩放级别
749
749
  * @returns 包含 WGS84 坐标数组的 GeoJSON geometry 对象 { type: string, coordinates: any }
750
750
  */
751
- export declare function convertGeometryToWGS84(geometryData: any, tileX: number, tileY: number, zoom: number): GeoJSONGeometry;
751
+ export declare function convertGeometryToWGS84(geometryData: any, tileX: number, tileY: number, zoom: number): GeoJSONGeometry_2;
752
752
 
753
753
  /**
754
754
  * 基础坐标类型
@@ -787,6 +787,136 @@ export declare interface CustomStyle extends BaseStyle {
787
787
  build: () => Object3D | Promise<Object3D>;
788
788
  }
789
789
 
790
+ declare interface DomEventMap extends BaseEventMap<Map_2> {
791
+ /** 事件的地理坐标(可选) */
792
+ coordinate?: Coordinate;
793
+ }
794
+
795
+ /**
796
+ * 单个绘制模式定义:
797
+ * - actions: 参与的事件序列(目前主要是 click / mousemove / dblclick)
798
+ * - create: 第一次点击时创建几何对象
799
+ * - update: 每次新增顶点或移动时更新几何
800
+ * - generate: 结束时生成最终结果(可以是 Feature,也可以是原几何)
801
+ * - clickLimit: 最少点击次数(达到就可以结束,通常配合 dblclick)
802
+ */
803
+ declare type DrawModeDefinition = {
804
+ actions: Array<"click" | "mousemove" | "dblclick">;
805
+ create: (start: Coordinate, evt: DomEventMap) => any;
806
+ update: (coords: Coordinate[], geometry: any, evt: DomEventMap) => void;
807
+ generate: (geometry: any, coords: Coordinate[]) => any;
808
+ clickLimit?: number;
809
+ };
810
+
811
+ /**
812
+ * DrawTool:通用绘图工具
813
+ *
814
+ * 负责:
815
+ * - 处理 Map 的 DOM 事件(click/mousemove/dblclick)
816
+ * - 维护顶点序列 _clickCoords
817
+ * - 调用模式定义的 create/update/generate
818
+ * - 向外触发:drawstart / drawvertex / drawend / drawing 等事件
819
+ */
820
+ export declare class DrawTool extends MapTool {
821
+ /** 配置 */
822
+ options: DrawToolOptions;
823
+ /** 当前模式定义 */
824
+ private _modeDef?;
825
+ /** 当前绘制中的顶点序列 */
826
+ private _clickCoords;
827
+ /** 是否正在绘制中 */
828
+ private _isDrawing;
829
+ /** 当前绘制中的几何对象(由 mode.create/create 返回) */
830
+ private _geometry;
831
+ /** 内部统一草图图层 */
832
+ private _draftLayer?;
833
+ /**
834
+ * 注册一个绘制模式
835
+ */
836
+ static registerMode(name: string, def: DrawModeDefinition): void;
837
+ /**
838
+ * 获取已注册的模式
839
+ */
840
+ static getModeDefinition(name: string): DrawModeDefinition | undefined;
841
+ constructor(options: DrawToolOptions);
842
+ /**
843
+ * 获取当前模式名称(统一转为小写)
844
+ */
845
+ getMode(): string;
846
+ /**
847
+ * 设置绘制模式:会清空当前绘制状态
848
+ */
849
+ setMode(mode: string): this;
850
+ /**
851
+ * 子类实现:返回需要绑定到 Map 的事件映射
852
+ */
853
+ protected getEvents(): {
854
+ click: (evt: DomEventMap) => void;
855
+ mousemove: (evt: DomEventMap) => void;
856
+ dblclick: (evt: DomEventMap) => void;
857
+ };
858
+ /**
859
+ * 启用时同步一下模式定义
860
+ */
861
+ protected onEnable(): void;
862
+ /**
863
+ * 禁用时结束当前绘制,并清理草图图层
864
+ */
865
+ protected onDisable(): void;
866
+ /**
867
+ * 确保当前 mode 有对应的定义
868
+ */
869
+ private _ensureMode;
870
+ /**
871
+ * 处理 click 事件:
872
+ * - 第一次 click:开始绘制,调用 mode.create,触发 drawstart
873
+ * - 后续 click:追加顶点,调用 mode.update,触发 drawvertex
874
+ * - 若达到 clickLimit,则结束绘制
875
+ */
876
+ private _handleClick;
877
+ /**
878
+ * 处理 mousemove 事件:
879
+ * - 仅在绘制中才更新几何
880
+ * - 不修改 _clickCoords,只用临时 coords 传给 update
881
+ */
882
+ private _handleMouseMove;
883
+ /**
884
+ * 处理 dblclick:
885
+ * - 如果正在绘制,则直接结束
886
+ */
887
+ private _handleDblClick;
888
+ /**
889
+ * 正常结束一次绘制:调用 mode.generate 并触发 drawend
890
+ */
891
+ private _finishDrawing;
892
+ /**
893
+ * 静默结束(不触发 drawend),用于切换模式 / 禁用工具
894
+ */
895
+ private _finishDrawingSilently;
896
+ /**
897
+ * 内部:获取或创建统一草图图层
898
+ */
899
+ _getOrCreateDraftLayer(): OverlayLayer<Feature>;
900
+ /**
901
+ * 内部:销毁草图图层
902
+ */
903
+ private _destroyDraftLayer;
904
+ }
905
+
906
+ /**
907
+ * DrawTool 的配置项
908
+ */
909
+ declare type DrawToolOptions = MapToolOptions & {
910
+ /** 模式名称,例如 'line' / 'polygon' / 'point' */
911
+ mode: string;
912
+ /** 是否在一次绘制结束后自动禁用工具 */
913
+ once?: boolean;
914
+ /** 主几何的样式(线 / 面) */
915
+ geometryStyle?: StyleInput;
916
+ /** 锚点样式 */
917
+ vertexStyle?: StyleInput | null;
918
+ };
919
+
790
920
  /**
791
921
  * 边缘索引类型
792
922
  * @description 定义网格四边的顶点索引
@@ -802,6 +932,10 @@ export declare type EdgeIndices = {
802
932
  northIndices: Uint16Array | Uint32Array;
803
933
  };
804
934
 
935
+ declare class EmptyBase {
936
+ constructor(..._args: any[]);
937
+ }
938
+
805
939
  /**
806
940
  * 创建一个空基类(仅用于混入起点)
807
941
  */
@@ -922,7 +1056,7 @@ declare abstract class Feature extends Feature_base implements ICollidable {
922
1056
  /** Three.js几何对象 */
923
1057
  _threeGeometry: Object3D | Line2;
924
1058
  /** GeoJSON几何数据 */
925
- _geometry: GeoJSONGeometry_2;
1059
+ _geometry: GeoJSONGeometry;
926
1060
  /** 所属图层 */
927
1061
  _layer?: Layer;
928
1062
  /** 当前样式 */
@@ -1224,19 +1358,19 @@ declare type FeatureOptions = {
1224
1358
  rotateAngle?: number;
1225
1359
  };
1226
1360
 
1361
+ /**
1362
+ * GeoJSON几何类型联合类型
1363
+ */
1364
+ declare type GeoJSONGeometry = Point_2 | MultiPoint | LineString_2 | MultiLineString_2 | Polygon_2 | MultiPolygon;
1365
+
1227
1366
  /**
1228
1367
  * GeoJSON Geometry 的返回类型 (用于 GeoJSON 兼容输出)
1229
1368
  */
1230
- declare interface GeoJSONGeometry {
1369
+ declare interface GeoJSONGeometry_2 {
1231
1370
  type: string;
1232
1371
  coordinates: any;
1233
1372
  }
1234
1373
 
1235
- /**
1236
- * GeoJSON几何类型联合类型
1237
- */
1238
- declare type GeoJSONGeometry_2 = Point_2 | MultiPoint | LineString_2 | MultiLineString_2 | Polygon_2 | MultiPolygon;
1239
-
1240
1374
  /**
1241
1375
  * GeoJSON 兼容的 WGS84 坐标数组 [Lng, Lat]
1242
1376
  */
@@ -2787,6 +2921,114 @@ export declare type MapOptionsType = {
2787
2921
  FeatureEvents?: boolean;
2788
2922
  };
2789
2923
 
2924
+ /**
2925
+ * 地图工具基类
2926
+ *
2927
+ * - 管理工具的生命周期(addTo / enable / disable / remove)
2928
+ * - 与 Map 的事件系统对接(内部统一注册/注销事件)
2929
+ * - 保证同一张地图同时只存在一个激活工具
2930
+ */
2931
+ export declare abstract class MapTool extends MapTool_base {
2932
+ /** 绑定的地图实例 */
2933
+ protected _map?: Map_2;
2934
+ /** 是否启用中 */
2935
+ protected _enabled: boolean;
2936
+ /** 缓存绑定到 Map 上的事件处理函数,便于 off 时移除 */
2937
+ private _boundHandlers;
2938
+ /**
2939
+ * @param options 工具配置
2940
+ */
2941
+ constructor(options?: MapToolOptions);
2942
+ /**
2943
+ * 将工具添加到地图上,并自动启用。
2944
+ * 同一张 Map 上会保证只有一个激活的 MapTool。
2945
+ */
2946
+ addTo(map: Map_2): this;
2947
+ /**
2948
+ * 获取当前绑定的地图实例
2949
+ */
2950
+ getMap(): Map_2 | undefined;
2951
+ /**
2952
+ * 启用工具:绑定事件 + 调用 onEnable 钩子
2953
+ */
2954
+ enable(): this;
2955
+ /**
2956
+ * 禁用工具:解绑事件 + 调用 onDisable 钩子
2957
+ */
2958
+ disable(): this;
2959
+ /**
2960
+ * 工具是否处于启用状态
2961
+ */
2962
+ isEnabled(): boolean;
2963
+ /**
2964
+ * 从地图上移除工具
2965
+ */
2966
+ remove(): this;
2967
+ /**
2968
+ * 子类实现:返回需要绑定到 Map 上的事件映射
2969
+ *
2970
+ * key: 事件名(如 'click', 'mousemove')
2971
+ * value: 事件处理函数(参数为 Map 的事件数据)
2972
+ *
2973
+ * 注意:
2974
+ * - 不要求提前 bind(this),MapTool 内部会统一绑定 this
2975
+ */
2976
+ protected abstract getEvents(): Record<string, (e: any) => void>;
2977
+ /**
2978
+ * 生命周期钩子:工具刚 addTo(map) 时调用
2979
+ */
2980
+ protected onAdd?(): void;
2981
+ /**
2982
+ * 生命周期钩子:工具 enable() 时调用
2983
+ */
2984
+ protected onEnable?(): void;
2985
+ /**
2986
+ * 生命周期钩子:工具 disable() 时调用
2987
+ */
2988
+ protected onDisable?(): void;
2989
+ /**
2990
+ * 内部:绑定 Map 事件
2991
+ */
2992
+ private _bindEvents;
2993
+ /**
2994
+ * 内部:解绑 Map 事件
2995
+ */
2996
+ private _unbindEvents;
2997
+ }
2998
+
2999
+ declare const MapTool_base: {
3000
+ new (...args: any[]): {
3001
+ eventClass: EventClass;
3002
+ on: (type: string, listener: (data?: any) => void) => EventClass;
3003
+ trigger: (type: string, data?: any) => EventClass;
3004
+ off: (type: string, listener: (...args: any[]) => void) => EventClass;
3005
+ };
3006
+ } & {
3007
+ new (...args: any[]): {
3008
+ [x: string]: any;
3009
+ options: any;
3010
+ _isUpdatingOptions?: boolean;
3011
+ _initHooksCalled?: boolean;
3012
+ _initHooks?: Function[];
3013
+ proxyOptions(): /*elided*/ any;
3014
+ callInitHooks(): /*elided*/ any;
3015
+ setOptions(options: ClassOptions): /*elided*/ any;
3016
+ config(conf?: string | ClassOptions, value?: any): ClassOptions | /*elided*/ any;
3017
+ onConfig(_conf: ClassOptions): void;
3018
+ _visitInitHooks(proto: {
3019
+ _initHooks: any;
3020
+ }): void;
3021
+ };
3022
+ mergeOptions(options: ClassOptions): /*elided*/ any & typeof EmptyBase;
3023
+ addInitHook(fn: Function | string, ...args: any[]): /*elided*/ any & typeof EmptyBase;
3024
+ include(...sources: any[]): /*elided*/ any & typeof EmptyBase;
3025
+ } & typeof EmptyBase;
3026
+
3027
+ /**
3028
+ * MapTool 配置项(预留,将来可以扩展)
3029
+ */
3030
+ declare type MapToolOptions = ClassOptions & {};
3031
+
2790
3032
  /**
2791
3033
  * Martini网格瓦片生成器
2792
3034
  * @description 基于RTIN(Right-Triangulated Irregular Networks)方法的高度图瓦片生成器