Repository navigation
Conversation
clearOverlays() cleared each provider's own overlay controllers, but not the StrategyMarkerController behind MarkerRenderingSupport (clustering and other marker-rendering plugins), so clustered markers stayed on the map. MarkerRenderingSupport gains clearMarkers(): clear what the connected strategy drew (StrategyMarkerController.clear(): onRemove -> strategy.clear() -> onPostProcess), keeping the strategy connected. After that it behaves like the overlay collectors after a clear: while the same instances keep arriving (SwiftUI re-evaluates the body right after clearOverlays()), nothing is drawn; once the membership changes or a re-created state arrives, the whole list is drawn again. flush() (style reload) does not bring them back either. MapServiceRegistry.clearMarkerRendering() resolves the registered support and calls it; every provider's clearOverlays() calls it once. clearMarkers() is a protocol requirement with no default on purpose: a default no-op would compile and silently do nothing for HERE and ArcGIS 3D, which keep their own strategy controller instead of StrategyMarkerManager. Public API: additions only. MarkerRenderingClearTests fails when clearMarkers() does nothing (markers still drawn after clearMarkerRendering()) and passes now.
This was referenced Nov 8, 2026
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.
なぜ
clearOverlays()は、各プロバイダが自分で持つコントローラ(マーカー・ポリゴンなど)しか clear していませんでした。クラスタリングなどの拡張が登録する Strategy のコントローラ(StrategyMarkerController)は対象外で、clearOverlays()の後もクラスタのマーカーが地図に残っていました。何を変えたか
MarkerRenderingSupportにclearMarkers()を足しました。接続中の Strategy が描いたものを clear します(StrategyMarkerController.clear(): onRemove → strategy.clear() → onPostProcess)。Strategy は接続したままです。MapServiceRegistry.clearMarkerRendering()を足しました。登録されている support を引いてclearMarkers()を呼びます。各プロバイダのclearOverlays()はこれを 1 回呼びます(プロバイダ側の PR)。MarkerRenderingClearTestsを足しました。clearMarkers()が何もしないと落ちます。ソース互換について(承認済み)
MarkerRenderingSupport.clearMarkers()は既定実装なしの必須要件にしています。既定の空実装にすると、独自の Strategy コントローラを持つ HERE や ArcGIS 3D のような準拠型で、コンパイルは通るのに何も消えない、という形になるためです。そのため、SDK の外でMarkerRenderingSupportに準拠している型はソース互換が壊れます(実装の追加が必要)。この点はユーザーの判断で承認済みです。検証
2026-11-08 に develop(fix/mapview-teardown、fix/geodesic-polygon-fill、fix/clear-followups、refactor/polygon-controller などのマージ後)の上に載せ直してから確かめています。
MarkerRenderingClearTestsを含む。clearMarkers()が何もしないと落ちることを確認済み)。api-surface は追加のみ。clearOverlays()が strategy まで届く経路を、develop の teardown 後のコードで読み直しました(controller → clearOverlaysHandler(MapHost / Coordinator)→ 各コントローラの clear →clearMarkerRendering()。ArcGIS は 3D/2D の controller から、Longdo は OverlayBinding から、OMM はstrategyManager.clearMarkers()を直接)。素通りする経路はありませんでした。fix/overlay-stacking-orderを合わせたアプリを MapLibre / MapKit で動かし、clearOverlays の後に Strategy のマーカー(MarkerClusterGroup 経由)も消えることを確かめました。前回(載せ直す前)は全プロバイダで撮っています。確認できていないもの
.iOS(.v17)にしてビルドと api を確かめました。StrategyMarkerManager.clear()(disconnect)では、GL 以外のプロバイダでネイティブのマーカーが残ります。関連 PR(
fix/clear-strategyの一式)マージの順番:
fix/overlay-stacking-orderの PR 一式とは衝突しません(git merge-treeで確認済み)。順番は clear-strategy → stacking を想定しています。