Members
(constant) CONTOUR_AGG_SRC
- Description:
渲染等值線圖層(聚合渲染: 全部 contourSets 之色帶併入單一 source + fill/line 各一層, 含圖例生成)。 樣式 data-driven 放 feature properties; hover 樣式切換(changeStyleWhenHover)改以 feature-state 驅動: paint 以 ['feature-state','hover'] case 切換基礎/hover 值, 游標下所有色帶(巢狀命中)同時高亮(對齊逐組時代行為); 不啟用 hover 樣式之組, hover 值即基礎值(case 恆等, 行為不變)。 feature 帶 _kcs/_kps, click/hover 反查 store 最新資料; 跨組移動由 onMove 驅動 tooltip 切換。
- Source:
渲染等值線圖層(聚合渲染: 全部 contourSets 之色帶併入單一 source + fill/line 各一層, 含圖例生成)。 樣式 data-driven 放 feature properties; hover 樣式切換(changeStyleWhenHover)改以 feature-state 驅動: paint 以 ['feature-state','hover'] case 切換基礎/hover 值, 游標下所有色帶(巢狀命中)同時高亮(對齊逐組時代行為); 不啟用 hover 樣式之組, hover 值即基礎值(case 恆等, 行為不變)。 feature 帶 _kcs/_kps, click/hover 反查 store 最新資料; 跨組移動由 onMove 驅動 tooltip 切換。
(constant) GEOJSON_AGG_PTS_SRC
- Description:
渲染 GeoJSON 圖層(聚合渲染: 全部 geojsonSets 拆分後併入 3 個 source + 4 層, 樣式 data-driven)。 每組 geojson 經 splitAndProcGeoJSON 拆為 points/lines/polygons, 各自併入全域聚合 source; feature 帶組索引 _kgj, click/hover 以其反查 store 最新資料; 跨組移動由 onMove 驅動 tooltip 切換。
- Source:
渲染 GeoJSON 圖層(聚合渲染: 全部 geojsonSets 拆分後併入 3 個 source + 4 層, 樣式 data-driven)。 每組 geojson 經 splitAndProcGeoJSON 拆為 points/lines/polygons, 各自併入全域聚合 source; feature 帶組索引 _kgj, click/hover 以其反查 store 最新資料; 跨組移動由 onMove 驅動 tooltip 切換。
(constant) KEY_HOVER_MANAGER
- Description:
集中式圖層 hover 管理器
maplibre 對「帶 layerId 的委派事件」之內部實作, 是每個 listener 於每次 mousemove 各自執行一次 queryRenderedFeatures 命中測試(單次約 5ms 基礎開銷); 互動圖層一多(如 22 層 × enter/leave = 44 個 委派 listener)單次滑鼠移動即阻塞主執行緒 200ms+。本管理器全 map 僅掛一個 mousemove listener, 每次滑鼠移動最多執行一次 queryRenderedFeatures(帶全部已註冊圖層), 依命中差集對各圖層分發 enter/leave, 語意與原委派事件相同(enter 事件帶 features, 由上而下排序)。並加兩道防護:
- 拖曳中(originalEvent.buttons > 0)與地圖動畫中(map.isMoving())不做命中測試——拖曳體驗優先, hover 狀態暫凍結
- 命中測試節流(leading+trailing, 間隔 100ms)——高頻 mousemove 合併為一次查詢
注意: 每個 layerId 僅支援一組 handler(重複註冊為覆蓋語意, 與原生 map.on 可疊加多 listener 不同)。 選配第五參數 onMove: 該層「持續 hover 中」時分發(payload 同 enter, 含 features), 供聚合層(單層多組 feature)偵測跨組移動; 未傳者行為不變。
- Source:
集中式圖層 hover 管理器
maplibre 對「帶 layerId 的委派事件」之內部實作, 是每個 listener 於每次 mousemove 各自執行一次 queryRenderedFeatures 命中測試(單次約 5ms 基礎開銷); 互動圖層一多(如 22 層 × enter/leave = 44 個 委派 listener)單次滑鼠移動即阻塞主執行緒 200ms+。本管理器全 map 僅掛一個 mousemove listener, 每次滑鼠移動最多執行一次 queryRenderedFeatures(帶全部已註冊圖層), 依命中差集對各圖層分發 enter/leave, 語意與原委派事件相同(enter 事件帶 features, 由上而下排序)。並加兩道防護:
- 拖曳中(originalEvent.buttons > 0)與地圖動畫中(map.isMoving())不做命中測試——拖曳體驗優先, hover 狀態暫凍結
- 命中測試節流(leading+trailing, 間隔 100ms)——高頻 mousemove 合併為一次查詢
注意: 每個 layerId 僅支援一組 handler(重複註冊為覆蓋語意, 與原生 map.on 可疊加多 listener 不同)。 選配第五參數 onMove: 該層「持續 hover 中」時分發(payload 同 enter, 含 features), 供聚合層(單層多組 feature)偵測跨組移動; 未傳者行為不變。
(constant) KEY_ICON_FP
- Description:
將 base64/URL 圖片載入並以指定大小註冊到地圖 sprite atlas
- Source:
將 base64/URL 圖片載入並以指定大小註冊到地圖 sprite atlas
(constant) KEY_SETS_STORE
- Description:
各型別「最新一輪 render 的正規化資料」存放處(掛於 map 實例上)。 事件 handler 於事件觸發時來此查最新資料, 而非使用建層當時閉包捕捉的物件—— 否則 runtime 變更資料/樣式後(source 已存在僅 setData), 回呼會帶到舊值。
store 完整形狀(新增欄位請同步維護此清單): polylineSets / polygonSets / geojsonSets / contourSets - 各型別最新正規化陣列 contourBands - { [kcs]: 色帶陣列 } 等值線各組最新色帶(含顏色增補) pointRenderSeq - { [srcId]: Number } 點圖層每 source 的 render 序號(兼「已知組」名冊, 供過期清理) pointSetsPrev - { [kid]: 正規化組 } 點圖層上一輪已套用資料(供逐組差異跳過) imageSetsPrev - { [kid]: 正規化組 } 影像圖層上一輪已套用資料(供逐組差異跳過, 免重載圖片) polygonGeomPrev - { [kpg]: { lls, geometry } } 聚合多邊形各組上一輪 latLngs 與其幾何(供純樣式變更時重用幾何) 代價: 額外常駐一份 latLngs 參考與幾何結果, 大量座標場景記憶體約增一份幾何量 polygonHoverK - Number|null 聚合多邊形目前 hover 之組索引(供跨組移動偵測) polylineHoverK - Number|null 聚合折線目前 hover 之組索引(供跨組移動偵測) geojsonHoverK - { [layerId]: Number } 聚合 GeoJSON 各互動層目前 hover 之組索引 contourHoverKcs - Number|null 聚合等值線目前 hover 之組索引(tooltip 用) contourHoverIds - Array
聚合等值線目前 hover 之 feature id 集合(feature-state 樣式用)
- Source:
各型別「最新一輪 render 的正規化資料」存放處(掛於 map 實例上)。 事件 handler 於事件觸發時來此查最新資料, 而非使用建層當時閉包捕捉的物件—— 否則 runtime 變更資料/樣式後(source 已存在僅 setData), 回呼會帶到舊值。
store 完整形狀(新增欄位請同步維護此清單):
polylineSets / polygonSets / geojsonSets / contourSets - 各型別最新正規化陣列
contourBands - { [kcs]: 色帶陣列 } 等值線各組最新色帶(含顏色增補)
pointRenderSeq - { [srcId]: Number } 點圖層每 source 的 render 序號(兼「已知組」名冊, 供過期清理)
pointSetsPrev - { [kid]: 正規化組 } 點圖層上一輪已套用資料(供逐組差異跳過)
imageSetsPrev - { [kid]: 正規化組 } 影像圖層上一輪已套用資料(供逐組差異跳過, 免重載圖片)
polygonGeomPrev - { [kpg]: { lls, geometry } } 聚合多邊形各組上一輪 latLngs 與其幾何(供純樣式變更時重用幾何)
代價: 額外常駐一份 latLngs 參考與幾何結果, 大量座標場景記憶體約增一份幾何量
polygonHoverK - Number|null 聚合多邊形目前 hover 之組索引(供跨組移動偵測)
polylineHoverK - Number|null 聚合折線目前 hover 之組索引(供跨組移動偵測)
geojsonHoverK - { [layerId]: Number } 聚合 GeoJSON 各互動層目前 hover 之組索引
contourHoverKcs - Number|null 聚合等值線目前 hover 之組索引(tooltip 用)
contourHoverIds - Array
(constant) POLYGON_AGG_SRC
- Description:
渲染多邊形圖層(聚合渲染: 全部 polygonSets 併入單一 source + fill/line 各一層, 樣式 data-driven)。 maplibre 每圖層每幀有固定開銷, 逐組建層在大量組數時(如數百鄉鎮)層數爆量致拖曳卡頓; 聚合後恆為 2 層, 樣式放 feature properties, 資料/樣式變更皆走單次 setData。 click/hover 以 feature 的 _kpg 反查 store 最新資料; 跨組移動由 onLayerHover 的 onMove 驅動 tooltip 切換。
- Source:
渲染多邊形圖層(聚合渲染: 全部 polygonSets 併入單一 source + fill/line 各一層, 樣式 data-driven)。 maplibre 每圖層每幀有固定開銷, 逐組建層在大量組數時(如數百鄉鎮)層數爆量致拖曳卡頓; 聚合後恆為 2 層, 樣式放 feature properties, 資料/樣式變更皆走單次 setData。 click/hover 以 feature 的 _kpg 反查 store 最新資料; 跨組移動由 onLayerHover 的 onMove 驅動 tooltip 切換。
(constant) POLYLINE_AGG_SRC
- Description:
渲染折線圖層(增量更新)
- Source:
渲染折線圖層(增量更新)
defBaseMaps
- Description:
defBaseMaps.mjs 預設底圖與疊圖清單, 供組件預設值使用, 亦可由外部直接引用或作為自訂清單之基礎
- Source:
defBaseMaps.mjs 預設底圖與疊圖清單, 供組件預設值使用, 亦可由外部直接引用或作為自訂清單之基礎
defTerrainMap
- Description:
defTerrainMap.mjs 預設3D地形資料源設定, 供組件預設值使用, 亦可由外部直接引用或作為自訂設定之基礎
- Source:
defTerrainMap.mjs 預設3D地形資料源設定, 供組件預設值使用, 亦可由外部直接引用或作為自訂設定之基礎
(constant) maplibreVersion
- Description:
maplibreWorkerInline.mjs maplibre-gl 之 worker 自足打包內嵌字串(機器產製, 請勿手改)
來源: ./node_modules/maplibre-gl/dist/maplibre-gl-worker.mjs(已打包為無外部 import 之自足單檔) 產製: node toolg/gDistRollupMaplibreGlWorker.mjs maplibre-gl 版本: 6.14.0
why: maplibre 6.x 起 worker 為外部檔案, 打包器無法代為處理; 本套件改以 Blob 於執行期載入, 使使用端無須另行部署 worker 檔案或設定 setWorkerUrl。詳見 toolg/gDistRollupMaplibreGlWorker.mjs
- Source:
maplibreWorkerInline.mjs maplibre-gl 之 worker 自足打包內嵌字串(機器產製, 請勿手改)
來源: ./node_modules/maplibre-gl/dist/maplibre-gl-worker.mjs(已打包為無外部 import 之自足單檔) 產製: node toolg/gDistRollupMaplibreGlWorker.mjs maplibre-gl 版本: 6.14.0
why: maplibre 6.x 起 worker 為外部檔案, 打包器無法代為處理; 本套件改以 Blob 於執行期載入, 使使用端無須另行部署 worker 檔案或設定 setWorkerUrl。詳見 toolg/gDistRollupMaplibreGlWorker.mjs
Methods
applyBaseMaps(map, baseMaps)
- Description:
將底圖配置套用到 map(建立 raster/vector/wms/style source 與 layer) style 型別讀取 preloadBaseMapStyles 之快取, 未命中即跳過該條目(由呼叫端於預載完成後補套)
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
map |
Object | MapLibre 地圖實例 |
baseMaps |
Array | 底圖配置陣列 |
applyProjection(map, projection)
- Description:
切換 globe/mercator 投影
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
map |
Object | MapLibre 地圖實例 |
projection |
String | '' | 'globe' | 'mercator'('' = auto 模式) |
applyTerrain(map, terrainMap, trackedLayerIds)
- Description:
套用 3D 地形(清除舊地形後重新設定)
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
map |
Object | MapLibre 地圖實例 |
terrainMap |
Object | 地形配置物件 |
trackedLayerIds |
Array | 追蹤的 layer ID(用於 hillshade 插入位置) |
applyZoomRange(map, next)
- Description:
執行期變更圖台縮放範圍: maplibre 之 setMinZoom 拋錯當新 min 大於現行 max、setMaxZoom 拋錯當新 max 小於現行 min, 故先設不會與現行另一端衝突者; 範圍外之現行層級由 maplibre 自行拉入範圍(同步觸發 zoomend/moveend)
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
map |
Object | MapLibre 地圖實例 |
next |
Object | computeZoomRange 之結果 |
buildContourLegend(data, contourSet) → {Array}
- Description:
等值線圖例生成
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
data |
Object | |
contourSet |
Object | 含 legendNumDig, legendTextFormater, legendTextExtra |
Returns:
legend(已 reverse,由大到小)
- Type
- Array
buildItemsList(imageSets, pointSets, polylineSets, polygonSets, geojsonSets, contourSets) → {Array}
- Description:
建立統一的圖層列表(供圖層顯隱面板使用)
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
imageSets |
Array | |
pointSets |
Array | |
polylineSets |
Array | |
polygonSets |
Array | |
geojsonSets |
Array | |
contourSets |
Array |
Returns:
items - [{ name, msg, order, visible, updatePath }]
- Type
- Array
buildPanelStyle()
- Description:
面板尺寸樣式輔助(純函式)
- Source:
buildPolygonGeometry()
- Description:
將多個環座標(XOR 套疊結構)轉為 MapLibre GL 相容的 GeoJSON MultiPolygon 先試等價之快速路徑(單趟閉環+反轉),不成立才走 w-gis 之 XOR 管線。
- Source:
calcPanToCenter(map, latLng, opt) → {Array|null}
- Description:
計算 panTo 偏移後的新中心座標
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
map |
Object | MapLibre 地圖實例 |
latLng |
Array | [lat, lng] |
opt |
Object | { ratioHorizontal, ratioVertical, funLatLng } |
Returns:
新的 [lat, lng],或 null 表示不需移動
- Type
- Array | null
calcPolygonCenter(latLngs) → {Array|null}
- Description:
計算多邊形第一環重心座標
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
latLngs |
Array |
Returns:
[lat, lng]
- Type
- Array | null
calcPolylineCenter(latLngs) → {Array|null}
- Description:
計算折線的中間點座標
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
latLngs |
Array |
Returns:
[lat, lng]
- Type
- Array | null
clearTrackedByPrefix(map, prefix, trackedLayerIds, trackedSourceIds) → {Object}
- Description:
清除以指定前綴開頭的 layer 與 source
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
map |
Object | MapLibre 地圖實例 |
prefix |
String | 前綴字串 |
trackedLayerIds |
Array | 目前追蹤的 layer ID 陣列 |
trackedSourceIds |
Array | 目前追蹤的 source ID 陣列 |
Returns:
更新後的追蹤陣列
- Type
- Object
computeBasicOpt(opt, currentZoom, currentCenter) → {Object}
- Description:
計算基本 opt 設定(zoom, minZoom, maxZoom, center, panelBackgroundColor 等)。對任何輸入皆回合法值且不拋錯(R13)
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
opt |
Object | |
currentZoom |
Number | |
currentCenter |
Array |
Returns:
- Type
- Object
computeClusterOpts(opt) → {Object}
- Description:
計算叢集化設定
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
opt |
Object |
Returns:
- Type
- Object
computePanelBaseMaps(opt, currentBaseMaps, currentTerrainMapTemp, currentBaseMapsDataTemp, defBaseMapsData, defTerrainMapData) → {Object}
- Description:
計算底圖面板配置
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
opt |
Object | Vue component 的 opt prop |
currentBaseMaps |
Array | 目前 panelBaseMaps.baseMaps(用於保留已選底圖) |
currentTerrainMapTemp |
Object | 上次 terrainMap 快照(用於 diff) |
currentBaseMapsDataTemp |
Array | 上次底圖資料快照(用於 diff) |
defBaseMapsData |
Array | 預設底圖配置 |
defTerrainMapData |
Object | 預設地形配置 |
Returns:
- Type
- Object
computePanelCompass3d()
- Description:
計算 3D 指北針面板配置
- Source:
computePanelCompassRose(opt, uiResData) → {Object}
- Description:
計算羅盤圖標面板配置
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
opt |
Object | |
uiResData |
Object |
Returns:
panelCompassRose
- Type
- Object
computePanelItems()
- Description:
計算圖層顯隱面板配置
- Source:
computePanelLabels()
- Description:
計算地圖資訊面板配置
- Source:
computePanelLegends()
- Description:
計算圖例面板配置
- Source:
computePanelScale()
- Description:
計算比例尺面板配置
- Source:
computePanelZoom()
- Description:
計算縮放按鈕面板配置
- Source:
computeZoomRange(opt) → {Object}
- Description:
正規化圖台縮放範圍(opt.minZoom、opt.maxZoom): 數字或數字字串依數值; 非數值/非有限視為未給用預設(0、22); 夾在 0~24; minZoom 大於 maxZoom 時忽略 minZoom(ignoredMin=true, 由呼叫端警告一次; 同圖磚 minzoom/maxzoom 之作法, maxZoom 為保護性欄位)。 範圍只交給地圖把關(R11), 元件側不另夾 opt.zoom
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
opt |
Object |
Returns:
- Type
- Object
countVisible(arr) → {Number}
- Description:
計算可見圖層數量(純函式)
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
arr |
Array | 含 visible 屬性的陣列 |
Returns:
- Type
- Number
createDirectionalPopup(map, lngLat, content, position, gap, extraOpts, anchorOffsetopt) → {maplibregl.Popup|null}
- Description:
建立方向性彈窗(支援 top/bottom/left/right + 二階段自動翻轉)
- Source:
Parameters:
| Name | Type | Attributes | Default | Description |
|---|---|---|---|---|
map |
Object | MapLibre 地圖實例 |
||
lngLat |
Array | [lng, lat] |
||
content |
HTMLElement | DOM 內容元素 |
||
position |
String | 'top'|'bottom'|'left'|'right' |
||
gap |
Number | 與錨點的間距(px) |
||
extraOpts |
Object | 其他 Popup 選項 |
||
anchorOffset |
Array |
<optional> |
[0,0]
|
額外偏移 [dx, dy](正x=右移,正y=下移) |
Returns:
- Type
- maplibregl.Popup | null
createMap(container, opt) → {maplibregl.Map}
- Description:
建立 MapLibre 地圖實例
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
container |
HTMLElement | 地圖容器 DOM 元素 |
opt |
Object | Vue component 的 opt prop |
Returns:
- Type
- maplibregl.Map
fastRingGroupToPolygons(src) → {Array|null}
- Description:
將「單一 XOR 群」(一組環)轉為 GeoJSON polygon 陣列 僅在該組環之 XOR 語意與 GeoJSON 環語意等價時才成立,不等價回傳 null。
等價條件(全數滿足):
- 各環為 >= 3 點之點陣列且座標為有限數值
- 環內無自相交、環間無相交或接觸(8 字型環、部分重疊環、重複頂點之自我接觸環, polybool 會切分/做對稱差,快速路徑不會)
- 多環時,二者擇一: a. 全離散: 各環 bbox 兩兩不重疊 → 互不重疊環之 XOR 對稱差=聯集,各環為獨立 polygon (行政區飛地/離島常態;bbox 互斥本身即排除包含與相交) b. 首環 + 互不重疊之洞: 第 2 環起之 bbox 互不重疊(避免島中島三層套疊被誤當成洞) 且各自完全落在首環內 混合情形(部分洞/部分離散)回退慢管線
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
src |
Array | 環陣列 [ring][pt[lat, lng]] |
Returns:
polygon 陣列(各元素為環陣列,座標已轉為 [lng, lat])或 null
- Type
- Array | null
findPointById(pointSets, targetId) → {Object}
- Description:
從 pointSets 中依 id 查找 point 資料
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
pointSets |
Array | |
targetId |
String |
Returns:
- Type
- Object
freezeCoordField()
- Description:
深度凍結「大量座標」欄位(points / latLngs),使 Vue 2 observe 直接跳過該子樹 Vue 2 之 observe() 對 !Object.isExtensible 者不遞迴、不掛 getter/setter, 萬點級資料存入 reactive data 之深走訪成本(數百 ms)因此免除。
僅可用於「套件內外皆唯讀」之座標欄位:
- 組物件本身不可凍結: syncSetsVisible / toggleItemVisible / modifyItemsVisible 會回寫 visible
- contourSets 不可凍結: renderContourSets 會回寫 cs.legend 座標欄位來源為 processSetsChange 內 cloneDeep 之私有副本, 凍結不影響呼叫端原資料。
- Source:
getBaseMapOpacity(bm) → {Number|null}
- Description:
疊加層(colorShade 空字串)透明度之單一擁有者(R14): 預設值與值域只在此決定, 渲染(vector/raster 建立與 paint 更新)與面板一律呼叫之。 bm.opacity 為數字或數字字串 → 夾在 0~1 之有限數(0 有效); 非數值/非有限(NaN、±Infinity、'abc'、布林、陣列…)視為未給 → vector 預設 0.8、其餘(raster/wms)預設 1; type 為 'style' 不支援整組透明度(各層自帶 opacity, 常為 zoom 表達式) → 回 null
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
bm |
Object | 底圖條目 |
Returns:
- Type
- Number | null
getContourColor()
- Description:
計算等值線色彩(基於 gradient 內插)
- Source:
getMapObject(map) → {Object|null}
- Description:
取得 map 物件(包裝 panTo 使其相容 Leaflet 的 [lat,lng] 格式)。 以 Proxy 包裝而非改寫原 map 實例——就地替換 panTo 會污染共享實例, 使元件內部以原生 [lng,lat] 呼叫的平移被再翻轉一次(座標顛倒)
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
map |
Object |
Returns:
- Type
- Object | null
isBaseMapsPaintOnlyDiff(prev, next) → {Boolean}
- Description:
判斷新舊 baseMaps 是否「僅 paint 欄位(colorFillExtrusion/opacity)變更」。 true → 可只就地 setPaintProperty(updateBaseMapPaint), 無需重建底圖; false → 非僅 paint 變更, 由呼叫端再以 isBaseMapsStructuralDiff 判斷走增量或完整重套。
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
prev |
Array | 上次套用的 baseMaps |
next |
Array | 本次 baseMaps |
Returns:
- Type
- Boolean
isBaseMapsStructuralDiff(prev, next) → {Boolean}
- Description:
判斷新舊 baseMaps 是否有「結構性變更」(新增/刪除/url/type/layer/layerType/colorShade 等)。 false → 僅順序/可見性/paint 差異, 可走增量(updateBaseMapsIncremental), 不重建、不重抓圖磚; true → 有結構性變更, 需完整重套 applyBaseMaps。
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
prev |
Array | 上次套用的 baseMaps |
next |
Array | 本次 baseMaps |
Returns:
- Type
- Boolean
offDelegatedListenersByLayer(map, matchLayerId)
- Description:
反註冊委派 listeners 中綁定於符合條件 layer id 者(使註冊與圖層同壽命, 避免累積)。 注意: 依賴 maplibre 私有結構 map._delegatedListeners, 升級 maplibre 時須確認仍相容—— 故全 codebase 僅此一份實作, 各清理路徑共用。
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
map |
Object | MapLibre 地圖實例 |
matchLayerId |
function | (layerId) => Boolean |
offLayerHover()
- Description:
反註冊圖層之 hover handler(圖層移除時呼叫, 使註冊與圖層同壽命)。 若移除當下該圖層為 hover 中, 先發 leave 還原 cursor/tooltip 再移除。
- Source:
pointInRing(pt, ring)
- Description:
點是否在環(ring)內部(Ray Casting 演算法)
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
pt |
Array | [lng, lat] |
ring |
Array | [[lng, lat], ...] |
preloadBaseMapStyles(baseMaps) → {Promise.<Number>}
- Description:
預先抓取 style 型別底圖的 style JSON 並快取(applyBaseMaps 為同步流程, 只讀快取)
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
baseMaps |
Array | 底圖配置陣列 |
Returns:
本次新載入成功的 style 數量, 0 代表全部已快取或無 style 型別(呼叫端無須補套, 避免無謂重建)
- Type
- Promise.<Number>
ptOnSeg()
- Description:
點 (rx,ry) 是否落在線段 (px,py)-(qx,qy) 上(含端點,需完全共線)
- Source:
recheckSinglePopupDir(map, popup) → {maplibregl.Popup}
- Description:
偵測單一 popup/tooltip 的方向是否需要翻轉,若需要則重建
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
map |
Object | MapLibre 地圖實例 |
popup |
maplibregl.Popup | 目前的 popup 物件 |
Returns:
- 原 popup 或翻轉後的新 popup
- Type
- maplibregl.Popup
renderImageSets(map, imageSets, tracked, callbacks)
- Description:
渲染影像圖層(kid 識別 + 逐組差異跳過)。 maplibre 的 image source 一源一張圖, 無法聚合; 但 updateImage 會觸發圖片重載, 故以逐組差異跳過使未變更組零觸碰(不 updateImage → 不重載/不閃爍), 並以 kid(選配 key, 未給退回索引)維持組身分, 免陣列位移造成全組重載。
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
map |
Object | |
imageSets |
Array | 已正規化的 imageSets(各組含 kid) |
tracked |
Object | { sourceIds, layerIds } |
callbacks |
Object | { getDisplayOrderByType(): Boolean } |
renderPointSets(map, pointSets, clusterOpts, tracked, callbacks, iconDefault)
- Description:
渲染點圖層(circle + symbol,含叢集化;kid 識別 + 逐組差異跳過)
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
map |
Object | |
pointSets |
Array | 已正規化的 pointSets(各組含 kid) |
clusterOpts |
Object | computeClusterOpts() 的回傳值 |
tracked |
Object | { sourceIds, layerIds } |
callbacks |
Object | { registerIcon(key, src, w, h): Promise, onPointClick(ptData, psData, p, coords): void, onPointEnter(ptData, psData, p, coords): void, onPointLeave(): void, getPointData(kid, kpt): ptData, getPointSetData(kid): psData, getDisplayOrderByType(): Boolean, } |
iconDefault |
Object | { src, size, key } |
resolveFeatureById(id, polylineSets, polygonSets) → {Object|null}
- Description:
解析 feature id 並取得對應資料(折線/多邊形)
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
id |
String | 例如 'polylineSet-0' 或 'polygonSet-0' |
polylineSets |
Array | |
polygonSets |
Array |
Returns:
- Type
- Object | null
ringBBox()
- Description:
環之 bbox:[minX, minY, maxX, maxY]
- Source:
ringsHaveCrossing(rings) → {Boolean}
- Description:
一組(已閉合)環之間是否存在相交或接觸 「相交」含嚴格穿越(8 字型環、部分重疊環)與端點接觸(重複頂點、頂點壓線之退化環), 兩者 polybool 都會切分/重組,快速路徑不會,故一律視為不可走快速路徑。 以 x 方向掃描線 + y 方向 bbox 預篩把配對數壓到近線性,避免大環的 O(n^2) 爆炸; 段資料存平坦 TypedArray,免去每段一個物件的配置成本。 同環之相鄰段與閉環首尾段本就共端點,不計。
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
rings |
Array | [[[x,y],...], ...] 各環首尾點相同 |
Returns:
- Type
- Boolean
setOverlayOpacity(map, baseMaps, idx, val)
- Description:
調整疊加圖層透明度
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
map |
Object | |
baseMaps |
Array | |
idx |
Number | |
val |
Number | String |
switchBaseMap(map, baseMaps, idx)
- Description:
切換底圖(radio 單選)
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
map |
Object | |
baseMaps |
Array | panelBaseMaps.baseMaps(直接修改 visible 屬性) |
idx |
Number | 選中的底圖索引 |
toggleOverlayVisible(map, baseMaps, idx)
- Description:
切換疊加圖層可見性(checkbox)
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
map |
Object | |
baseMaps |
Array | |
idx |
Number |
tryBuildPolygonGeometryFast(lls) → {Object|null}
- Description:
buildPolygonGeometry 之快速路徑:單趟迴圈完成「閉環 + 座標反轉」, 結構非預期或 XOR 語意不等價一律回傳 null 交回慢管線(polybool)處理。
支援之輸入深度(與慢管線 toMultiPolygon 之判讀一致): 2 - [pt[lat,lng]] 單一 ringString 3 - [ring][pt] 一個 polygon 之環陣列(XOR 套疊) 4 - [polygon][ring][pt] multiPolygon;各 polygon 之環各自 XOR 後串接, 故逐 polygon 獨立判定等價性(跨 polygon 之環互不影響)
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
lls |
Array | 原始 latLngs(座標為 [lat, lng]) |
Returns:
MultiPolygon geometry 或 null
- Type
- Object | null
updateBaseMapPaint(map, baseMaps, idx)
- Description:
就地更新單一底圖 entry 的 paint(顏色/透明度), 不重建 layer/source — 避免重抓圖磚與其他未變更圖層閃爍。供「僅 paint 變更」的快路徑使用。
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
map |
Object | |
baseMaps |
Array | 底圖配置陣列 |
idx |
Number | 索引 |
updateBaseMapsIncremental(map, baseMaps)
- Description:
「僅順序/可見性/paint 變更」時的增量套用: 就地更新 paint 與 visibility, 並用 moveLayer 將疊加層依新陣列序重排至「資料圖層之下、底圖之上」。 完全不 remove/add source(不重抓圖磚), 不擾動資料圖層 z-order(無閃爍)。
- Source:
Parameters:
| Name | Type | Description |
|---|---|---|
map |
Object | |
baseMaps |
Array | 本次 baseMaps(新順序) |