Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions api/android-for-longdo.api
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,7 @@ public final class com.mapconductor.longdo.LongdoMapViewScope extends com.mapcon
public final class com.mapconductor.longdo.LongdoOverlayStacking {
public static final com.mapconductor.longdo.LongdoOverlayStacking INSTANCE;
public final java.lang.String addLayerJs(java.lang.String, com.mapconductor.core.controller.OverlayKind, int);
public final java.lang.String addPolygonTileLayerJs(java.lang.String);
public final java.lang.String addMarkerTileLayerJs(java.lang.String);
}
public final class com.mapconductor.longdo.LongdoOverlayState {
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/com/mapconductor/longdo/LongdoMapViewController.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@ import com.mapconductor.core.marker.MarkerTilingOptions
import com.mapconductor.core.marker.OnMarkerEventHandler
import com.mapconductor.core.marker.StrategyMarkerController
import com.mapconductor.core.polygon.OnPolygonEventHandler
import com.mapconductor.core.polygon.POLYGON_TILE_LAYER_ID
import com.mapconductor.core.polygon.PolygonCapableInterface
import com.mapconductor.core.polygon.PolygonTiler
import com.mapconductor.core.polygon.polygonTileRasterLayerState
import com.mapconductor.core.polyline.OnPolylineEventHandler
import com.mapconductor.core.polyline.PolylineCapableInterface
import com.mapconductor.core.polyline.PolylineState
Expand Down Expand Up @@ -104,6 +107,19 @@ class LongdoMapViewController(
registerOverlayController(polygonController)
registerOverlayController(groundImageController)
registerOverlayController(circleController)
// Many polygons are drawn as raster tiles. Longdo has no RasterLayer
// controller, so they are mounted like the marker tiles: outside the
// app's RasterLayer composition, which therefore never removes them.
polygonController.tiler =
PolygonTiler().apply {
onTemplate = { template, tileSize ->
if (template != null) {
mountRasterLayer(polygonTileRasterLayerState(template, tileSize))
} else {
unmountRasterLayer(POLYGON_TILE_LAYER_ID)
}
}
}
// ホルダーの投影にカメラを供給する。ホルダーはコントローラより先に作られるので
// ここで繋ぐ。これが無いと toScreenOffset が常に null を返し、InfoBubble と
// マーカー追従が理由も出ずに落ちる。
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.mapconductor.longdo

import com.mapconductor.core.controller.OverlayKind
import com.mapconductor.core.polygon.POLYGON_TILE_LAYER_ID
import com.mapconductor.core.raster.RasterHeaderRuleSet
import com.mapconductor.core.raster.RasterLayerSource
import com.mapconductor.core.raster.RasterLayerState
Expand Down Expand Up @@ -40,7 +41,12 @@ internal fun LongdoMapViewController.applyRaster(state: RasterLayerState) {
private fun rasterAddLayerJs(
layerSpec: String,
state: RasterLayerState,
): String = LongdoOverlayStacking.addLayerJs(layerSpec, OverlayKind.RasterLayer, state.zIndex)
): String =
if (state.id == POLYGON_TILE_LAYER_ID) {
LongdoOverlayStacking.addPolygonTileLayerJs(layerSpec)
} else {
LongdoOverlayStacking.addLayerJs(layerSpec, OverlayKind.RasterLayer, state.zIndex)
}

internal fun LongdoMapViewController.runRasterJs(js: String) {
runCatching { longdoMap.run(js) {} }
Expand Down Expand Up @@ -126,7 +132,7 @@ internal fun LongdoMapViewController.readdRastersAfterStyleSwapJs(rasters: List<
if (state.id == markerTileState?.id) {
LongdoOverlayStacking.addMarkerTileLayerJs(layerSpec)
} else {
LongdoOverlayStacking.addLayerJs(layerSpec, OverlayKind.RasterLayer, state.zIndex)
rasterAddLayerJs(layerSpec, state)
}
"try{if(!m.getSource('$srcId'))m.addSource('$srcId',$spec);" +
"if(!m.getLayer('$layerId'))$addLayer}catch(e){}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ internal object LongdoOverlayStacking {
zIndex: Int = 0,
): String = "($FN)(m,$layerSpec,${OverlayStacking.band(kind)},$zIndex);"

/** ポリゴンのタイル: ポリゴンの帯の一番下(画像になったポリゴンであって、地図の画像ではない)。 */
fun addPolygonTileLayerJs(layerSpec: String): String = addLayerJs(layerSpec, OverlayKind.Polygon, Int.MIN_VALUE)

/** マーカーのタイル: マーカーの帯の一番下。 */
fun addMarkerTileLayerJs(layerSpec: String): String = addLayerJs(layerSpec, OverlayKind.Marker, Int.MIN_VALUE)
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ class LongdoPolygonController(
) : PolygonController<LongdoPolygonHandle>(polygonManager, renderer) {
/** 既知のポリゴンを再適用する(地図 `ready` 後の復元用)。 */
fun reapply() {
renderer.reapply(polygonManager.allEntities().map { it.polygon })
// Polygons drawn as tiles (PolygonController.tiler) have no handle.
@Suppress("USELESS_CAST")
renderer.reapply(polygonManager.allEntities().mapNotNull { it.polygon as LongdoPolygonHandle? })
}
}
Loading