Repository navigation
Conversation
OVERLAY_STACK_ORDER is the order every provider stacks overlays in, bottom to top: raster < ground image < polygon < circle < polyline < marker. Polygon tiles share the polygon band and marker tiles the marker band. zIndex orders within a band; equal zIndexes keep the order they were handed over in. It does not depend on the order overlays were added in, re-sent in after clearOverlays(), or put back in after a design change. Helpers for the two kinds of SDK the providers sit on: - overlayStackBeforeId(): the beforeId for SDKs that keep an ordered layer list (MapLibre GL family, Azure Maps, ArcGIS, HERE layers). - overlayStackZ(): a number per band for SDKs that order by a value (pane z-index, deck.gl/OpenLayers layer zIndex, Cesium ground zIndex, Google shape zIndex), with zIndex clamped so it cannot cross a band. CircleController.zIndex is 4 (was 3, the same as polygons) to match. All of it is @internal (driver implementation point); the public API snapshot only gains the export names. OverlayStacking.test.mjs: every insertion order of the seven layer kinds (5040) ends in the same stack; zIndex and handed-over order inside a band; layers that are not ours are skipped; bands never overlap.
This was referenced Nov 8, 2026
Open
Open
Open
Open
Open
Open
Open
Open
This was referenced Nov 8, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
なぜ
利用者の決定で、すべてのプロバイダ・3 プラットフォームで、オーバーレイを下から次の順に重ねます。
追加した順・送り直した順(clearOverlays の後など)・デザイン変更の後に左右されません。帯の中は zIndex、同じ zIndex なら渡された順です。
プロバイダごとに重なり順がばらばらでした(TomTom のラスターがポリゴンを覆う、送り直した GroundImage がポリゴンより上に来る、GL 系でサークルがポリゴンの下になる、など)。
何を変えたか
OVERLAY_STACK_ORDERを足しました(全プロバイダが従う順)。overlayStackBeforeId(): レイヤー一覧を持つ SDK(MapLibre GL 系、Azure Maps、ArcGIS、HERE のレイヤー)向けの beforeId。overlayStackZ(): 値で順を決める SDK(pane の z-index、deck.gl/OpenLayers の zIndex、Cesium の ground zIndex、Google の図形 zIndex)向けの帯ごとの数。zIndex は帯をまたがないよう丸めます。CircleController.zIndexを 3(ポリゴンと同じ)から 4 にしました。OverlayStacking.test.mjs: 7 種類のレイヤーの追加順 5040 通りすべてが同じ並びになること、帯の中は zIndex と渡した順、自分のでないレイヤーは飛ばすこと、帯が重ならないことを確かめます。直す前と後(このプラットフォームのプロバイダ)
SDK の制約で守れないもの
地図のラベルとの関係(今のまま)
今のままです。GL 系(MapLibre・Mapbox・MapTiler・Mappls・TomTom・Longdo)は、ラスターがベースマップのラベルの下、GroundImage・図形・マーカーはラベルの上(変更なし)。ラスターの帯を一番下にする決定とは矛盾しません(ラスターは自分の他のレイヤーより下で、かつラベルの下)。ラベルの扱いを変えるなら別の判断が必要です。
検証
2026-11-08 に develop(fix/mapview-teardown、fix/geodesic-polygon-fill、fix/clear-followups、refactor/polygon-controller などのマージ後)の上に載せ直してから確かめています。
OverlayStacking.test.mjs(追加順 5040 通り)、GL 系 6 本のOverlayStackOrder.test.mjs(120 通り・送り直し・スタイルの差し替え)が通ります。test/PolygonController.test.mjsの偽の地図にgetLayersOrder()を 1 行足しました(stacking は今のレイヤー順を読んで beforeId を決めるため。本物の地図にはある API で、テストの期待する並びは変えていません)。確認できていないもの
関連 PR(
fix/overlay-stacking-orderの一式)マージの順番:
fix/clear-strategyの一式(先に入れる想定。衝突はしないことをgit merge-treeで確認済み)fix/maptiler-overlay-restoreの上に載せています(同じ削除処理を両方が書き換えたため)。先に restore の PR(Remove style layers and sources by object so they can come back android-for-maptiler#17)を入れてください。