Skip to content

Clear strategy-driven markers in clearOverlays() - #13

Open
wf9a5m75 wants to merge 1 commit into
developfrom
fix/clear-strategy
Open

wf9a5m75 wants to merge 1 commit into
developfrom
fix/clear-strategy

Conversation

@wf9a5m75

@wf9a5m75 wf9a5m75 commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

なぜ

clearOverlays() は、各プロバイダが自分で持つコントローラ(マーカー・ポリゴンなど)しか clear していませんでした。クラスタリングなどの拡張が登録する Strategy のコントローラ(StrategyMarkerController)は対象外で、clearOverlays() の後もクラスタのマーカーが地図に残っていました。

何を変えたか

clearOverlays() の最後で MapServiceRegistry.clearMarkerRendering()(ios-sdk-core の同名 PR で追加)を呼びます。

ios-sdk-core 側で MarkerRenderingSupport.clearMarkers() は既定実装なしの必須要件になります(外部の準拠型はソース互換が壊れます。承認済み)。

検証

2026-11-08 に develop(fix/mapview-teardown、fix/geodesic-polygon-fill、fix/clear-followups、refactor/polygon-controller などのマージ後)の上に載せ直してから確かめています。

  • ios-sdk-core の単体テスト 362 件すべて成功(MarkerRenderingClearTests を含む。clearMarkers() が何もしないと落ちることを確認済み)。api-surface は追加のみ。
  • 11 プロバイダとも、同じブランチの core と組み合わせて api-surface.sh check(BUILD_LIBRARY_FOR_DISTRIBUTION でのビルドを含む)が通りました。
  • 各プロバイダの clearOverlays() が strategy まで届く経路を、develop の teardown 後のコードで読み直しました(controller → clearOverlaysHandler(MapHost / Coordinator)→ 各コントローラの clear → clearMarkerRendering()。ArcGIS は 3D/2D の controller から、Longdo は OverlayBinding から、OMM は strategyManager.clearMarkers() を直接)。素通りする経路はありませんでした。
  • iPad 実機で、develop + この PR 一式 + fix/overlay-stacking-order を合わせたアプリを MapLibre / MapKit で動かし、clearOverlays の後に Strategy のマーカー(MarkerClusterGroup 経由)も消えることを確かめました。前回(載せ直す前)は全プロバイダで撮っています。

確認できていないもの

  • ios-for-googlemaps は、Package.swift の iOS 16 指定と GoogleMaps の要求(iOS 17)が合わない既存の問題で、そのままではビルドできません(develop でも同じ)。確認用のコピーだけ .iOS(.v17) にしてビルドと api を確かめました。
  • 載せ直した後の実機確認は MapLibre / MapKit のみです(develop が clearOverlays の経路を触っていないため)。
  • 既存の問題(この PR の範囲外): StrategyMarkerManager.clear()(disconnect)では、GL 以外のプロバイダでネイティブのマーカーが残ります。

関連 PR(fix/clear-strategy の一式)

マージの順番:

  1. 各プラットフォームの core(android-sdk-core / ios-sdk-core / js-sdk-core)
  2. そのプラットフォームのプロバイダ(core の新しい API を呼ぶので、core より先に入れるとビルドが通りません)
  • web はさらに js-sdk-core の npm 公開と、各 react-for-* の依存の引き上げが前提です(npm 公開はまだしない、という決定なので、web のプロバイダ PR はそれまで保留です)。
  • fix/overlay-stacking-order の PR 一式とは衝突しません(git merge-tree で確認済み)。順番は clear-strategy → stacking を想定しています。

clearOverlays() cleared this provider's own overlay controllers but not
the strategy controller behind MarkerRenderingSupport, so markers drawn
by clustering (or any other marker-rendering plugin) stayed on the map.

It now ends with MapServiceRegistry.clearMarkerRendering() (ios-sdk-core
fix/clear-strategy), which reaches the registered support's
clearMarkers(): StrategyMarkerController.clear() (onRemove ->
strategy.clear() -> onPostProcess), and the next syncMarkers sends the
markers again, as the overlay collectors do after a clear.

Requires the ios-sdk-core change that adds clearMarkers() to
MarkerRenderingSupport.
This was referenced Nov 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant