From 7f49b2a9d8e12a2841f9dc2fce79c6bf209f8063 Mon Sep 17 00:00:00 2001 From: Masashi Katsumata Date: Tue, 10 Nov 2026 16:16:50 -0800 Subject: [PATCH] Support bulk Circles with raster tiles --- .../arcgis/ArcGISMapView2DController.kt | 13 +++++++++++++ .../mapconductor/arcgis/ArcGISMapViewController.kt | 13 +++++++++++++ .../mapconductor/arcgis/ArcGISOverlayStacking.kt | 2 ++ .../raster/ArcGISRasterLayerOverlayRenderer.kt | 3 +++ 4 files changed, 31 insertions(+) diff --git a/src/main/java/com/mapconductor/arcgis/ArcGISMapView2DController.kt b/src/main/java/com/mapconductor/arcgis/ArcGISMapView2DController.kt index 4bcfe44..6720cef 100644 --- a/src/main/java/com/mapconductor/arcgis/ArcGISMapView2DController.kt +++ b/src/main/java/com/mapconductor/arcgis/ArcGISMapView2DController.kt @@ -1,5 +1,8 @@ package com.mapconductor.arcgis +import com.mapconductor.core.circle.CIRCLE_TILE_LAYER_ID +import com.mapconductor.core.circle.CircleTiler +import com.mapconductor.core.circle.circleTileRasterLayerState import com.arcgismaps.LoadStatus import com.arcgismaps.geometry.SpatialReference import com.arcgismaps.mapping.Viewpoint @@ -145,6 +148,16 @@ class ArcGISMapView2DController( } } } + circleController.tiler = + CircleTiler().apply { + onTemplate = { template, tileSize -> + if (template != null) { + rasterLayerController.upsert(circleTileRasterLayerState(template, tileSize)) + } else { + rasterLayerController.removeById(CIRCLE_TILE_LAYER_ID) + } + } + } } override fun moveCamera(position: MapCameraPosition) = handleMoveCamera(position) diff --git a/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt b/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt index e1a5b0f..a341246 100644 --- a/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt +++ b/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt @@ -1,5 +1,8 @@ package com.mapconductor.arcgis +import com.mapconductor.core.circle.CIRCLE_TILE_LAYER_ID +import com.mapconductor.core.circle.CircleTiler +import com.mapconductor.core.circle.circleTileRasterLayerState import com.arcgismaps.LoadStatus import com.arcgismaps.mapping.view.GraphicsOverlay import com.mapconductor.arcgis.circle.ArcGISCircleOverlayController @@ -130,6 +133,16 @@ class ArcGISMapViewController( } } } + circleController.tiler = + CircleTiler().apply { + onTemplate = { template, tileSize -> + if (template != null) { + rasterLayerController.upsert(circleTileRasterLayerState(template, tileSize)) + } else { + rasterLayerController.removeById(CIRCLE_TILE_LAYER_ID) + } + } + } } override fun moveCamera(position: MapCameraPosition) = handleMoveCamera(position) diff --git a/src/main/java/com/mapconductor/arcgis/ArcGISOverlayStacking.kt b/src/main/java/com/mapconductor/arcgis/ArcGISOverlayStacking.kt index a039aef..e131794 100644 --- a/src/main/java/com/mapconductor/arcgis/ArcGISOverlayStacking.kt +++ b/src/main/java/com/mapconductor/arcgis/ArcGISOverlayStacking.kt @@ -32,6 +32,8 @@ internal object ArcGISOverlayStacking { * ポリラインのタイル: ポリゴンのタイルの上、マーカーのタイルの下。operational layer なので * GraphicsOverlay(ネイティブのポリゴン・サークル・ポリライン)より下(ポリゴンのタイルと同じ制約)。 */ + val CIRCLE_TILE = OverlayStacking.Key(OverlayKind.Circle, Int.MIN_VALUE) + val POLYLINE_TILE = OverlayStacking.Key(OverlayKind.Polyline, Int.MIN_VALUE) fun key( diff --git a/src/main/java/com/mapconductor/arcgis/raster/ArcGISRasterLayerOverlayRenderer.kt b/src/main/java/com/mapconductor/arcgis/raster/ArcGISRasterLayerOverlayRenderer.kt index b0f979c..ff60a62 100644 --- a/src/main/java/com/mapconductor/arcgis/raster/ArcGISRasterLayerOverlayRenderer.kt +++ b/src/main/java/com/mapconductor/arcgis/raster/ArcGISRasterLayerOverlayRenderer.kt @@ -15,6 +15,7 @@ import com.mapconductor.arcgis.ArcGISOverlayStacking import com.mapconductor.arcgis.WebMercatorTileLevels import com.mapconductor.core.controller.OverlayKind import com.mapconductor.core.polygon.POLYGON_TILE_LAYER_ID +import com.mapconductor.core.circle.CIRCLE_TILE_LAYER_ID import com.mapconductor.core.polyline.POLYLINE_TILE_LAYER_ID import com.mapconductor.core.projection.WEB_MERCATOR_MAX_EXTENT_METERS import com.mapconductor.core.raster.RasterHeaderRuleSet @@ -186,6 +187,8 @@ class ArcGISRasterLayerOverlayRenderer( ArcGISOverlayStacking.MARKER_TILE } else if (state.id == POLYGON_TILE_LAYER_ID) { ArcGISOverlayStacking.POLYGON_TILE + } else if (state.id == CIRCLE_TILE_LAYER_ID) { + ArcGISOverlayStacking.CIRCLE_TILE } else if (state.id == POLYLINE_TILE_LAYER_ID) { ArcGISOverlayStacking.POLYLINE_TILE } else {