@tarojs/components-react 4.2.0 → 4.2.1-beta.1
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/components/image/index.js +5 -3
- package/dist/components/image/index.js.map +1 -1
- package/dist/components/map/MapContext.js +628 -0
- package/dist/components/map/MapContext.js.map +1 -0
- package/dist/components/map/MapCustomCallout.js +91 -0
- package/dist/components/map/MapCustomCallout.js.map +1 -0
- package/dist/components/map/common.js +4 -0
- package/dist/components/map/common.js.map +1 -0
- package/dist/components/map/createMapContext.js +34 -0
- package/dist/components/map/createMapContext.js.map +1 -0
- package/dist/components/map/handler.js +50 -0
- package/dist/components/map/handler.js.map +1 -0
- package/dist/components/map/index.js +329 -0
- package/dist/components/map/index.js.map +1 -0
- package/dist/components/picker/index.js +76 -35
- package/dist/components/picker/index.js.map +1 -1
- package/dist/components/picker/picker-group.js +477 -127
- package/dist/components/picker/picker-group.js.map +1 -1
- package/dist/components/refresher/index.js +5 -5
- package/dist/components/refresher/index.js.map +1 -1
- package/dist/components/scroll-view/index.js +80 -36
- package/dist/components/scroll-view/index.js.map +1 -1
- package/dist/components/switch/index.js +125 -0
- package/dist/components/switch/index.js.map +1 -0
- package/dist/components/switch/style/index.scss.js +4 -0
- package/dist/components/switch/style/index.scss.js.map +1 -0
- package/dist/contexts/ScrollElementContext.js +6 -0
- package/dist/contexts/ScrollElementContext.js.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/original/components/image/index.js +5 -3
- package/dist/original/components/image/index.js.map +1 -1
- package/dist/original/components/image/style/index.scss +5 -1
- package/dist/original/components/map/MapContext.js +628 -0
- package/dist/original/components/map/MapContext.js.map +1 -0
- package/dist/original/components/map/MapCustomCallout.js +91 -0
- package/dist/original/components/map/MapCustomCallout.js.map +1 -0
- package/dist/original/components/map/common.js +4 -0
- package/dist/original/components/map/common.js.map +1 -0
- package/dist/original/components/map/createMapContext.js +34 -0
- package/dist/original/components/map/createMapContext.js.map +1 -0
- package/dist/original/components/map/handler.js +50 -0
- package/dist/original/components/map/handler.js.map +1 -0
- package/dist/original/components/map/index.js +329 -0
- package/dist/original/components/map/index.js.map +1 -0
- package/dist/original/components/picker/index.js +76 -35
- package/dist/original/components/picker/index.js.map +1 -1
- package/dist/original/components/picker/picker-group.js +477 -127
- package/dist/original/components/picker/picker-group.js.map +1 -1
- package/dist/original/components/picker/style/index.scss +9 -8
- package/dist/original/components/refresher/index.js +5 -5
- package/dist/original/components/refresher/index.js.map +1 -1
- package/dist/original/components/scroll-view/index.js +80 -36
- package/dist/original/components/scroll-view/index.js.map +1 -1
- package/dist/original/components/switch/index.js +125 -0
- package/dist/original/components/switch/index.js.map +1 -0
- package/dist/original/components/switch/style/index.scss +35 -0
- package/dist/original/contexts/ScrollElementContext.js +6 -0
- package/dist/original/contexts/ScrollElementContext.js.map +1 -0
- package/dist/original/index.js +6 -2
- package/dist/original/index.js.map +1 -1
- package/dist/solid/components/image/index.js +5 -3
- package/dist/solid/components/image/index.js.map +1 -1
- package/dist/solid/components/picker/index.js +82 -39
- package/dist/solid/components/picker/index.js.map +1 -1
- package/dist/solid/components/picker/picker-group.js +500 -151
- package/dist/solid/components/picker/picker-group.js.map +1 -1
- package/dist/solid/components/refresher/index.js +5 -5
- package/dist/solid/components/refresher/index.js.map +1 -1
- package/dist/solid/components/scroll-view/index.js +84 -40
- package/dist/solid/components/scroll-view/index.js.map +1 -1
- package/dist/solid/contexts/ScrollElementContext.js +6 -0
- package/dist/solid/contexts/ScrollElementContext.js.map +1 -0
- package/dist/solid/index.css +1 -1
- package/dist/solid/index.js +1 -1
- package/package.json +8 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MapContext.js","sources":["../../../src/components/map/MapContext.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { logPrefix } from './common'\nimport { MethodHandler } from './handler'\n\nimport type { MapContext as TaroMapContext } from '@tarojs/taro'\n/**\n * 全局地图实例存储\n * key: Map 组件的 id\n * value: TMap.Map 实例\n */\nconst mapInstances = new Map<string, TMap.Map>()\n\n/**\n * 注册地图实例(同时创建 MapContextImpl 并挂载到 window)\n * @param id Map 组件的 id\n * @param instance 地图实例\n */\nexport function registerMapInstance(id: string, instance: TMap.Map): void {\n mapInstances.set(id, instance)\n console.log(logPrefix, '[MapContext] 注册地图实例:', id, instance)\n\n // ✅ 方案 F:创建 MapContextImpl 并挂载到 window\n if (typeof window !== 'undefined') {\n // 确保 window 对象存在\n if (!(window as any).__TARO_MAP_CONTEXTS__) {\n (window as any).__TARO_MAP_CONTEXTS__ = new Map()\n }\n\n // ✅ 在这里 new MapContextImpl(有 TMap 类型)\n const contextImpl = new MapContextImpl(instance)\n\n // ✅ 存储 MapContextImpl 实例(不是 TMap.Map 实例)\n ;(window as any).__TARO_MAP_CONTEXTS__.set(id, contextImpl)\n\n console.log(logPrefix, '[MapContext] 挂载 MapContextImpl 到 window:', id)\n }\n}\n\n/**\n * 注销地图实例(同时清理 window)\n * @param id Map 组件的 id\n */\nexport function unregisterMapInstance(id: string): void {\n mapInstances.delete(id)\n console.log(logPrefix, '[MapContext] 注销地图实例:', id)\n\n // ✅ 从 window 清理 MapContextImpl\n if (typeof window !== 'undefined') {\n (window as any).__TARO_MAP_CONTEXTS__?.delete(id)\n console.log(logPrefix, '[MapContext] 从 window 清理 MapContextImpl:', id)\n }\n}\n\n/**\n * 获取地图实例\n * @param id Map 组件的 id\n * @returns 地图实例,如果不存在则返回 undefined\n */\nexport function getMapInstance(id: string): TMap.Map | undefined {\n return mapInstances.get(id)\n}\n\n/**\n * MapContext 实现类\n * 将腾讯地图 API 适配到 Taro MapContext 接口\n */\nexport class MapContextImpl implements TaroMapContext {\n private map: TMap.Map | null\n\n constructor(map: TMap.Map | null) {\n this.map = map\n if (!map) {\n console.warn(logPrefix, '[MapContext] 地图实例为空,部分方法将不可用')\n }\n }\n\n /**\n * 缩放视野包含所有经纬度\n * @supported weapp, tt\n */\n includePoints(option: TaroMapContext.IncludePointsOption): Promise<TaroGeneral.CallbackResult> {\n const handle = new MethodHandler({\n name: 'includePoints',\n success: option?.success,\n fail: option?.fail,\n complete: option?.complete,\n })\n\n if (!this.map) {\n return handle.fail({ errMsg: '地图实例不存在' })\n }\n\n try {\n const { points, padding } = option\n console.log(logPrefix, '[MapContext.includePoints] 开始执行:', { points, padding })\n\n // 创建空的 LatLngBounds\n const bounds = new TMap.LatLngBounds()\n // 转换坐标格式: {latitude, longitude} -> TMap.LatLng 并扩展边界\n points.forEach((p) => {\n const latLng = new TMap.LatLng(p.latitude, p.longitude)\n bounds.extend(latLng)\n })\n console.log(logPrefix, '[MapContext.includePoints] LatLngBounds:', bounds, 'padding:', padding)\n\n // 转换 padding 格式: Taro [top, right, bottom, left] -> TMap {top, right, bottom, left}\n let paddingOption: number | { top: number, right: number, bottom: number, left: number } | undefined\n if (padding) {\n if (Array.isArray(padding)) {\n // padding 是数组格式 [top, right, bottom, left]\n paddingOption = {\n top: padding[0],\n right: padding[1],\n bottom: padding[2],\n left: padding[3],\n }\n } else {\n // padding 是数字格式,直接使用\n paddingOption = padding as number\n }\n }\n\n // 调用地图的 fitBounds 方法\n this.map.fitBounds(bounds, {\n padding: paddingOption,\n })\n\n console.log(logPrefix, '[MapContext.includePoints] 执行成功')\n\n return handle.success({})\n } catch (error: any) {\n console.error(logPrefix, '[MapContext.includePoints] 执行失败:', error)\n return handle.fail({ errMsg: error?.message || String(error) })\n }\n }\n\n /**\n * 获取当前地图中心的经纬度\n * @supported weapp, tt\n */\n getCenterLocation(option?: TaroMapContext.GetCenterLocationOption): Promise<TaroMapContext.GetCenterLocationSuccessCallbackResult> {\n const handle = new MethodHandler({\n name: 'getCenterLocation',\n success: option?.success,\n fail: option?.fail,\n complete: option?.complete,\n })\n\n if (!this.map) {\n return handle.fail({ errMsg: '地图实例不存在' })\n }\n\n try {\n // 调用腾讯地图 API: map.getCenter()\n const center = this.map.getCenter()\n console.log(logPrefix, '[MapContext.getCenterLocation] 执行成功:', center)\n\n return handle.success({\n latitude: center.lat,\n longitude: center.lng,\n })\n } catch (error: any) {\n console.error(logPrefix, '[MapContext.getCenterLocation] 执行失败:', error)\n return handle.fail({ errMsg: error?.message || String(error) })\n }\n }\n\n /**\n * 设置定位点图标\n * @supported weapp, tt\n */\n setLocMarkerIcon(_option: TaroMapContext.SetLocMarkerIconOption): Promise<TaroGeneral.CallbackResult> {\n console.warn(logPrefix, '[MapContext.setLocMarkerIcon] 暂未实现')\n return Promise.reject(new Error('setLocMarkerIcon: 暂未实现'))\n }\n\n /**\n * 将地图中心移置当前定位点\n * @supported weapp, tt\n */\n moveToLocation(option: TaroMapContext.MoveToLocationOption): Promise<TaroGeneral.CallbackResult> {\n const handle = new MethodHandler({\n name: 'moveToLocation',\n success: option?.success,\n fail: option?.fail,\n complete: option?.complete,\n })\n\n if (!this.map) {\n return handle.fail({ errMsg: '地图实例不存在' })\n }\n\n try {\n const { latitude, longitude } = option\n console.log(logPrefix, '[MapContext.moveToLocation] 开始执行:', { latitude, longitude })\n\n // 参数校验\n if (latitude === undefined || longitude === undefined) {\n return handle.fail({ errMsg: 'latitude 和 longitude 参数必须提供' })\n }\n\n // 调用腾讯地图 API: map.panTo()\n const latLng = new TMap.LatLng(latitude, longitude)\n this.map.panTo(latLng, {} as any)\n\n console.log(logPrefix, '[MapContext.moveToLocation] 执行成功')\n return handle.success({})\n } catch (error: any) {\n console.error(logPrefix, '[MapContext.moveToLocation] 执行失败:', error)\n return handle.fail({ errMsg: error?.message || String(error) })\n }\n }\n\n /**\n * 平移marker,带动画\n * @supported weapp, tt\n */\n translateMarker(_option: TaroMapContext.TranslateMarkerOption): Promise<TaroGeneral.CallbackResult> {\n console.warn(logPrefix, '[MapContext.translateMarker] 暂未实现')\n return Promise.reject(new Error('translateMarker: 暂未实现'))\n }\n\n /**\n * 沿指定路径移动 marker\n */\n moveAlong(_object: any): void {\n console.warn(logPrefix, '[MapContext.moveAlong] 暂未实现')\n throw new Error('moveAlong: 暂未实现')\n }\n\n /**\n * 获取当前地图的视野范围\n * @supported weapp, tt\n */\n getRegion(option?: TaroMapContext.GetRegionOption): Promise<TaroMapContext.GetRegionSuccessCallbackResult> {\n const handle = new MethodHandler({\n name: 'getRegion',\n success: option?.success,\n fail: option?.fail,\n complete: option?.complete,\n })\n\n if (!this.map) {\n return handle.fail({ errMsg: '地图实例不存在' })\n }\n\n try {\n // 调用腾讯地图 API: map.getBounds()\n const bounds = this.map.getBounds()\n console.log(logPrefix, '[MapContext.getRegion] 执行成功:', bounds)\n\n const sw = bounds.getSouthWest()\n const ne = bounds.getNorthEast()\n\n return handle.success({\n southwest: {\n latitude: sw.lat,\n longitude: sw.lng,\n },\n northeast: {\n latitude: ne.lat,\n longitude: ne.lng,\n },\n })\n } catch (error: any) {\n console.error(logPrefix, '[MapContext.getRegion] 执行失败:', error)\n return handle.fail({ errMsg: error?.message || String(error) })\n }\n }\n\n /**\n * 获取当前地图的旋转角\n * @supported weapp, tt\n */\n getRotate(option?: TaroMapContext.GetRotateOption): Promise<TaroMapContext.GetRotateSuccessCallbackResult> {\n const handle = new MethodHandler({\n name: 'getRotate',\n success: option?.success,\n fail: option?.fail,\n complete: option?.complete,\n })\n\n if (!this.map) {\n return handle.fail({ errMsg: '地图实例不存在' })\n }\n\n try {\n // 调用腾讯地图 API: map.getRotation()\n const rotate = this.map.getRotation()\n console.log(logPrefix, '[MapContext.getRotate] 执行成功:', rotate)\n\n return handle.success({\n rotate: rotate,\n })\n } catch (error: any) {\n console.error(logPrefix, '[MapContext.getRotate] 执行失败:', error)\n return handle.fail({ errMsg: error?.message || String(error) })\n }\n }\n\n /**\n * 获取当前地图的倾斜角\n * @supported weapp, tt\n */\n getSkew(option?: TaroMapContext.GetSkewOption): Promise<TaroMapContext.GetSkewSuccessCallbackResult> {\n const handle = new MethodHandler({\n name: 'getSkew',\n success: option?.success,\n fail: option?.fail,\n complete: option?.complete,\n })\n\n if (!this.map) {\n return handle.fail({ errMsg: '地图实例不存在' })\n }\n\n try {\n // 调用腾讯地图 API: map.getPitch()\n const skew = this.map.getPitch()\n console.log(logPrefix, '[MapContext.getSkew] 执行成功:', skew)\n\n return handle.success({\n skew: skew,\n })\n } catch (error: any) {\n console.error(logPrefix, '[MapContext.getSkew] 执行失败:', error)\n return handle.fail({ errMsg: error?.message || String(error) })\n }\n }\n\n /**\n * 获取当前地图的缩放级别\n * @supported weapp, tt\n */\n getScale(option?: TaroMapContext.GetScaleOption): Promise<TaroMapContext.GetScaleSuccessCallbackResult> {\n const handle = new MethodHandler({\n name: 'getScale',\n success: option?.success,\n fail: option?.fail,\n complete: option?.complete,\n })\n\n if (!this.map) {\n return handle.fail({ errMsg: '地图实例不存在' })\n }\n\n try {\n // 调用腾讯地图 API: map.getZoom()\n const scale = this.map.getZoom()\n console.log(logPrefix, '[MapContext.getScale] 执行成功:', scale)\n\n return handle.success({\n scale: scale,\n })\n } catch (error: any) {\n console.error(logPrefix, '[MapContext.getScale] 执行失败:', error)\n return handle.fail({ errMsg: error?.message || String(error) })\n }\n }\n\n /**\n * 设置地图中心点偏移\n * @supported weapp, tt\n */\n setCenterOffset(option: TaroMapContext.SetCenterOffsetOption): Promise<TaroGeneral.CallbackResult> {\n const handle = new MethodHandler({\n name: 'setCenterOffset',\n success: option?.success,\n fail: option?.fail,\n complete: option?.complete,\n })\n\n if (!this.map) {\n return handle.fail({ errMsg: '地图实例不存在' })\n }\n\n try {\n const { offset } = option\n console.log(logPrefix, '[MapContext.setCenterOffset] 开始执行:', { offset })\n\n // 转换 offset 格式: Taro [x, y] -> TMap {x, y}\n const offsetOption = {\n x: offset[0],\n y: offset[1],\n }\n\n // 调用腾讯地图 API: map.setOffset()\n this.map.setOffset(offsetOption)\n\n console.log(logPrefix, '[MapContext.setCenterOffset] 执行成功')\n return handle.success({})\n } catch (error: any) {\n console.error(logPrefix, '[MapContext.setCenterOffset] 执行失败:', error)\n return handle.fail({ errMsg: error?.message || String(error) })\n }\n }\n\n /**\n * 移除个性化图层\n * @supported weapp\n */\n removeCustomLayer(option: TaroMapContext.RemoveCustomLayerOption): Promise<TaroGeneral.CallbackResult> {\n console.warn(logPrefix, '[MapContext.removeCustomLayer] 暂未实现', option)\n return Promise.reject(new Error('removeCustomLayer: 暂未实现'))\n }\n\n /**\n * 添加个性化图层\n * @supported weapp\n */\n addCustomLayer(option: TaroMapContext.AddCustomLayerOption): Promise<TaroGeneral.CallbackResult> {\n console.warn(logPrefix, '[MapContext.addCustomLayer] 暂未实现', option)\n return Promise.reject(new Error('addCustomLayer: 暂未实现'))\n }\n\n /**\n * 创建自定义图片图层\n * @supported weapp, tt\n */\n addGroundOverlay(option: TaroMapContext.AddGroundLayerOption): Promise<TaroGeneral.CallbackResult> {\n console.warn(logPrefix, '[MapContext.addGroundOverlay] 暂未实现', option)\n return Promise.reject(new Error('addGroundOverlay: 暂未实现'))\n }\n\n /**\n * 添加可视化图层\n * @supported weapp\n */\n addVisualLayer(option: TaroMapContext.AddVisualLayerOption): Promise<TaroGeneral.CallbackResult> {\n console.warn(logPrefix, '[MapContext.addVisualLayer] 暂未实现', option)\n return Promise.reject(new Error('addVisualLayer: 暂未实现'))\n }\n\n /**\n * 移除可视化图层\n * @supported weapp\n */\n removeVisualLayer(option: TaroMapContext.RemoveVisualLayerOption): Promise<TaroGeneral.CallbackResult> {\n console.warn(logPrefix, '[MapContext.removeVisualLayer] 暂未实现', option)\n return Promise.reject(new Error('removeVisualLayer: 暂未实现'))\n }\n\n /**\n * 添加弧线\n * @supported weapp\n */\n addArc(option: TaroMapContext.AddArcOption): Promise<TaroGeneral.CallbackResult> {\n console.warn(logPrefix, '[MapContext.addArc] 暂未实现', option)\n return Promise.reject(new Error('addArc: 暂未实现'))\n }\n\n /**\n * 删除弧线\n * @supported weapp\n */\n removeArc(option: TaroMapContext.RemoveArcOption): Promise<TaroGeneral.CallbackResult> {\n console.warn(logPrefix, '[MapContext.removeArc] 暂未实现', option)\n return Promise.reject(new Error('removeArc: 暂未实现'))\n }\n\n /**\n * 限制地图的显示范围\n * @supported weapp\n */\n setBoundary(option: TaroMapContext.SetBoundaryOption): Promise<TaroGeneral.CallbackResult> {\n const handle = new MethodHandler({\n name: 'setBoundary',\n success: option?.success,\n fail: option?.fail,\n complete: option?.complete,\n })\n\n if (!this.map) {\n return handle.fail({ errMsg: '地图实例不存在' })\n }\n\n try {\n const { southwest, northeast } = option\n console.log(logPrefix, '[MapContext.setBoundary] 开始执行:', { southwest, northeast })\n\n // 转换坐标格式: {latitude, longitude} -> TMap.LatLng\n const sw = new TMap.LatLng(southwest.latitude, southwest.longitude)\n const ne = new TMap.LatLng(northeast.latitude, northeast.longitude)\n const bounds = new TMap.LatLngBounds(sw, ne)\n\n // 调用腾讯地图 API: map.setBoundary()\n this.map.setBoundary(bounds)\n\n console.log(logPrefix, '[MapContext.setBoundary] 执行成功')\n return handle.success({})\n } catch (error: any) {\n console.error(logPrefix, '[MapContext.setBoundary] 执行失败:', error)\n return handle.fail({ errMsg: error?.message || String(error) })\n }\n }\n\n /**\n * 更新自定义图片图层\n * @supported weapp, tt\n */\n updateGroundOverlay(option: TaroMapContext.UpdateGroundOverlayOption): Promise<TaroGeneral.CallbackResult> {\n console.warn(logPrefix, '[MapContext.updateGroundOverlay] 暂未实现', option)\n return Promise.reject(new Error('updateGroundOverlay: 暂未实现'))\n }\n\n /**\n * 移除自定义图片图层\n * @supported weapp, tt\n */\n removeGroundOverlay(option: TaroMapContext.RemoveGroundOverlayOption): Promise<TaroGeneral.CallbackResult> {\n console.warn(logPrefix, '[MapContext.removeGroundOverlay] 暂未实现', option)\n return Promise.reject(new Error('removeGroundOverlay: 暂未实现'))\n }\n\n /**\n * 获取经纬度对应的屏幕坐标\n * @supported weapp\n */\n toScreenLocation(option: TaroMapContext.ToScreenLocationOption): Promise<TaroGeneral.CallbackResult> {\n const handle = new MethodHandler({\n name: 'toScreenLocation',\n success: option?.success,\n fail: option?.fail,\n complete: option?.complete,\n })\n\n if (!this.map) {\n return handle.fail({ errMsg: '地图实例不存在' })\n }\n\n try {\n const { latitude, longitude } = option\n console.log(logPrefix, '[MapContext.toScreenLocation] 开始执行:', { latitude, longitude })\n\n // 转换坐标格式: {latitude, longitude} -> TMap.LatLng\n const latLng = new TMap.LatLng(latitude, longitude)\n\n // 调用腾讯地图 API: map.projectToContainer()\n const point = this.map.projectToContainer(latLng)\n\n console.log(logPrefix, '[MapContext.toScreenLocation] 执行成功:', point)\n return handle.success({\n x: point.x,\n y: point.y,\n })\n } catch (error: any) {\n console.error(logPrefix, '[MapContext.toScreenLocation] 执行失败:', error)\n return handle.fail({ errMsg: error?.message || String(error) })\n }\n }\n\n /**\n * 获取屏幕上的点对应的经纬度\n * @supported weapp\n */\n fromScreenLocation(option: TaroMapContext.FromScreenLocationOption): Promise<TaroGeneral.CallbackResult> {\n const handle = new MethodHandler({\n name: 'fromScreenLocation',\n success: option?.success,\n fail: option?.fail,\n complete: option?.complete,\n })\n\n if (!this.map) {\n return handle.fail({ errMsg: '地图实例不存在' })\n }\n\n try {\n const { x, y } = option\n console.log(logPrefix, '[MapContext.fromScreenLocation] 开始执行:', { x, y })\n\n // 转换坐标格式: {x, y} -> TMap.Point\n const point = new TMap.Point(x, y)\n\n // 调用腾讯地图 API: map.unprojectFromContainer()\n const latLng = this.map.unprojectFromContainer(point)\n\n console.log(logPrefix, '[MapContext.fromScreenLocation] 执行成功:', latLng)\n return handle.success({\n latitude: latLng.lat,\n longitude: latLng.lng,\n })\n } catch (error: any) {\n console.error(logPrefix, '[MapContext.fromScreenLocation] 执行失败:', error)\n return handle.fail({ errMsg: error?.message || String(error) })\n }\n }\n\n /**\n * 拉起地图APP选择导航\n * @supported weapp\n */\n openMapApp(option: TaroMapContext.OpenMapAppOption): Promise<TaroGeneral.CallbackResult> {\n console.warn(logPrefix, '[MapContext.openMapApp] 暂未实现', option)\n return Promise.reject(new Error('openMapApp: 暂未实现'))\n }\n\n /**\n * 添加 marker\n * @supported weapp\n */\n addMarkers(option: TaroMapContext.AddMarkersOption): Promise<TaroGeneral.CallbackResult> {\n console.warn(logPrefix, '[MapContext.addMarkers] 暂未实现', option)\n return Promise.reject(new Error('addMarkers: 暂未实现'))\n }\n\n /**\n * 移除 marker\n * @supported weapp\n */\n removeMarkers(option: TaroMapContext.RemoveMarkersOption): Promise<TaroGeneral.CallbackResult> {\n console.warn(logPrefix, '[MapContext.removeMarkers] 暂未实现', option)\n return Promise.reject(new Error('removeMarkers: 暂未实现'))\n }\n\n /**\n * 初始化点聚合的配置\n * @supported weapp\n */\n initMarkerCluster(option?: TaroMapContext.InitMarkerClusterOption): Promise<TaroGeneral.CallbackResult> {\n console.warn(logPrefix, '[MapContext.initMarkerCluster] 暂未实现', option)\n return Promise.reject(new Error('initMarkerCluster: 暂未实现'))\n }\n\n /**\n * 监听地图事件\n * @supported weapp\n */\n on(\n event: keyof TaroMapContext.MapEvent,\n callback: (res: TaroMapContext.MapEvent[keyof TaroMapContext.MapEvent]) => void\n ): void {\n console.warn(logPrefix, '[MapContext.on] 暂未实现', event, callback)\n throw new Error('on: 暂未实现')\n }\n}\n\nexport { MapContextImpl as MapContext }\n"],"names":["mapInstances","Map","registerMapInstance","id","instance","set","console","log","logPrefix","window","__TARO_MAP_CONTEXTS__","contextImpl","MapContextImpl","unregisterMapInstance","delete","_a","getMapInstance","get","constructor","map","warn","includePoints","option","handle","MethodHandler","name","success","fail","complete","errMsg","points","padding","bounds","TMap","LatLngBounds","forEach","p","latLng","LatLng","latitude","longitude","extend","paddingOption","Array","isArray","top","right","bottom","left","fitBounds","error","message","String","getCenterLocation","center","getCenter","lat","lng","setLocMarkerIcon","_option","Promise","reject","Error","moveToLocation","undefined","panTo","translateMarker","moveAlong","_object","getRegion","getBounds","sw","getSouthWest","ne","getNorthEast","southwest","northeast","getRotate","rotate","getRotation","getSkew","skew","getPitch","getScale","scale","getZoom","setCenterOffset","offset","offsetOption","x","y","setOffset","removeCustomLayer","addCustomLayer","addGroundOverlay","addVisualLayer","removeVisualLayer","addArc","removeArc","setBoundary","updateGroundOverlay","removeGroundOverlay","toScreenLocation","point","projectToContainer","fromScreenLocation","Point","unprojectFromContainer","openMapApp","addMarkers","removeMarkers","initMarkerCluster","on","event","callback"],"mappings":";;;AAAA;AAKA;;;;AAIG;AACH,MAAMA,YAAY,GAAG,IAAIC,GAAG,EAAoB;AAEhD;;;;AAIG;AACa,SAAAC,mBAAmBA,CAACC,EAAU,EAAEC,QAAkB,EAAA;AAChEJ,EAAAA,YAAY,CAACK,GAAG,CAACF,EAAE,EAAEC,QAAQ,CAAC;EAC9BE,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,sBAAsB,EAAEL,EAAE,EAAEC,QAAQ,CAAC;AAE5D;AACA,EAAA,IAAI,OAAOK,MAAM,KAAK,WAAW,EAAE;AACjC;AACA,IAAA,IAAI,CAAEA,MAAc,CAACC,qBAAqB,EAAE;AACzCD,MAAAA,MAAc,CAACC,qBAAqB,GAAG,IAAIT,GAAG,EAAE;AACnD;AAEA;AACA,IAAA,MAAMU,WAAW,GAAG,IAAIC,cAAc,CAACR,QAAQ,CAAC;IAG9CK,MAAc,CAACC,qBAAqB,CAACL,GAAG,CAACF,EAAE,EAAEQ,WAAW,CAAC;IAE3DL,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,0CAA0C,EAAEL,EAAE,CAAC;AACxE;AACF;AAEA;;;AAGG;AACG,SAAUU,qBAAqBA,CAACV,EAAU,EAAA;;AAC9CH,EAAAA,YAAY,CAACc,MAAM,CAACX,EAAE,CAAC;EACvBG,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,sBAAsB,EAAEL,EAAE,CAAC;AAElD;AACA,EAAA,IAAI,OAAOM,MAAM,KAAK,WAAW,EAAE;IACjC,CAACM,EAAA,GAAAN,MAAc,CAACC,qBAAqB,MAAA,IAAA,IAAAK,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,EAAA,CAAED,MAAM,CAACX,EAAE,CAAC;IACjDG,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,0CAA0C,EAAEL,EAAE,CAAC;AACxE;AACF;AAEA;;;;AAIG;AACG,SAAUa,cAAcA,CAACb,EAAU,EAAA;AACvC,EAAA,OAAOH,YAAY,CAACiB,GAAG,CAACd,EAAE,CAAC;AAC7B;AAEA;;;AAGG;MACUS,cAAc,CAAA;EAGzBM,WAAAA,CAAYC,GAAoB,EAAA;IAC9B,IAAI,CAACA,GAAG,GAAGA,GAAG;IACd,IAAI,CAACA,GAAG,EAAE;AACRb,MAAAA,OAAO,CAACc,IAAI,CAACZ,SAAS,EAAE,8BAA8B,CAAC;AACzD;AACF;AAEA;;;AAGG;EACHa,aAAaA,CAACC,MAA0C,EAAA;AACtD,IAAA,MAAMC,MAAM,GAAG,IAAIC,aAAa,CAAC;AAC/BC,MAAAA,IAAI,EAAE,eAAe;AACrBC,MAAAA,OAAO,EAAEJ,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEI,OAAO;AACxBC,MAAAA,IAAI,EAAEL,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEK,IAAI;AAClBC,MAAAA,QAAQ,EAAEN,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEM;AACnB,KAAA,CAAC;AAEF,IAAA,IAAI,CAAC,IAAI,CAACT,GAAG,EAAE;MACb,OAAOI,MAAM,CAACI,IAAI,CAAC;AAAEE,QAAAA,MAAM,EAAE;AAAW,OAAA,CAAC;AAC3C;IAEA,IAAI;MACF,MAAM;QAAEC,MAAM;AAAEC,QAAAA;AAAS,OAAA,GAAGT,MAAM;AAClChB,MAAAA,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,kCAAkC,EAAE;QAAEsB,MAAM;AAAEC,QAAAA;AAAO,OAAE,CAAC;AAE/E;AACA,MAAA,MAAMC,MAAM,GAAG,IAAIC,IAAI,CAACC,YAAY,EAAE;AACtC;AACAJ,MAAAA,MAAM,CAACK,OAAO,CAAEC,CAAC,IAAI;AACnB,QAAA,MAAMC,MAAM,GAAG,IAAIJ,IAAI,CAACK,MAAM,CAACF,CAAC,CAACG,QAAQ,EAAEH,CAAC,CAACI,SAAS,CAAC;AACvDR,QAAAA,MAAM,CAACS,MAAM,CAACJ,MAAM,CAAC;AACvB,OAAC,CAAC;AACF/B,MAAAA,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,0CAA0C,EAAEwB,MAAM,EAAE,UAAU,EAAED,OAAO,CAAC;AAE/F;AACA,MAAA,IAAIW,aAAgG;AACpG,MAAA,IAAIX,OAAO,EAAE;AACX,QAAA,IAAIY,KAAK,CAACC,OAAO,CAACb,OAAO,CAAC,EAAE;AAC1B;AACAW,UAAAA,aAAa,GAAG;AACdG,YAAAA,GAAG,EAAEd,OAAO,CAAC,CAAC,CAAC;AACfe,YAAAA,KAAK,EAAEf,OAAO,CAAC,CAAC,CAAC;AACjBgB,YAAAA,MAAM,EAAEhB,OAAO,CAAC,CAAC,CAAC;YAClBiB,IAAI,EAAEjB,OAAO,CAAC,CAAC;WAChB;AACH,SAAC,MAAM;AACL;AACAW,UAAAA,aAAa,GAAGX,OAAiB;AACnC;AACF;AAEA;AACA,MAAA,IAAI,CAACZ,GAAG,CAAC8B,SAAS,CAACjB,MAAM,EAAE;AACzBD,QAAAA,OAAO,EAAEW;AACV,OAAA,CAAC;AAEFpC,MAAAA,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,iCAAiC,CAAC;AAEzD,MAAA,OAAOe,MAAM,CAACG,OAAO,CAAC,EAAE,CAAC;KAC1B,CAAC,OAAOwB,KAAU,EAAE;MACnB5C,OAAO,CAAC4C,KAAK,CAAC1C,SAAS,EAAE,kCAAkC,EAAE0C,KAAK,CAAC;MACnE,OAAO3B,MAAM,CAACI,IAAI,CAAC;QAAEE,MAAM,EAAE,CAAAqB,KAAK,KAAL,IAAA,IAAAA,KAAK,uBAALA,KAAK,CAAEC,OAAO,KAAIC,MAAM,CAACF,KAAK;AAAG,OAAA,CAAC;AACjE;AACF;AAEA;;;AAGG;EACHG,iBAAiBA,CAAC/B,MAA+C,EAAA;AAC/D,IAAA,MAAMC,MAAM,GAAG,IAAIC,aAAa,CAAC;AAC/BC,MAAAA,IAAI,EAAE,mBAAmB;AACzBC,MAAAA,OAAO,EAAEJ,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEI,OAAO;AACxBC,MAAAA,IAAI,EAAEL,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEK,IAAI;AAClBC,MAAAA,QAAQ,EAAEN,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEM;AACnB,KAAA,CAAC;AAEF,IAAA,IAAI,CAAC,IAAI,CAACT,GAAG,EAAE;MACb,OAAOI,MAAM,CAACI,IAAI,CAAC;AAAEE,QAAAA,MAAM,EAAE;AAAW,OAAA,CAAC;AAC3C;IAEA,IAAI;AACF;MACA,MAAMyB,MAAM,GAAG,IAAI,CAACnC,GAAG,CAACoC,SAAS,EAAE;MACnCjD,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,sCAAsC,EAAE8C,MAAM,CAAC;MAEtE,OAAO/B,MAAM,CAACG,OAAO,CAAC;QACpBa,QAAQ,EAAEe,MAAM,CAACE,GAAG;QACpBhB,SAAS,EAAEc,MAAM,CAACG;AACnB,OAAA,CAAC;KACH,CAAC,OAAOP,KAAU,EAAE;MACnB5C,OAAO,CAAC4C,KAAK,CAAC1C,SAAS,EAAE,sCAAsC,EAAE0C,KAAK,CAAC;MACvE,OAAO3B,MAAM,CAACI,IAAI,CAAC;QAAEE,MAAM,EAAE,CAAAqB,KAAK,KAAL,IAAA,IAAAA,KAAK,uBAALA,KAAK,CAAEC,OAAO,KAAIC,MAAM,CAACF,KAAK;AAAG,OAAA,CAAC;AACjE;AACF;AAEA;;;AAGG;EACHQ,gBAAgBA,CAACC,OAA8C,EAAA;AAC7DrD,IAAAA,OAAO,CAACc,IAAI,CAACZ,SAAS,EAAE,oCAAoC,CAAC;IAC7D,OAAOoD,OAAO,CAACC,MAAM,CAAC,IAAIC,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAC5D;AAEA;;;AAGG;EACHC,cAAcA,CAACzC,MAA2C,EAAA;AACxD,IAAA,MAAMC,MAAM,GAAG,IAAIC,aAAa,CAAC;AAC/BC,MAAAA,IAAI,EAAE,gBAAgB;AACtBC,MAAAA,OAAO,EAAEJ,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEI,OAAO;AACxBC,MAAAA,IAAI,EAAEL,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEK,IAAI;AAClBC,MAAAA,QAAQ,EAAEN,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEM;AACnB,KAAA,CAAC;AAEF,IAAA,IAAI,CAAC,IAAI,CAACT,GAAG,EAAE;MACb,OAAOI,MAAM,CAACI,IAAI,CAAC;AAAEE,QAAAA,MAAM,EAAE;AAAW,OAAA,CAAC;AAC3C;IAEA,IAAI;MACF,MAAM;QAAEU,QAAQ;AAAEC,QAAAA;AAAW,OAAA,GAAGlB,MAAM;AACtChB,MAAAA,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,mCAAmC,EAAE;QAAE+B,QAAQ;AAAEC,QAAAA;AAAS,OAAE,CAAC;AAEpF;AACA,MAAA,IAAID,QAAQ,KAAKyB,SAAS,IAAIxB,SAAS,KAAKwB,SAAS,EAAE;QACrD,OAAOzC,MAAM,CAACI,IAAI,CAAC;AAAEE,UAAAA,MAAM,EAAE;AAA+B,SAAA,CAAC;AAC/D;AAEA;MACA,MAAMQ,MAAM,GAAG,IAAIJ,IAAI,CAACK,MAAM,CAACC,QAAQ,EAAEC,SAAS,CAAC;MACnD,IAAI,CAACrB,GAAG,CAAC8C,KAAK,CAAC5B,MAAM,EAAE,EAAS,CAAC;AAEjC/B,MAAAA,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,kCAAkC,CAAC;AAC1D,MAAA,OAAOe,MAAM,CAACG,OAAO,CAAC,EAAE,CAAC;KAC1B,CAAC,OAAOwB,KAAU,EAAE;MACnB5C,OAAO,CAAC4C,KAAK,CAAC1C,SAAS,EAAE,mCAAmC,EAAE0C,KAAK,CAAC;MACpE,OAAO3B,MAAM,CAACI,IAAI,CAAC;QAAEE,MAAM,EAAE,CAAAqB,KAAK,KAAL,IAAA,IAAAA,KAAK,uBAALA,KAAK,CAAEC,OAAO,KAAIC,MAAM,CAACF,KAAK;AAAG,OAAA,CAAC;AACjE;AACF;AAEA;;;AAGG;EACHgB,eAAeA,CAACP,OAA6C,EAAA;AAC3DrD,IAAAA,OAAO,CAACc,IAAI,CAACZ,SAAS,EAAE,mCAAmC,CAAC;IAC5D,OAAOoD,OAAO,CAACC,MAAM,CAAC,IAAIC,KAAK,CAAC,uBAAuB,CAAC,CAAC;AAC3D;AAEA;;AAEG;EACHK,SAASA,CAACC,OAAY,EAAA;AACpB9D,IAAAA,OAAO,CAACc,IAAI,CAACZ,SAAS,EAAE,6BAA6B,CAAC;AACtD,IAAA,MAAM,IAAIsD,KAAK,CAAC,iBAAiB,CAAC;AACpC;AAEA;;;AAGG;EACHO,SAASA,CAAC/C,MAAuC,EAAA;AAC/C,IAAA,MAAMC,MAAM,GAAG,IAAIC,aAAa,CAAC;AAC/BC,MAAAA,IAAI,EAAE,WAAW;AACjBC,MAAAA,OAAO,EAAEJ,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEI,OAAO;AACxBC,MAAAA,IAAI,EAAEL,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEK,IAAI;AAClBC,MAAAA,QAAQ,EAAEN,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEM;AACnB,KAAA,CAAC;AAEF,IAAA,IAAI,CAAC,IAAI,CAACT,GAAG,EAAE;MACb,OAAOI,MAAM,CAACI,IAAI,CAAC;AAAEE,QAAAA,MAAM,EAAE;AAAW,OAAA,CAAC;AAC3C;IAEA,IAAI;AACF;MACA,MAAMG,MAAM,GAAG,IAAI,CAACb,GAAG,CAACmD,SAAS,EAAE;MACnChE,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,8BAA8B,EAAEwB,MAAM,CAAC;AAE9D,MAAA,MAAMuC,EAAE,GAAGvC,MAAM,CAACwC,YAAY,EAAE;AAChC,MAAA,MAAMC,EAAE,GAAGzC,MAAM,CAAC0C,YAAY,EAAE;MAEhC,OAAOnD,MAAM,CAACG,OAAO,CAAC;AACpBiD,QAAAA,SAAS,EAAE;UACTpC,QAAQ,EAAEgC,EAAE,CAACf,GAAG;UAChBhB,SAAS,EAAE+B,EAAE,CAACd;SACf;AACDmB,QAAAA,SAAS,EAAE;UACTrC,QAAQ,EAAEkC,EAAE,CAACjB,GAAG;UAChBhB,SAAS,EAAEiC,EAAE,CAAChB;AACf;AACF,OAAA,CAAC;KACH,CAAC,OAAOP,KAAU,EAAE;MACnB5C,OAAO,CAAC4C,KAAK,CAAC1C,SAAS,EAAE,8BAA8B,EAAE0C,KAAK,CAAC;MAC/D,OAAO3B,MAAM,CAACI,IAAI,CAAC;QAAEE,MAAM,EAAE,CAAAqB,KAAK,KAAL,IAAA,IAAAA,KAAK,uBAALA,KAAK,CAAEC,OAAO,KAAIC,MAAM,CAACF,KAAK;AAAG,OAAA,CAAC;AACjE;AACF;AAEA;;;AAGG;EACH2B,SAASA,CAACvD,MAAuC,EAAA;AAC/C,IAAA,MAAMC,MAAM,GAAG,IAAIC,aAAa,CAAC;AAC/BC,MAAAA,IAAI,EAAE,WAAW;AACjBC,MAAAA,OAAO,EAAEJ,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEI,OAAO;AACxBC,MAAAA,IAAI,EAAEL,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEK,IAAI;AAClBC,MAAAA,QAAQ,EAAEN,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEM;AACnB,KAAA,CAAC;AAEF,IAAA,IAAI,CAAC,IAAI,CAACT,GAAG,EAAE;MACb,OAAOI,MAAM,CAACI,IAAI,CAAC;AAAEE,QAAAA,MAAM,EAAE;AAAW,OAAA,CAAC;AAC3C;IAEA,IAAI;AACF;MACA,MAAMiD,MAAM,GAAG,IAAI,CAAC3D,GAAG,CAAC4D,WAAW,EAAE;MACrCzE,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,8BAA8B,EAAEsE,MAAM,CAAC;MAE9D,OAAOvD,MAAM,CAACG,OAAO,CAAC;AACpBoD,QAAAA,MAAM,EAAEA;AACT,OAAA,CAAC;KACH,CAAC,OAAO5B,KAAU,EAAE;MACnB5C,OAAO,CAAC4C,KAAK,CAAC1C,SAAS,EAAE,8BAA8B,EAAE0C,KAAK,CAAC;MAC/D,OAAO3B,MAAM,CAACI,IAAI,CAAC;QAAEE,MAAM,EAAE,CAAAqB,KAAK,KAAL,IAAA,IAAAA,KAAK,uBAALA,KAAK,CAAEC,OAAO,KAAIC,MAAM,CAACF,KAAK;AAAG,OAAA,CAAC;AACjE;AACF;AAEA;;;AAGG;EACH8B,OAAOA,CAAC1D,MAAqC,EAAA;AAC3C,IAAA,MAAMC,MAAM,GAAG,IAAIC,aAAa,CAAC;AAC/BC,MAAAA,IAAI,EAAE,SAAS;AACfC,MAAAA,OAAO,EAAEJ,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEI,OAAO;AACxBC,MAAAA,IAAI,EAAEL,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEK,IAAI;AAClBC,MAAAA,QAAQ,EAAEN,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEM;AACnB,KAAA,CAAC;AAEF,IAAA,IAAI,CAAC,IAAI,CAACT,GAAG,EAAE;MACb,OAAOI,MAAM,CAACI,IAAI,CAAC;AAAEE,QAAAA,MAAM,EAAE;AAAW,OAAA,CAAC;AAC3C;IAEA,IAAI;AACF;MACA,MAAMoD,IAAI,GAAG,IAAI,CAAC9D,GAAG,CAAC+D,QAAQ,EAAE;MAChC5E,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,4BAA4B,EAAEyE,IAAI,CAAC;MAE1D,OAAO1D,MAAM,CAACG,OAAO,CAAC;AACpBuD,QAAAA,IAAI,EAAEA;AACP,OAAA,CAAC;KACH,CAAC,OAAO/B,KAAU,EAAE;MACnB5C,OAAO,CAAC4C,KAAK,CAAC1C,SAAS,EAAE,4BAA4B,EAAE0C,KAAK,CAAC;MAC7D,OAAO3B,MAAM,CAACI,IAAI,CAAC;QAAEE,MAAM,EAAE,CAAAqB,KAAK,KAAL,IAAA,IAAAA,KAAK,uBAALA,KAAK,CAAEC,OAAO,KAAIC,MAAM,CAACF,KAAK;AAAG,OAAA,CAAC;AACjE;AACF;AAEA;;;AAGG;EACHiC,QAAQA,CAAC7D,MAAsC,EAAA;AAC7C,IAAA,MAAMC,MAAM,GAAG,IAAIC,aAAa,CAAC;AAC/BC,MAAAA,IAAI,EAAE,UAAU;AAChBC,MAAAA,OAAO,EAAEJ,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEI,OAAO;AACxBC,MAAAA,IAAI,EAAEL,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEK,IAAI;AAClBC,MAAAA,QAAQ,EAAEN,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEM;AACnB,KAAA,CAAC;AAEF,IAAA,IAAI,CAAC,IAAI,CAACT,GAAG,EAAE;MACb,OAAOI,MAAM,CAACI,IAAI,CAAC;AAAEE,QAAAA,MAAM,EAAE;AAAW,OAAA,CAAC;AAC3C;IAEA,IAAI;AACF;MACA,MAAMuD,KAAK,GAAG,IAAI,CAACjE,GAAG,CAACkE,OAAO,EAAE;MAChC/E,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,6BAA6B,EAAE4E,KAAK,CAAC;MAE5D,OAAO7D,MAAM,CAACG,OAAO,CAAC;AACpB0D,QAAAA,KAAK,EAAEA;AACR,OAAA,CAAC;KACH,CAAC,OAAOlC,KAAU,EAAE;MACnB5C,OAAO,CAAC4C,KAAK,CAAC1C,SAAS,EAAE,6BAA6B,EAAE0C,KAAK,CAAC;MAC9D,OAAO3B,MAAM,CAACI,IAAI,CAAC;QAAEE,MAAM,EAAE,CAAAqB,KAAK,KAAL,IAAA,IAAAA,KAAK,uBAALA,KAAK,CAAEC,OAAO,KAAIC,MAAM,CAACF,KAAK;AAAG,OAAA,CAAC;AACjE;AACF;AAEA;;;AAGG;EACHoC,eAAeA,CAAChE,MAA4C,EAAA;AAC1D,IAAA,MAAMC,MAAM,GAAG,IAAIC,aAAa,CAAC;AAC/BC,MAAAA,IAAI,EAAE,iBAAiB;AACvBC,MAAAA,OAAO,EAAEJ,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEI,OAAO;AACxBC,MAAAA,IAAI,EAAEL,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEK,IAAI;AAClBC,MAAAA,QAAQ,EAAEN,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEM;AACnB,KAAA,CAAC;AAEF,IAAA,IAAI,CAAC,IAAI,CAACT,GAAG,EAAE;MACb,OAAOI,MAAM,CAACI,IAAI,CAAC;AAAEE,QAAAA,MAAM,EAAE;AAAW,OAAA,CAAC;AAC3C;IAEA,IAAI;MACF,MAAM;AAAE0D,QAAAA;AAAQ,OAAA,GAAGjE,MAAM;AACzBhB,MAAAA,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,oCAAoC,EAAE;AAAE+E,QAAAA;AAAQ,OAAA,CAAC;AAExE;AACA,MAAA,MAAMC,YAAY,GAAG;AACnBC,QAAAA,CAAC,EAAEF,MAAM,CAAC,CAAC,CAAC;QACZG,CAAC,EAAEH,MAAM,CAAC,CAAC;OACZ;AAED;AACA,MAAA,IAAI,CAACpE,GAAG,CAACwE,SAAS,CAACH,YAAY,CAAC;AAEhClF,MAAAA,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,mCAAmC,CAAC;AAC3D,MAAA,OAAOe,MAAM,CAACG,OAAO,CAAC,EAAE,CAAC;KAC1B,CAAC,OAAOwB,KAAU,EAAE;MACnB5C,OAAO,CAAC4C,KAAK,CAAC1C,SAAS,EAAE,oCAAoC,EAAE0C,KAAK,CAAC;MACrE,OAAO3B,MAAM,CAACI,IAAI,CAAC;QAAEE,MAAM,EAAE,CAAAqB,KAAK,KAAL,IAAA,IAAAA,KAAK,uBAALA,KAAK,CAAEC,OAAO,KAAIC,MAAM,CAACF,KAAK;AAAG,OAAA,CAAC;AACjE;AACF;AAEA;;;AAGG;EACH0C,iBAAiBA,CAACtE,MAA8C,EAAA;IAC9DhB,OAAO,CAACc,IAAI,CAACZ,SAAS,EAAE,qCAAqC,EAAEc,MAAM,CAAC;IACtE,OAAOsC,OAAO,CAACC,MAAM,CAAC,IAAIC,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC7D;AAEA;;;AAGG;EACH+B,cAAcA,CAACvE,MAA2C,EAAA;IACxDhB,OAAO,CAACc,IAAI,CAACZ,SAAS,EAAE,kCAAkC,EAAEc,MAAM,CAAC;IACnE,OAAOsC,OAAO,CAACC,MAAM,CAAC,IAAIC,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1D;AAEA;;;AAGG;EACHgC,gBAAgBA,CAACxE,MAA2C,EAAA;IAC1DhB,OAAO,CAACc,IAAI,CAACZ,SAAS,EAAE,oCAAoC,EAAEc,MAAM,CAAC;IACrE,OAAOsC,OAAO,CAACC,MAAM,CAAC,IAAIC,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAC5D;AAEA;;;AAGG;EACHiC,cAAcA,CAACzE,MAA2C,EAAA;IACxDhB,OAAO,CAACc,IAAI,CAACZ,SAAS,EAAE,kCAAkC,EAAEc,MAAM,CAAC;IACnE,OAAOsC,OAAO,CAACC,MAAM,CAAC,IAAIC,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1D;AAEA;;;AAGG;EACHkC,iBAAiBA,CAAC1E,MAA8C,EAAA;IAC9DhB,OAAO,CAACc,IAAI,CAACZ,SAAS,EAAE,qCAAqC,EAAEc,MAAM,CAAC;IACtE,OAAOsC,OAAO,CAACC,MAAM,CAAC,IAAIC,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC7D;AAEA;;;AAGG;EACHmC,MAAMA,CAAC3E,MAAmC,EAAA;IACxChB,OAAO,CAACc,IAAI,CAACZ,SAAS,EAAE,0BAA0B,EAAEc,MAAM,CAAC;IAC3D,OAAOsC,OAAO,CAACC,MAAM,CAAC,IAAIC,KAAK,CAAC,cAAc,CAAC,CAAC;AAClD;AAEA;;;AAGG;EACHoC,SAASA,CAAC5E,MAAsC,EAAA;IAC9ChB,OAAO,CAACc,IAAI,CAACZ,SAAS,EAAE,6BAA6B,EAAEc,MAAM,CAAC;IAC9D,OAAOsC,OAAO,CAACC,MAAM,CAAC,IAAIC,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACrD;AAEA;;;AAGG;EACHqC,WAAWA,CAAC7E,MAAwC,EAAA;AAClD,IAAA,MAAMC,MAAM,GAAG,IAAIC,aAAa,CAAC;AAC/BC,MAAAA,IAAI,EAAE,aAAa;AACnBC,MAAAA,OAAO,EAAEJ,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEI,OAAO;AACxBC,MAAAA,IAAI,EAAEL,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEK,IAAI;AAClBC,MAAAA,QAAQ,EAAEN,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEM;AACnB,KAAA,CAAC;AAEF,IAAA,IAAI,CAAC,IAAI,CAACT,GAAG,EAAE;MACb,OAAOI,MAAM,CAACI,IAAI,CAAC;AAAEE,QAAAA,MAAM,EAAE;AAAW,OAAA,CAAC;AAC3C;IAEA,IAAI;MACF,MAAM;QAAE8C,SAAS;AAAEC,QAAAA;AAAW,OAAA,GAAGtD,MAAM;AACvChB,MAAAA,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,gCAAgC,EAAE;QAAEmE,SAAS;AAAEC,QAAAA;AAAS,OAAE,CAAC;AAElF;AACA,MAAA,MAAML,EAAE,GAAG,IAAItC,IAAI,CAACK,MAAM,CAACqC,SAAS,CAACpC,QAAQ,EAAEoC,SAAS,CAACnC,SAAS,CAAC;AACnE,MAAA,MAAMiC,EAAE,GAAG,IAAIxC,IAAI,CAACK,MAAM,CAACsC,SAAS,CAACrC,QAAQ,EAAEqC,SAAS,CAACpC,SAAS,CAAC;MACnE,MAAMR,MAAM,GAAG,IAAIC,IAAI,CAACC,YAAY,CAACqC,EAAE,EAAEE,EAAE,CAAC;AAE5C;AACA,MAAA,IAAI,CAACtD,GAAG,CAACgF,WAAW,CAACnE,MAAM,CAAC;AAE5B1B,MAAAA,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,+BAA+B,CAAC;AACvD,MAAA,OAAOe,MAAM,CAACG,OAAO,CAAC,EAAE,CAAC;KAC1B,CAAC,OAAOwB,KAAU,EAAE;MACnB5C,OAAO,CAAC4C,KAAK,CAAC1C,SAAS,EAAE,gCAAgC,EAAE0C,KAAK,CAAC;MACjE,OAAO3B,MAAM,CAACI,IAAI,CAAC;QAAEE,MAAM,EAAE,CAAAqB,KAAK,KAAL,IAAA,IAAAA,KAAK,uBAALA,KAAK,CAAEC,OAAO,KAAIC,MAAM,CAACF,KAAK;AAAG,OAAA,CAAC;AACjE;AACF;AAEA;;;AAGG;EACHkD,mBAAmBA,CAAC9E,MAAgD,EAAA;IAClEhB,OAAO,CAACc,IAAI,CAACZ,SAAS,EAAE,uCAAuC,EAAEc,MAAM,CAAC;IACxE,OAAOsC,OAAO,CAACC,MAAM,CAAC,IAAIC,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAC/D;AAEA;;;AAGG;EACHuC,mBAAmBA,CAAC/E,MAAgD,EAAA;IAClEhB,OAAO,CAACc,IAAI,CAACZ,SAAS,EAAE,uCAAuC,EAAEc,MAAM,CAAC;IACxE,OAAOsC,OAAO,CAACC,MAAM,CAAC,IAAIC,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAC/D;AAEA;;;AAGG;EACHwC,gBAAgBA,CAAChF,MAA6C,EAAA;AAC5D,IAAA,MAAMC,MAAM,GAAG,IAAIC,aAAa,CAAC;AAC/BC,MAAAA,IAAI,EAAE,kBAAkB;AACxBC,MAAAA,OAAO,EAAEJ,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEI,OAAO;AACxBC,MAAAA,IAAI,EAAEL,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEK,IAAI;AAClBC,MAAAA,QAAQ,EAAEN,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEM;AACnB,KAAA,CAAC;AAEF,IAAA,IAAI,CAAC,IAAI,CAACT,GAAG,EAAE;MACb,OAAOI,MAAM,CAACI,IAAI,CAAC;AAAEE,QAAAA,MAAM,EAAE;AAAW,OAAA,CAAC;AAC3C;IAEA,IAAI;MACF,MAAM;QAAEU,QAAQ;AAAEC,QAAAA;AAAW,OAAA,GAAGlB,MAAM;AACtChB,MAAAA,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,qCAAqC,EAAE;QAAE+B,QAAQ;AAAEC,QAAAA;AAAS,OAAE,CAAC;AAEtF;MACA,MAAMH,MAAM,GAAG,IAAIJ,IAAI,CAACK,MAAM,CAACC,QAAQ,EAAEC,SAAS,CAAC;AAEnD;MACA,MAAM+D,KAAK,GAAG,IAAI,CAACpF,GAAG,CAACqF,kBAAkB,CAACnE,MAAM,CAAC;MAEjD/B,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,qCAAqC,EAAE+F,KAAK,CAAC;MACpE,OAAOhF,MAAM,CAACG,OAAO,CAAC;QACpB+D,CAAC,EAAEc,KAAK,CAACd,CAAC;QACVC,CAAC,EAAEa,KAAK,CAACb;AACV,OAAA,CAAC;KACH,CAAC,OAAOxC,KAAU,EAAE;MACnB5C,OAAO,CAAC4C,KAAK,CAAC1C,SAAS,EAAE,qCAAqC,EAAE0C,KAAK,CAAC;MACtE,OAAO3B,MAAM,CAACI,IAAI,CAAC;QAAEE,MAAM,EAAE,CAAAqB,KAAK,KAAL,IAAA,IAAAA,KAAK,uBAALA,KAAK,CAAEC,OAAO,KAAIC,MAAM,CAACF,KAAK;AAAG,OAAA,CAAC;AACjE;AACF;AAEA;;;AAGG;EACHuD,kBAAkBA,CAACnF,MAA+C,EAAA;AAChE,IAAA,MAAMC,MAAM,GAAG,IAAIC,aAAa,CAAC;AAC/BC,MAAAA,IAAI,EAAE,oBAAoB;AAC1BC,MAAAA,OAAO,EAAEJ,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEI,OAAO;AACxBC,MAAAA,IAAI,EAAEL,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEK,IAAI;AAClBC,MAAAA,QAAQ,EAAEN,MAAM,KAAA,IAAA,IAANA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,MAAM,CAAEM;AACnB,KAAA,CAAC;AAEF,IAAA,IAAI,CAAC,IAAI,CAACT,GAAG,EAAE;MACb,OAAOI,MAAM,CAACI,IAAI,CAAC;AAAEE,QAAAA,MAAM,EAAE;AAAW,OAAA,CAAC;AAC3C;IAEA,IAAI;MACF,MAAM;QAAE4D,CAAC;AAAEC,QAAAA;AAAG,OAAA,GAAGpE,MAAM;AACvBhB,MAAAA,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,uCAAuC,EAAE;QAAEiF,CAAC;AAAEC,QAAAA;AAAC,OAAE,CAAC;AAEzE;MACA,MAAMa,KAAK,GAAG,IAAItE,IAAI,CAACyE,KAAK,CAACjB,CAAC,EAAEC,CAAC,CAAC;AAElC;MACA,MAAMrD,MAAM,GAAG,IAAI,CAAClB,GAAG,CAACwF,sBAAsB,CAACJ,KAAK,CAAC;MAErDjG,OAAO,CAACC,GAAG,CAACC,SAAS,EAAE,uCAAuC,EAAE6B,MAAM,CAAC;MACvE,OAAOd,MAAM,CAACG,OAAO,CAAC;QACpBa,QAAQ,EAAEF,MAAM,CAACmB,GAAG;QACpBhB,SAAS,EAAEH,MAAM,CAACoB;AACnB,OAAA,CAAC;KACH,CAAC,OAAOP,KAAU,EAAE;MACnB5C,OAAO,CAAC4C,KAAK,CAAC1C,SAAS,EAAE,uCAAuC,EAAE0C,KAAK,CAAC;MACxE,OAAO3B,MAAM,CAACI,IAAI,CAAC;QAAEE,MAAM,EAAE,CAAAqB,KAAK,KAAL,IAAA,IAAAA,KAAK,uBAALA,KAAK,CAAEC,OAAO,KAAIC,MAAM,CAACF,KAAK;AAAG,OAAA,CAAC;AACjE;AACF;AAEA;;;AAGG;EACH0D,UAAUA,CAACtF,MAAuC,EAAA;IAChDhB,OAAO,CAACc,IAAI,CAACZ,SAAS,EAAE,8BAA8B,EAAEc,MAAM,CAAC;IAC/D,OAAOsC,OAAO,CAACC,MAAM,CAAC,IAAIC,KAAK,CAAC,kBAAkB,CAAC,CAAC;AACtD;AAEA;;;AAGG;EACH+C,UAAUA,CAACvF,MAAuC,EAAA;IAChDhB,OAAO,CAACc,IAAI,CAACZ,SAAS,EAAE,8BAA8B,EAAEc,MAAM,CAAC;IAC/D,OAAOsC,OAAO,CAACC,MAAM,CAAC,IAAIC,KAAK,CAAC,kBAAkB,CAAC,CAAC;AACtD;AAEA;;;AAGG;EACHgD,aAAaA,CAACxF,MAA0C,EAAA;IACtDhB,OAAO,CAACc,IAAI,CAACZ,SAAS,EAAE,iCAAiC,EAAEc,MAAM,CAAC;IAClE,OAAOsC,OAAO,CAACC,MAAM,CAAC,IAAIC,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACzD;AAEA;;;AAGG;EACHiD,iBAAiBA,CAACzF,MAA+C,EAAA;IAC/DhB,OAAO,CAACc,IAAI,CAACZ,SAAS,EAAE,qCAAqC,EAAEc,MAAM,CAAC;IACtE,OAAOsC,OAAO,CAACC,MAAM,CAAC,IAAIC,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC7D;AAEA;;;AAGG;AACHkD,EAAAA,EAAEA,CACAC,KAAoC,EACpCC,QAA+E,EAAA;IAE/E5G,OAAO,CAACc,IAAI,CAACZ,SAAS,EAAE,sBAAsB,EAAEyG,KAAK,EAAEC,QAAQ,CAAC;AAChE,IAAA,MAAM,IAAIpD,KAAK,CAAC,UAAU,CAAC;AAC7B;AACD;;;;"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { View } from '@tarojs/components';
|
|
2
|
+
import { memo, useRef, useState, useCallback, useEffect } from 'react';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
const MapCustomCallout = /*#__PURE__*/memo(_ref => {
|
|
6
|
+
let {
|
|
7
|
+
map,
|
|
8
|
+
markerId,
|
|
9
|
+
position,
|
|
10
|
+
anchorX,
|
|
11
|
+
anchorY,
|
|
12
|
+
display = 'ALWAYS',
|
|
13
|
+
children,
|
|
14
|
+
onCalloutTap
|
|
15
|
+
} = _ref;
|
|
16
|
+
const calloutRef = useRef(null);
|
|
17
|
+
const [visible] = useState(display === 'ALWAYS');
|
|
18
|
+
/**
|
|
19
|
+
* 更新气泡位置
|
|
20
|
+
*/
|
|
21
|
+
const updatePosition = useCallback(() => {
|
|
22
|
+
if (!map || !calloutRef.current) return;
|
|
23
|
+
try {
|
|
24
|
+
const latLng = new TMap.LatLng(position.lat, position.lng);
|
|
25
|
+
const containerPoint = map.projectToContainer(latLng);
|
|
26
|
+
if (!containerPoint) return;
|
|
27
|
+
const x = containerPoint.x + anchorX;
|
|
28
|
+
const y = containerPoint.y + anchorY;
|
|
29
|
+
// 直接设置 style
|
|
30
|
+
calloutRef.current.style.position = 'absolute';
|
|
31
|
+
calloutRef.current.style.left = '0px';
|
|
32
|
+
calloutRef.current.style.top = '0px';
|
|
33
|
+
calloutRef.current.style.transform = `translate(${x}px, ${y}px) translate(-50%, -100%)`;
|
|
34
|
+
calloutRef.current.style.pointerEvents = 'auto';
|
|
35
|
+
calloutRef.current.style.zIndex = '1000';
|
|
36
|
+
calloutRef.current.style.cursor = 'pointer';
|
|
37
|
+
} catch (_a) {
|
|
38
|
+
// 忽略位置更新错误
|
|
39
|
+
}
|
|
40
|
+
}, [map, position, anchorX, anchorY]);
|
|
41
|
+
/**
|
|
42
|
+
* 处理 touchend 事件
|
|
43
|
+
* 对齐小程序默认行为:点击气泡任意位置都触发 onCalloutTap
|
|
44
|
+
* 子元素可以通过 stopPropagation() 阻止事件冒泡,只处理自己的 onClick
|
|
45
|
+
*/
|
|
46
|
+
const handleTouchEnd = useCallback(e => {
|
|
47
|
+
const target = e === null || e === void 0 ? void 0 : e.target;
|
|
48
|
+
if (!target) return;
|
|
49
|
+
// 派发 click 事件,让子元素自己的 onClick 处理
|
|
50
|
+
const clickEvent = new MouseEvent('click', {
|
|
51
|
+
bubbles: true,
|
|
52
|
+
cancelable: true,
|
|
53
|
+
view: window
|
|
54
|
+
});
|
|
55
|
+
target.dispatchEvent(clickEvent);
|
|
56
|
+
// 对齐小程序默认行为:点击气泡任意位置都触发 onCalloutTap
|
|
57
|
+
onCalloutTap === null || onCalloutTap === void 0 ? void 0 : onCalloutTap(markerId);
|
|
58
|
+
}, [markerId, onCalloutTap]);
|
|
59
|
+
/**
|
|
60
|
+
* 监听地图变化,实现自动跟随
|
|
61
|
+
*/
|
|
62
|
+
useEffect(() => {
|
|
63
|
+
if (!map || !visible) return;
|
|
64
|
+
const events = ['bounds_changed', 'zoom_changed', 'drag', 'rotate'];
|
|
65
|
+
events.forEach(event => map.on(event, updatePosition));
|
|
66
|
+
requestAnimationFrame(() => {
|
|
67
|
+
updatePosition();
|
|
68
|
+
});
|
|
69
|
+
return () => {
|
|
70
|
+
events.forEach(event => map.off(event, updatePosition));
|
|
71
|
+
};
|
|
72
|
+
}, [map, updatePosition, visible]);
|
|
73
|
+
if (!visible) return null;
|
|
74
|
+
return /*#__PURE__*/jsx(View, {
|
|
75
|
+
ref: calloutRef,
|
|
76
|
+
onTouchEnd: handleTouchEnd,
|
|
77
|
+
style: {
|
|
78
|
+
position: 'absolute',
|
|
79
|
+
left: 0,
|
|
80
|
+
top: 0,
|
|
81
|
+
pointerEvents: 'auto',
|
|
82
|
+
zIndex: 1000,
|
|
83
|
+
cursor: 'pointer'
|
|
84
|
+
},
|
|
85
|
+
children: children
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
MapCustomCallout.displayName = 'MapCustomCallout';
|
|
89
|
+
|
|
90
|
+
export { MapCustomCallout as default };
|
|
91
|
+
//# sourceMappingURL=MapCustomCallout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MapCustomCallout.js","sources":["../../../src/components/map/MapCustomCallout.tsx"],"sourcesContent":["import { View } from '@tarojs/components'\nimport React, { memo, useCallback, useEffect, useRef, useState } from 'react'\n\nimport type MapTypes from 'tmap-gl-types'\n\ninterface MapCustomCalloutProps {\n map: MapTypes.Map | null\n markerId: number\n position: {\n lat: number\n lng: number\n }\n anchorX: number\n anchorY: number\n display?: 'ALWAYS' | 'BYCLICK'\n children: React.ReactNode\n onCalloutTap?: (markerId: number) => void\n}\n\nconst MapCustomCallout: React.FC<MapCustomCalloutProps> = memo(({\n map,\n markerId,\n position,\n anchorX,\n anchorY,\n display = 'ALWAYS',\n children,\n onCalloutTap,\n}) => {\n const calloutRef = useRef<HTMLDivElement>(null)\n const [visible] = useState(display === 'ALWAYS')\n\n /**\n * 更新气泡位置\n */\n const updatePosition = useCallback(() => {\n if (!map || !calloutRef.current) return\n\n try {\n const latLng = new TMap.LatLng(position.lat, position.lng)\n const containerPoint = map.projectToContainer(latLng)\n\n if (!containerPoint) return\n\n const x = containerPoint.x + anchorX\n const y = containerPoint.y + anchorY\n\n // 直接设置 style\n calloutRef.current.style.position = 'absolute'\n calloutRef.current.style.left = '0px'\n calloutRef.current.style.top = '0px'\n calloutRef.current.style.transform = `translate(${x}px, ${y}px) translate(-50%, -100%)`\n calloutRef.current.style.pointerEvents = 'auto'\n calloutRef.current.style.zIndex = '1000'\n calloutRef.current.style.cursor = 'pointer'\n } catch {\n // 忽略位置更新错误\n }\n }, [map, position, anchorX, anchorY])\n\n /**\n * 处理 touchend 事件\n * 对齐小程序默认行为:点击气泡任意位置都触发 onCalloutTap\n * 子元素可以通过 stopPropagation() 阻止事件冒泡,只处理自己的 onClick\n */\n const handleTouchEnd = useCallback((e: any) => {\n const target = e?.target\n if (!target) return\n\n // 派发 click 事件,让子元素自己的 onClick 处理\n const clickEvent = new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n view: window\n })\n target.dispatchEvent(clickEvent)\n\n // 对齐小程序默认行为:点击气泡任意位置都触发 onCalloutTap\n onCalloutTap?.(markerId)\n }, [markerId, onCalloutTap])\n\n /**\n * 监听地图变化,实现自动跟随\n */\n useEffect(() => {\n if (!map || !visible) return\n\n const events = ['bounds_changed', 'zoom_changed', 'drag', 'rotate'] as const\n events.forEach(event => map.on(event, updatePosition))\n\n requestAnimationFrame(() => {\n updatePosition()\n })\n\n return () => {\n events.forEach(event => map.off(event, updatePosition))\n }\n }, [map, updatePosition, visible])\n\n if (!visible) return null\n\n return (\n <View\n ref={calloutRef}\n onTouchEnd={handleTouchEnd}\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n pointerEvents: 'auto',\n zIndex: 1000,\n cursor: 'pointer',\n }}\n >\n {children}\n </View>\n )\n})\n\nMapCustomCallout.displayName = 'MapCustomCallout'\n\nexport default MapCustomCallout\n"],"names":["MapCustomCallout","memo","_ref","map","markerId","position","anchorX","anchorY","display","children","onCalloutTap","calloutRef","useRef","visible","useState","updatePosition","useCallback","current","latLng","TMap","LatLng","lat","lng","containerPoint","projectToContainer","x","y","style","left","top","transform","pointerEvents","zIndex","cursor","_a","handleTouchEnd","e","target","clickEvent","MouseEvent","bubbles","cancelable","view","window","dispatchEvent","useEffect","events","forEach","event","on","requestAnimationFrame","off","_jsx","View","ref","onTouchEnd","displayName"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sources":["../../../src/components/map/common.ts"],"sourcesContent":["const logPrefix = '[Taro-H5-Map]'\n\nexport { logPrefix }\n"],"names":["logPrefix"],"mappings":"AAAMA,MAAAA,SAAS,GAAG;;;;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { getMapInstance, MapContextImpl } from './MapContext.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 创建地图上下文 MapContext 对象
|
|
5
|
+
*
|
|
6
|
+
* @deprecated 请使用 Taro.createMapContext 代替
|
|
7
|
+
*
|
|
8
|
+
* 此导出仅用于向后兼容,将在未来版本中移除。
|
|
9
|
+
*
|
|
10
|
+
* 推荐用法:
|
|
11
|
+
* ```tsx
|
|
12
|
+
* import Taro from '@tarojs/taro'
|
|
13
|
+
*
|
|
14
|
+
* const mapCtx = Taro.createMapContext('mapId')
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @param mapId Map 组件的 id
|
|
18
|
+
* @param component 自定义组件实例(暂未使用)
|
|
19
|
+
* @returns MapContext 实例
|
|
20
|
+
*/
|
|
21
|
+
function createMapContext(mapId, _component) {
|
|
22
|
+
// 获取地图实例
|
|
23
|
+
const mapInstance = getMapInstance(mapId);
|
|
24
|
+
if (!mapInstance) {
|
|
25
|
+
console.warn('[createMapContext] 找不到 id 为 "' + mapId + '" 的地图实例,' + '请确保:1) Map 组件已正确设置 id 属性;2) 地图已完成初始化');
|
|
26
|
+
// 返回一个空实现,避免运行时错误
|
|
27
|
+
return new MapContextImpl(null);
|
|
28
|
+
}
|
|
29
|
+
// 创建并返回 MapContextImpl 实例
|
|
30
|
+
return new MapContextImpl(mapInstance);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { createMapContext };
|
|
34
|
+
//# sourceMappingURL=createMapContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createMapContext.js","sources":["../../../src/components/map/createMapContext.ts"],"sourcesContent":["import { getMapInstance, MapContextImpl } from './MapContext'\n\n/**\n * 创建地图上下文 MapContext 对象\n *\n * @deprecated 请使用 Taro.createMapContext 代替\n *\n * 此导出仅用于向后兼容,将在未来版本中移除。\n *\n * 推荐用法:\n * ```tsx\n * import Taro from '@tarojs/taro'\n *\n * const mapCtx = Taro.createMapContext('mapId')\n * ```\n *\n * @param mapId Map 组件的 id\n * @param component 自定义组件实例(暂未使用)\n * @returns MapContext 实例\n */\nexport function createMapContext(\n mapId: string,\n _component?: any\n): MapContextImpl {\n // 获取地图实例\n const mapInstance = getMapInstance(mapId)\n\n if (!mapInstance) {\n console.warn(\n '[createMapContext] 找不到 id 为 \"' + mapId + '\" 的地图实例,' +\n '请确保:1) Map 组件已正确设置 id 属性;2) 地图已完成初始化'\n )\n // 返回一个空实现,避免运行时错误\n return new MapContextImpl(null)\n }\n\n // 创建并返回 MapContextImpl 实例\n return new MapContextImpl(mapInstance)\n}\n"],"names":["createMapContext","mapId","_component","mapInstance","getMapInstance","console","warn","MapContextImpl"],"mappings":";;AAEA;;;;;;;;;;;;;;;;;AAiBG;AACa,SAAAA,gBAAgBA,CAC9BC,KAAa,EACbC,UAAgB,EAAA;AAEhB;AACA,EAAA,MAAMC,WAAW,GAAGC,cAAc,CAACH,KAAK,CAAC;EAEzC,IAAI,CAACE,WAAW,EAAE;IAChBE,OAAO,CAACC,IAAI,CACV,+BAA+B,GAAGL,KAAK,GAAG,UAAU,GACpD,sCAAsC,CACvC;AACD;AACA,IAAA,OAAO,IAAIM,cAAc,CAAC,IAAI,CAAC;AACjC;AAEA;AACA,EAAA,OAAO,IAAIA,cAAc,CAACJ,WAAW,CAAC;AACxC;;;;"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { isFunction } from '@tarojs/shared';
|
|
2
|
+
|
|
3
|
+
class MethodHandler {
|
|
4
|
+
constructor(_ref) {
|
|
5
|
+
let {
|
|
6
|
+
name,
|
|
7
|
+
success,
|
|
8
|
+
fail,
|
|
9
|
+
complete
|
|
10
|
+
} = _ref;
|
|
11
|
+
this.isHandlerError = false;
|
|
12
|
+
this.methodName = name;
|
|
13
|
+
this.__success = success;
|
|
14
|
+
this.__fail = fail;
|
|
15
|
+
this.__complete = complete;
|
|
16
|
+
this.isHandlerError = isFunction(this.__complete) || isFunction(this.__fail);
|
|
17
|
+
}
|
|
18
|
+
success() {
|
|
19
|
+
let res = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
20
|
+
let promise = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
21
|
+
if (!res.errMsg) {
|
|
22
|
+
res.errMsg = `${this.methodName}:ok`;
|
|
23
|
+
}
|
|
24
|
+
isFunction(this.__success) && this.__success(res);
|
|
25
|
+
isFunction(this.__complete) && this.__complete(res);
|
|
26
|
+
const {
|
|
27
|
+
resolve = Promise.resolve.bind(Promise)
|
|
28
|
+
} = promise;
|
|
29
|
+
return resolve(res);
|
|
30
|
+
}
|
|
31
|
+
fail() {
|
|
32
|
+
let res = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
33
|
+
let promise = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
34
|
+
if (!res.errMsg) {
|
|
35
|
+
res.errMsg = `${this.methodName}:fail`;
|
|
36
|
+
} else {
|
|
37
|
+
res.errMsg = `${this.methodName}:fail ${res.errMsg}`;
|
|
38
|
+
}
|
|
39
|
+
isFunction(this.__fail) && this.__fail(res);
|
|
40
|
+
isFunction(this.__complete) && this.__complete(res);
|
|
41
|
+
const {
|
|
42
|
+
resolve = Promise.resolve.bind(Promise),
|
|
43
|
+
reject = Promise.reject.bind(Promise)
|
|
44
|
+
} = promise;
|
|
45
|
+
return this.isHandlerError ? resolve(res) : reject(res);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export { MethodHandler };
|
|
50
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sources":["../../../src/components/map/handler.ts"],"sourcesContent":["import { isFunction } from '@tarojs/shared'\n\ntype TCallback<T = Partial<TaroGeneral.CallbackResult>> = (res: T) => Promise<void> | void\ninterface IMethodParam<T = Partial<TaroGeneral.CallbackResult>> {\n name: string\n success?: TCallback<T & TaroGeneral.CallbackResult>\n fail?: TCallback\n complete?: TCallback\n}\ninterface IMockPromise {\n resolve?: typeof Promise.resolve | TFunc\n reject?: typeof Promise.reject | TFunc\n}\n\nexport class MethodHandler<T = Partial<TaroGeneral.CallbackResult>> {\n methodName: string\n\n protected __success?: TCallback<T>\n protected __fail?: TCallback\n protected __complete?: TCallback\n\n protected isHandlerError = false\n\n constructor ({ name, success, fail, complete }: IMethodParam<T>) {\n this.methodName = name\n this.__success = success\n this.__fail = fail\n this.__complete = complete\n\n this.isHandlerError = isFunction(this.__complete) || isFunction(this.__fail)\n }\n\n success<U = Record<string, unknown>> (res: Partial<T> & Partial<TaroGeneral.CallbackResult> = {}, promise: IMockPromise = {}): Promise<T & U & TaroGeneral.CallbackResult> {\n if (!res.errMsg) {\n res.errMsg = `${this.methodName}:ok`\n }\n isFunction(this.__success) && this.__success(res as T)\n isFunction(this.__complete) && this.__complete(res)\n\n const { resolve = Promise.resolve.bind(Promise) } = promise\n return resolve(res as Required<T & U & TaroGeneral.CallbackResult>)\n }\n\n fail<U = Record<string, unknown>> (res: Partial<T> & Partial<TaroGeneral.CallbackResult> = {}, promise: IMockPromise = {}): Promise<T & U & TaroGeneral.CallbackResult> {\n if (!res.errMsg) {\n res.errMsg = `${this.methodName}:fail`\n } else {\n res.errMsg = `${this.methodName}:fail ${res.errMsg}`\n }\n isFunction(this.__fail) && this.__fail(res)\n isFunction(this.__complete) && this.__complete(res)\n\n const {\n resolve = Promise.resolve.bind(Promise),\n reject = Promise.reject.bind(Promise)\n } = promise\n return this.isHandlerError\n ? resolve(res as Required<T & U & TaroGeneral.CallbackResult>)\n : reject(res)\n }\n}\n\ntype TFunc = (...args: any[]) => any\n"],"names":["MethodHandler","constructor","_ref","name","success","fail","complete","isHandlerError","methodName","__success","__fail","__complete","isFunction","res","arguments","length","undefined","promise","errMsg","resolve","Promise","bind","reject"],"mappings":";;MAcaA,aAAa,CAAA;EASxBC,WAAaA,CAAAC,IAAA,EAAkD;IAAA,IAAlD;MAAEC,IAAI;MAAEC,OAAO;MAAEC,IAAI;AAAEC,MAAAA;AAA2B,KAAA,GAAAJ,IAAA;IAFrD,IAAc,CAAAK,cAAA,GAAG,KAAK;IAG9B,IAAI,CAACC,UAAU,GAAGL,IAAI;IACtB,IAAI,CAACM,SAAS,GAAGL,OAAO;IACxB,IAAI,CAACM,MAAM,GAAGL,IAAI;IAClB,IAAI,CAACM,UAAU,GAAGL,QAAQ;AAE1B,IAAA,IAAI,CAACC,cAAc,GAAGK,UAAU,CAAC,IAAI,CAACD,UAAU,CAAC,IAAIC,UAAU,CAAC,IAAI,CAACF,MAAM,CAAC;AAC9E;AAEAN,EAAAA,OAAOA,GAAqH;AAAA,IAAA,IAAtFS,GAAA,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAwD,EAAE;AAAA,IAAA,IAAEG,8EAAwB,EAAE;AAC1H,IAAA,IAAI,CAACJ,GAAG,CAACK,MAAM,EAAE;AACfL,MAAAA,GAAG,CAACK,MAAM,GAAG,GAAG,IAAI,CAACV,UAAU,CAAK,GAAA,CAAA;AACtC;IACAI,UAAU,CAAC,IAAI,CAACH,SAAS,CAAC,IAAI,IAAI,CAACA,SAAS,CAACI,GAAQ,CAAC;IACtDD,UAAU,CAAC,IAAI,CAACD,UAAU,CAAC,IAAI,IAAI,CAACA,UAAU,CAACE,GAAG,CAAC;IAEnD,MAAM;AAAEM,MAAAA,OAAO,GAAGC,OAAO,CAACD,OAAO,CAACE,IAAI,CAACD,OAAO;AAAG,KAAA,GAAGH,OAAO;IAC3D,OAAOE,OAAO,CAACN,GAAmD,CAAC;AACrE;AAEAR,EAAAA,IAAIA,GAAqH;AAAA,IAAA,IAAtFQ,GAAA,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAwD,EAAE;AAAA,IAAA,IAAEG,8EAAwB,EAAE;AACvH,IAAA,IAAI,CAACJ,GAAG,CAACK,MAAM,EAAE;AACfL,MAAAA,GAAG,CAACK,MAAM,GAAG,GAAG,IAAI,CAACV,UAAU,CAAO,KAAA,CAAA;AACxC,KAAC,MAAM;MACLK,GAAG,CAACK,MAAM,GAAG,CAAG,EAAA,IAAI,CAACV,UAAU,CAASK,MAAAA,EAAAA,GAAG,CAACK,MAAM,CAAE,CAAA;AACtD;IACAN,UAAU,CAAC,IAAI,CAACF,MAAM,CAAC,IAAI,IAAI,CAACA,MAAM,CAACG,GAAG,CAAC;IAC3CD,UAAU,CAAC,IAAI,CAACD,UAAU,CAAC,IAAI,IAAI,CAACA,UAAU,CAACE,GAAG,CAAC;IAEnD,MAAM;MACJM,OAAO,GAAGC,OAAO,CAACD,OAAO,CAACE,IAAI,CAACD,OAAO,CAAC;AACvCE,MAAAA,MAAM,GAAGF,OAAO,CAACE,MAAM,CAACD,IAAI,CAACD,OAAO;AAAC,KACtC,GAAGH,OAAO;AACX,IAAA,OAAO,IAAI,CAACV,cAAc,GACtBY,OAAO,CAACN,GAAmD,CAAC,GAC5DS,MAAM,CAACT,GAAG,CAAC;AACjB;AACD;;;;"}
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
import React__default, { useState, useEffect, Children } from 'react';
|
|
2
|
+
import { TMap, MultiMarker, MultiPolyline } from 'tlbs-map-react';
|
|
3
|
+
import { createForwardRefComponent } from '../../utils/index.js';
|
|
4
|
+
import { logPrefix } from './common.js';
|
|
5
|
+
import { registerMapInstance, unregisterMapInstance } from './MapContext.js';
|
|
6
|
+
import MapCustomCallout from './MapCustomCallout.js';
|
|
7
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
8
|
+
export { createMapContext } from './createMapContext.js';
|
|
9
|
+
|
|
10
|
+
/* eslint-disable no-console */
|
|
11
|
+
function Map(props) {
|
|
12
|
+
const {
|
|
13
|
+
forwardedRef,
|
|
14
|
+
id,
|
|
15
|
+
className,
|
|
16
|
+
style,
|
|
17
|
+
authKey,
|
|
18
|
+
libraries,
|
|
19
|
+
longitude,
|
|
20
|
+
latitude,
|
|
21
|
+
scale,
|
|
22
|
+
minScale,
|
|
23
|
+
maxScale,
|
|
24
|
+
enableRotate,
|
|
25
|
+
rotate,
|
|
26
|
+
skew,
|
|
27
|
+
markers,
|
|
28
|
+
polyline,
|
|
29
|
+
onTap,
|
|
30
|
+
onAuthSuccess,
|
|
31
|
+
onError
|
|
32
|
+
} = props;
|
|
33
|
+
// eslint-disable-next-line no-console
|
|
34
|
+
console.log(logPrefix, 'props', props);
|
|
35
|
+
/** ************************处理 style********************** */
|
|
36
|
+
const styleObj = typeof style === 'string' || style === undefined ? {} : style;
|
|
37
|
+
/** ************************处理 marker********************** */
|
|
38
|
+
const normalizedMarkers = markers !== null && markers !== void 0 ? markers : [];
|
|
39
|
+
const markerStyles = {};
|
|
40
|
+
const markerGeometries = [];
|
|
41
|
+
normalizedMarkers.forEach((m, index) => {
|
|
42
|
+
var _a;
|
|
43
|
+
const markerId = String((_a = m.id) !== null && _a !== void 0 ? _a : index);
|
|
44
|
+
const styleId = `marker-${markerId}`;
|
|
45
|
+
// Taro: iconPath (string);tlbs-map-react: styles 中指定图标
|
|
46
|
+
// Taro: width, height (number|string);tlbs-map-react: width, height
|
|
47
|
+
// Taro: rotate (number);tlbs-map-react: rotation
|
|
48
|
+
// Taro: alpha (number 0-1);tlbs-map-react: opacity (0-1)
|
|
49
|
+
// Taro: zIndex (number);tlbs-map-react: zIndex
|
|
50
|
+
// 解析宽高,支持数字和字符串(如 '20px')
|
|
51
|
+
const parseSize = size => {
|
|
52
|
+
if (typeof size === 'number') return size;
|
|
53
|
+
if (typeof size === 'string') {
|
|
54
|
+
const parsed = parseInt(size, 10);
|
|
55
|
+
return isNaN(parsed) ? 20 : parsed;
|
|
56
|
+
}
|
|
57
|
+
return 20; // 默认宽度
|
|
58
|
+
};
|
|
59
|
+
const markerWidth = parseSize(m.width);
|
|
60
|
+
const markerHeight = parseSize(m.height);
|
|
61
|
+
// 宽高为 0 时跳过渲染(隐藏 marker,仅保留气泡)
|
|
62
|
+
if (markerWidth === 0 || markerHeight === 0) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
markerStyles[styleId] = Object.assign(Object.assign(Object.assign(Object.assign({
|
|
66
|
+
width: markerWidth,
|
|
67
|
+
height: markerHeight,
|
|
68
|
+
anchor: {
|
|
69
|
+
x: markerWidth / 2,
|
|
70
|
+
y: markerHeight
|
|
71
|
+
}
|
|
72
|
+
}, m.iconPath && {
|
|
73
|
+
src: m.iconPath
|
|
74
|
+
}), typeof m.rotate === 'number' && {
|
|
75
|
+
rotation: m.rotate
|
|
76
|
+
}), typeof m.alpha === 'number' && {
|
|
77
|
+
opacity: m.alpha
|
|
78
|
+
}), typeof m.zIndex === 'number' && {
|
|
79
|
+
zIndex: m.zIndex
|
|
80
|
+
});
|
|
81
|
+
markerGeometries.push({
|
|
82
|
+
id: markerId,
|
|
83
|
+
styleId,
|
|
84
|
+
position: {
|
|
85
|
+
lat: m.latitude,
|
|
86
|
+
lng: m.longitude
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
/** ************************处理 polyline********************** */
|
|
91
|
+
const normalizedPolylines = polyline !== null && polyline !== void 0 ? polyline : [];
|
|
92
|
+
const polylineStyles = {};
|
|
93
|
+
const polylineGeometries = [];
|
|
94
|
+
normalizedPolylines.forEach((line, lineIndex) => {
|
|
95
|
+
var _a;
|
|
96
|
+
if (!line.points || line.points.length === 0) return;
|
|
97
|
+
const styleId = `polyline-${lineIndex}`;
|
|
98
|
+
// Taro: color (hex);腾讯地图: color
|
|
99
|
+
// Taro: width (number);腾讯地图: width
|
|
100
|
+
// Taro: dottedLine (boolean);腾讯地图: dashArray ([10,10]虚线, [0,0]实线)
|
|
101
|
+
polylineStyles[styleId] = {
|
|
102
|
+
color: line.color || '#3777FF',
|
|
103
|
+
width: Math.round((_a = line.width) !== null && _a !== void 0 ? _a : 3),
|
|
104
|
+
// 取整,tlbs-map-react 要求 width 为整数
|
|
105
|
+
// 虚线:[10, 10] 表示10像素实线 + 10像素空白;实线:[0, 0]
|
|
106
|
+
dashArray: line.dottedLine ? [10, 10] : [0, 0]
|
|
107
|
+
};
|
|
108
|
+
// Taro: points 是 {latitude, longitude}[] 数组
|
|
109
|
+
// tlbs-map-react: geometries 需要路径点数组
|
|
110
|
+
polylineGeometries.push({
|
|
111
|
+
id: String(lineIndex),
|
|
112
|
+
styleId,
|
|
113
|
+
paths: line.points.map(point => ({
|
|
114
|
+
lat: point.latitude,
|
|
115
|
+
lng: point.longitude
|
|
116
|
+
}))
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
/** ************************适配options参数********************** */
|
|
120
|
+
const hasCenter = typeof latitude === 'number' && typeof longitude === 'number';
|
|
121
|
+
const mergedOptions = Object.assign(Object.assign(Object.assign(Object.assign({}, hasCenter ? {
|
|
122
|
+
center: {
|
|
123
|
+
lat: latitude,
|
|
124
|
+
lng: longitude
|
|
125
|
+
}
|
|
126
|
+
} : {}), {
|
|
127
|
+
zoom: scale !== null && scale !== void 0 ? scale : 13,
|
|
128
|
+
minZoom: minScale !== null && minScale !== void 0 ? minScale : 3,
|
|
129
|
+
maxZoom: maxScale !== null && maxScale !== void 0 ? maxScale : 20,
|
|
130
|
+
rotatable: enableRotate !== null && enableRotate !== void 0 ? enableRotate : false
|
|
131
|
+
}), typeof rotate === 'number' && {
|
|
132
|
+
rotation: rotate
|
|
133
|
+
}), typeof skew === 'number' && {
|
|
134
|
+
pitch: skew
|
|
135
|
+
});
|
|
136
|
+
/** ************************处理事件********************** */
|
|
137
|
+
// Taro: onTap;腾讯地图: click
|
|
138
|
+
// 腾讯地图事件返回: MapEvent { latLng: LatLng, point: {x, y}, type, target, originalEvent }
|
|
139
|
+
// Taro 事件格式: BaseEventOrig { type, timeStamp, target, currentTarget, detail, ... }
|
|
140
|
+
const handleMapClick = e => {
|
|
141
|
+
console.log(logPrefix, 'source click e:', e);
|
|
142
|
+
if (typeof onTap === 'function') {
|
|
143
|
+
onTap({
|
|
144
|
+
type: e.type,
|
|
145
|
+
timeStamp: Date.now(),
|
|
146
|
+
target: {
|
|
147
|
+
id: id || '',
|
|
148
|
+
tagName: 'map',
|
|
149
|
+
dataset: {}
|
|
150
|
+
},
|
|
151
|
+
currentTarget: {
|
|
152
|
+
id: id || '',
|
|
153
|
+
tagName: 'map',
|
|
154
|
+
dataset: {}
|
|
155
|
+
},
|
|
156
|
+
detail: {
|
|
157
|
+
latitude: e.latLng.lat,
|
|
158
|
+
longitude: e.latLng.lng
|
|
159
|
+
},
|
|
160
|
+
preventDefault: () => {},
|
|
161
|
+
stopPropagation: () => {}
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
// 存储地图实例,用于 H5 端自定义气泡
|
|
166
|
+
const [mapInstance, setMapInstance] = useState(null);
|
|
167
|
+
// 地图初始化成功
|
|
168
|
+
const handleMapInited = instance => {
|
|
169
|
+
console.log(logPrefix, '地图初始化成功', instance);
|
|
170
|
+
setMapInstance(instance);
|
|
171
|
+
// 注册地图实例到全局存储
|
|
172
|
+
if (id) {
|
|
173
|
+
registerMapInstance(id, instance);
|
|
174
|
+
console.log(logPrefix, '已注册地图实例到 MapContext, id:', id);
|
|
175
|
+
}
|
|
176
|
+
let settled = false;
|
|
177
|
+
instance.on('tilesloaded', _res => {
|
|
178
|
+
// TODO: 临时先这么简单处理鉴权成功
|
|
179
|
+
if (!settled && typeof onAuthSuccess === 'function') {
|
|
180
|
+
settled = true;
|
|
181
|
+
onAuthSuccess({
|
|
182
|
+
type: 'authsuccess',
|
|
183
|
+
timeStamp: Date.now(),
|
|
184
|
+
target: {
|
|
185
|
+
id: id || '',
|
|
186
|
+
tagName: 'map',
|
|
187
|
+
dataset: {}
|
|
188
|
+
},
|
|
189
|
+
currentTarget: {
|
|
190
|
+
id: id || '',
|
|
191
|
+
tagName: 'map',
|
|
192
|
+
dataset: {}
|
|
193
|
+
},
|
|
194
|
+
detail: {
|
|
195
|
+
errCode: 0,
|
|
196
|
+
errMsg: 'ok'
|
|
197
|
+
},
|
|
198
|
+
preventDefault: () => {},
|
|
199
|
+
stopPropagation: () => {}
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
setTimeout(() => {
|
|
204
|
+
if (!settled && typeof onError === 'function') {
|
|
205
|
+
settled = true;
|
|
206
|
+
onError({
|
|
207
|
+
type: 'error',
|
|
208
|
+
timeStamp: Date.now(),
|
|
209
|
+
target: {
|
|
210
|
+
id: id || '',
|
|
211
|
+
tagName: 'map',
|
|
212
|
+
dataset: {}
|
|
213
|
+
},
|
|
214
|
+
currentTarget: {
|
|
215
|
+
id: id || '',
|
|
216
|
+
tagName: 'map',
|
|
217
|
+
dataset: {}
|
|
218
|
+
},
|
|
219
|
+
detail: {
|
|
220
|
+
errCode: 1001,
|
|
221
|
+
errMsg: 'timeout'
|
|
222
|
+
},
|
|
223
|
+
preventDefault: () => {},
|
|
224
|
+
stopPropagation: () => {}
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
}, 3000);
|
|
228
|
+
};
|
|
229
|
+
// 组件卸载时清理地图实例
|
|
230
|
+
useEffect(() => {
|
|
231
|
+
return () => {
|
|
232
|
+
if (id) {
|
|
233
|
+
unregisterMapInstance(id);
|
|
234
|
+
console.log(logPrefix, '已注销地图实例, id:', id);
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
}, [id]);
|
|
238
|
+
return /*#__PURE__*/jsxs(TMap, {
|
|
239
|
+
id: id,
|
|
240
|
+
ref: forwardedRef,
|
|
241
|
+
className: className,
|
|
242
|
+
style: styleObj,
|
|
243
|
+
apiKey: authKey !== null && authKey !== void 0 ? authKey : '',
|
|
244
|
+
libraries: libraries,
|
|
245
|
+
options: mergedOptions,
|
|
246
|
+
onClick: handleMapClick,
|
|
247
|
+
onMapInited: handleMapInited,
|
|
248
|
+
children: [normalizedMarkers.length > 0 ? /*#__PURE__*/jsx(MultiMarker, {
|
|
249
|
+
id: "taro-markers",
|
|
250
|
+
styles: markerStyles,
|
|
251
|
+
geometries: markerGeometries
|
|
252
|
+
}) : null, polylineGeometries.length > 0 ? /*#__PURE__*/jsx(MultiPolyline, {
|
|
253
|
+
id: "taro-polylines",
|
|
254
|
+
styles: polylineStyles,
|
|
255
|
+
geometries: polylineGeometries
|
|
256
|
+
}) : null, process.env.TARO_ENV === 'h5' ? renderH5CustomCallouts() : props.children]
|
|
257
|
+
});
|
|
258
|
+
/**
|
|
259
|
+
* H5 端渲染自定义气泡
|
|
260
|
+
* 拦截 slot="callout" 的 CoverView,转换为自定义 Overlay
|
|
261
|
+
*/
|
|
262
|
+
function renderH5CustomCallouts() {
|
|
263
|
+
if (!mapInstance) return null;
|
|
264
|
+
// 1. 遍历 props.children,找到 slot="callout" 的 CoverView
|
|
265
|
+
const childrenArray = Children.toArray(props.children);
|
|
266
|
+
const calloutSlot = childrenArray.find(child => {
|
|
267
|
+
var _a;
|
|
268
|
+
return /*#__PURE__*/React__default.isValidElement(child) && ((_a = child.props) === null || _a === void 0 ? void 0 : _a.slot) === 'callout';
|
|
269
|
+
});
|
|
270
|
+
if (!calloutSlot || ! /*#__PURE__*/React__default.isValidElement(calloutSlot)) {
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
// 2. 遍历内层的 CoverView,提取 markerId 和内容
|
|
274
|
+
const innerCoverViews = Children.toArray(calloutSlot.props.children);
|
|
275
|
+
return innerCoverViews.map(child => {
|
|
276
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
277
|
+
if (! /*#__PURE__*/React__default.isValidElement(child)) return null;
|
|
278
|
+
const markerId = (_a = child.props) === null || _a === void 0 ? void 0 : _a.markerId;
|
|
279
|
+
if (!markerId) return null;
|
|
280
|
+
// 3. 找到对应的 marker 信息
|
|
281
|
+
const marker = normalizedMarkers.find(m => m.id === markerId);
|
|
282
|
+
if (!marker) {
|
|
283
|
+
console.warn(logPrefix, `未找到 markerId=${markerId} 对应的 marker`);
|
|
284
|
+
return null;
|
|
285
|
+
}
|
|
286
|
+
// 4. 渲染自定义气泡
|
|
287
|
+
return /*#__PURE__*/jsx(MapCustomCallout, {
|
|
288
|
+
map: mapInstance,
|
|
289
|
+
markerId: markerId,
|
|
290
|
+
position: {
|
|
291
|
+
lat: marker.latitude,
|
|
292
|
+
lng: marker.longitude
|
|
293
|
+
},
|
|
294
|
+
anchorX: (_c = (_b = marker.customCallout) === null || _b === void 0 ? void 0 : _b.anchorX) !== null && _c !== void 0 ? _c : 0,
|
|
295
|
+
anchorY: (_e = (_d = marker.customCallout) === null || _d === void 0 ? void 0 : _d.anchorY) !== null && _e !== void 0 ? _e : 0,
|
|
296
|
+
display: (_g = (_f = marker.customCallout) === null || _f === void 0 ? void 0 : _f.display) !== null && _g !== void 0 ? _g : 'ALWAYS',
|
|
297
|
+
onCalloutTap: id => {
|
|
298
|
+
// 触发 onCalloutTap 事件
|
|
299
|
+
if (typeof props.onCalloutTap === 'function') {
|
|
300
|
+
props.onCalloutTap({
|
|
301
|
+
type: 'callouttap',
|
|
302
|
+
timeStamp: Date.now(),
|
|
303
|
+
target: {
|
|
304
|
+
id: String(id) || '',
|
|
305
|
+
tagName: 'callout',
|
|
306
|
+
dataset: {}
|
|
307
|
+
},
|
|
308
|
+
currentTarget: {
|
|
309
|
+
id: String(id) || '',
|
|
310
|
+
tagName: 'callout',
|
|
311
|
+
dataset: {}
|
|
312
|
+
},
|
|
313
|
+
detail: {
|
|
314
|
+
markerId: id
|
|
315
|
+
},
|
|
316
|
+
preventDefault: () => {},
|
|
317
|
+
stopPropagation: () => {}
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
children: child.props.children
|
|
322
|
+
}, markerId);
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
var index = createForwardRefComponent(Map);
|
|
327
|
+
|
|
328
|
+
export { index as default };
|
|
329
|
+
//# sourceMappingURL=index.js.map
|