From c196f9d23eaad6785bd5cf4dc994b207d57cc34c Mon Sep 17 00:00:00 2001 From: Masashi Katsumata Date: Sat, 9 Aug 2025 22:34:35 +0900 Subject: [PATCH 1/7] fix: geodesic polyline is incorrect --- .../src/main/java/com/mapconductor/core/Utils.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/Utils.kt b/mapconductor-core/src/main/java/com/mapconductor/core/Utils.kt index a3f39374..00ac3dcd 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/Utils.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/Utils.kt @@ -102,11 +102,9 @@ fun interpolateGeodesicPolyline(origin: IGeoPoint, dest: IGeoPoint): List): List { val results = mutableListOf() - var prev = points[0] for (i in 1..points.size - 1) { - val current = points[i] - results.addAll(interpolateGeodesicPolyline(prev, current)) - prev = current + val interpolatedPoints = interpolateGeodesicPolyline(points[i - 1], points[i]) + results.addAll(interpolatedPoints) } return results } From e69b62fc0319c6c47586ea3d99985ce6a06f0151 Mon Sep 17 00:00:00 2001 From: Masashi Katsumata Date: Sun, 10 Aug 2025 01:19:01 +0900 Subject: [PATCH 2/7] wip: debugging mapbox geodesic polyline --- .../com/mapconductor/example/DemoAppScreen.kt | 1 + .../pages/map/flyto/FlyToMapComponent.kt | 11 +-- .../example/pages/map/flyto/FlyToMapIcons.kt | 1 + .../example/pages/map/flyto/FlyToMapPage.kt | 3 +- .../pages/map/flyto/FlyToPageViewModel.kt | 66 ++++++++++-------- example-app/src/main/res/drawable/sydney.png | Bin 0 -> 314981 bytes .../main/java/com/mapconductor/core/Utils.kt | 3 + .../mapbox/polyline/MapboxPolylineRenderer.kt | 6 +- 8 files changed, 53 insertions(+), 38 deletions(-) create mode 100644 example-app/src/main/res/drawable/sydney.png diff --git a/example-app/src/main/java/com/mapconductor/example/DemoAppScreen.kt b/example-app/src/main/java/com/mapconductor/example/DemoAppScreen.kt index a11b5d9d..90bf64fc 100644 --- a/example-app/src/main/java/com/mapconductor/example/DemoAppScreen.kt +++ b/example-app/src/main/java/com/mapconductor/example/DemoAppScreen.kt @@ -38,6 +38,7 @@ fun DemoAppScreen() { tokyo = ContextCompat.getDrawable(context, R.drawable.tokyo)!!, london = ContextCompat.getDrawable(context, R.drawable.london)!!, newYork = ContextCompat.getDrawable(context, R.drawable.newyork)!!, + sydney = ContextCompat.getDrawable(context, R.drawable.sydney)!!, ) } diff --git a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapComponent.kt b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapComponent.kt index 61f73d1b..d1cf8703 100644 --- a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapComponent.kt +++ b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapComponent.kt @@ -6,14 +6,17 @@ import androidx.compose.ui.Modifier import com.mapconductor.core.map.MapViewState import com.mapconductor.core.map.OnMapEventHandler import com.mapconductor.core.marker.Marker +import com.mapconductor.core.marker.MarkerState import com.mapconductor.core.marker.OnMarkerEventHandler import com.mapconductor.core.polyline.Polyline +import com.mapconductor.core.polyline.PolylineState import com.mapconductor.example.MapViewContainer @Composable fun FlyToMapComponent( mapViewState: MapViewState<*>?, - viewModel: FlyToPageViewModel, + polylines: List, + markers: List, modifier: Modifier = Modifier, onMapClick: OnMapEventHandler = {}, onMarkerClick: OnMarkerEventHandler = {}, @@ -26,14 +29,14 @@ fun FlyToMapComponent( onMarkerClick = onMarkerClick, ) { // Render polylines connecting all markers - viewModel.polylines.forEach { polyline -> + polylines.forEach { polyline -> key(polyline.id) { Polyline(polyline) } } - + // Render markers for fly to destinations - viewModel.markers.forEach { marker -> + markers.forEach { marker -> key(marker.id) { Marker(marker) } diff --git a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapIcons.kt b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapIcons.kt index 60d7c07a..e435fcd5 100644 --- a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapIcons.kt +++ b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapIcons.kt @@ -7,4 +7,5 @@ data class FlyToMapIcons( val tokyo: Drawable, val newYork: Drawable, val london: Drawable, + val sydney: Drawable, ) diff --git a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt index 19ca2c66..19961eab 100644 --- a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt +++ b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt @@ -35,7 +35,8 @@ fun FlyToMapPage( FlyToMapComponent( mapViewState = mapViewState.value, - viewModel = viewModel, + polylines = viewModel.polylines, + markers = viewModel.markers, onMapClick = viewModel::onMapClick, ) diff --git a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt index 2f213832..ffac1705 100644 --- a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt +++ b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt @@ -57,6 +57,7 @@ class FlyToPageViewModelImpl( private val tokyoLocation = GeoPoint.fromLatLong(35.6762, 139.6503) private val londonLocation = GeoPoint.fromLatLong(51.5074, -0.1278) private val newYorkLocation = GeoPoint.fromLatLong(40.7128, -74.0060) + private val sydneyLocation = GeoPoint.fromLatLong(-33.9506, 151.1815) override val markers = listOf( MarkerState( @@ -86,58 +87,60 @@ class FlyToPageViewModelImpl( icon = ImageIcon( drawable = icons.newYork, ), + ), + MarkerState( + id = "sydney_marker", + position = sydneyLocation, + icon = ImageIcon( + drawable = icons.sydney, + ), ) ) + private val drawGeodesicLines = true + override val polylines = listOf( - // Honolulu to Tokyo - PolylineState( - id = "honolulu_to_tokyo", - points = listOf(honoluluLocation, tokyoLocation), - strokeColor = Color.Blue.copy(alpha = 0.7f), - strokeWidth = 3.dp, - geodesic = true, - ), - // Honolulu to London + // Honolulu to NewYork PolylineState( - id = "honolulu_to_london", - points = listOf(honoluluLocation, londonLocation), + id = "honolulu_to_newyork", + points = listOf(honoluluLocation, newYorkLocation), strokeColor = Color.Blue.copy(alpha = 0.7f), strokeWidth = 3.dp, - geodesic = true, + geodesic = drawGeodesicLines, ), - // Honolulu to NewYork + // Honolulu to Sydney PolylineState( - id = "honolulu_to_newyork", - points = listOf(honoluluLocation, newYorkLocation), + id = "honolulu_to_sydney", + points = listOf(honoluluLocation, sydneyLocation), strokeColor = Color.Blue.copy(alpha = 0.7f), strokeWidth = 3.dp, - geodesic = true, + geodesic = drawGeodesicLines, ), // Tokyo to London PolylineState( id = "tokyo_to_london", points = listOf(tokyoLocation, londonLocation), - strokeColor = Color.Green.copy(alpha = 0.7f), + strokeColor = Color.Black.copy(alpha = 0.7f), strokeWidth = 3.dp, - geodesic = true, + geodesic = drawGeodesicLines, ), - // Tokyo to NewYork + + // Tokyo to NewYork PolylineState( - id = "tokyo_to_london", + id = "tokyo_to_newyork", points = listOf(tokyoLocation, newYorkLocation), - strokeColor = Color.Green.copy(alpha = 0.7f), + strokeColor = Color.Black.copy(alpha = 0.7f), strokeWidth = 3.dp, - geodesic = true, + geodesic = drawGeodesicLines, ), // Tokyo to Honolulu PolylineState( id = "tokyo_to_honolulu", points = listOf(tokyoLocation, honoluluLocation), - strokeColor = Color.Green.copy(alpha = 0.7f), + strokeColor = Color.Black.copy(alpha = 0.7f), strokeWidth = 3.dp, - geodesic = true, + geodesic = drawGeodesicLines, ), // London to New York @@ -146,16 +149,17 @@ class FlyToPageViewModelImpl( points = listOf(londonLocation, newYorkLocation), strokeColor = Color.Red.copy(alpha = 0.7f), strokeWidth = 3.dp, - geodesic = true, + geodesic = drawGeodesicLines, ), - // New York back to Honolulu to complete the circuit + + // London to Sydney PolylineState( - id = "newyork_to_honolulu", - points = listOf(newYorkLocation, honoluluLocation), - strokeColor = Color.Magenta.copy(alpha = 0.7f), + id = "london_to_sydney", + points = listOf(londonLocation, sydneyLocation), + strokeColor = Color.Red.copy(alpha = 0.7f), strokeWidth = 3.dp, - geodesic = true, - ) + geodesic = drawGeodesicLines, + ), ) override fun onMapViewChanged(state: MapViewState<*>) { diff --git a/example-app/src/main/res/drawable/sydney.png b/example-app/src/main/res/drawable/sydney.png new file mode 100644 index 0000000000000000000000000000000000000000..ccb124006815b88baaa6a625b854500e9356e8e0 GIT binary patch literal 314981 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

g)rzgk9p`g;4jR4P;KSAv-qS5lET(x?s`y(SG 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 z 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

#T@DjbuXMsxJ&>s6gdAmM*2s2^RWOVI;G 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 Kc$KJO!2bXp*<-Q* literal 0 HcmV?d00001 diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/Utils.kt b/mapconductor-core/src/main/java/com/mapconductor/core/Utils.kt index 00ac3dcd..473e995a 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/Utils.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/Utils.kt @@ -93,7 +93,9 @@ fun interpolateGeodesicPolyline(origin: IGeoPoint, dest: IGeoPoint): List 179) break wayPoints.add(point) + Log.d("debug", " ${GeoPoint.from(point).toUrlValue()}") fraction += fractionI } @@ -105,6 +107,7 @@ fun createGeodesicPoints(points: List): List { for (i in 1..points.size - 1) { val interpolatedPoints = interpolateGeodesicPolyline(points[i - 1], points[i]) results.addAll(interpolatedPoints) +// if (points[i].longitude < 0) break } return results } diff --git a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/polyline/MapboxPolylineRenderer.kt b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/polyline/MapboxPolylineRenderer.kt index ecd3de54..06ef6401 100644 --- a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/polyline/MapboxPolylineRenderer.kt +++ b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/polyline/MapboxPolylineRenderer.kt @@ -5,6 +5,7 @@ import com.mapbox.geojson.Feature import com.mapbox.geojson.LineString import com.mapbox.maps.extension.style.sources.removeGeoJSONSourceFeatures import com.mapbox.maps.extension.style.sources.updateGeoJSONSourceFeatures +import com.mapconductor.core.createGeodesicPoints import com.mapconductor.core.features.GeoPoint import com.mapconductor.core.polyline.AbstractPolylineRenderer import com.mapconductor.core.polyline.PolylineEntity @@ -43,7 +44,8 @@ class MapboxPolylineRenderer( override suspend fun addPolylines(newLines: List): List { val polylines = newLines.map { state -> - val points = state.points.map { GeoPoint.from(it).toPoint() } +// val points = state.points.map { GeoPoint.from(it).toPoint() } + val points = createGeodesicPoints(state.points).map { GeoPoint.from(it).toPoint() } Feature.fromGeometry( LineString.fromLngLats(points), JsonObject().apply { @@ -67,7 +69,7 @@ class MapboxPolylineRenderer( val features = changes.map { params -> val state = params.entity.state - val points = state.points.map { GeoPoint.from(it).toPoint() } + val points = createGeodesicPoints(state.points).map { GeoPoint.from(it).toPoint() } Feature.fromGeometry( LineString.fromLngLats(points), JsonObject().apply { From 4ef267b5065083430956cb40380568e1320a2723 Mon Sep 17 00:00:00 2001 From: Masashi Katsumata Date: Sun, 10 Aug 2025 15:06:18 +0900 Subject: [PATCH 3/7] Implement geodesic polyline --- .../com/mapconductor/example/DemoAppScreen.kt | 20 +- .../example/pages/map/flyto/FlyToMapPage.kt | 16 +- .../pages/map/flyto/FlyToPageViewModel.kt | 268 ++++++++++-------- .../pages/polygon/PolygonMapComponent.kt | 3 - .../pages/polyline/PolylinePageViewModel.kt | 27 +- .../main/java/com/mapconductor/core/Utils.kt | 62 ++-- .../mapconductor/core/features/GeoPoint.kt | 7 +- .../com/mapconductor/core/marker/ImageIcon.kt | 36 +-- .../here/polyline/HereMapPolylineRenderer.kt | 23 +- .../mapconductor/mapbox/MapboxTypeAlias.kt | 2 +- .../mapbox/polyline/MapboxPolylineLayer.kt | 5 +- .../mapbox/polyline/MapboxPolylineRenderer.kt | 54 ++-- 12 files changed, 276 insertions(+), 247 deletions(-) diff --git a/example-app/src/main/java/com/mapconductor/example/DemoAppScreen.kt b/example-app/src/main/java/com/mapconductor/example/DemoAppScreen.kt index 90bf64fc..3033ba56 100644 --- a/example-app/src/main/java/com/mapconductor/example/DemoAppScreen.kt +++ b/example-app/src/main/java/com/mapconductor/example/DemoAppScreen.kt @@ -17,7 +17,6 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.viewmodel.compose.viewModel import com.mapconductor.example.navigation.NavigationViewModel import com.mapconductor.example.pages.circle.CircleMapPage -import com.mapconductor.example.pages.map.flyto.FlyToMapComponent import com.mapconductor.example.pages.map.flyto.FlyToMapIcons import com.mapconductor.example.pages.map.flyto.FlyToMapPage import com.mapconductor.example.pages.polyline.PolylineMapPage @@ -32,15 +31,16 @@ fun DemoAppScreen() { val currentPage by navigationViewModel.currentPage val isSidebarExpanded by navigationViewModel.isSidebarExpanded val context = LocalContext.current - val flyToMapPageIcons = remember { - FlyToMapIcons( - honolulu = ContextCompat.getDrawable(context, R.drawable.honolulu)!!, - tokyo = ContextCompat.getDrawable(context, R.drawable.tokyo)!!, - london = ContextCompat.getDrawable(context, R.drawable.london)!!, - newYork = ContextCompat.getDrawable(context, R.drawable.newyork)!!, - sydney = ContextCompat.getDrawable(context, R.drawable.sydney)!!, - ) - } + val flyToMapPageIcons = + remember { + FlyToMapIcons( + honolulu = ContextCompat.getDrawable(context, R.drawable.honolulu)!!, + tokyo = ContextCompat.getDrawable(context, R.drawable.tokyo)!!, + london = ContextCompat.getDrawable(context, R.drawable.london)!!, + newYork = ContextCompat.getDrawable(context, R.drawable.newyork)!!, + sydney = ContextCompat.getDrawable(context, R.drawable.sydney)!!, + ) + } val sidebarItems = listOf( diff --git a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt index 19961eab..610fbaba 100644 --- a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt +++ b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt @@ -18,7 +18,6 @@ import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import com.mapconductor.example.ui.DemoMapPageScaffold import com.mapconductor.example.ui.MessageCard -import android.graphics.drawable.Drawable @Composable fun FlyToMapPage( @@ -27,6 +26,7 @@ fun FlyToMapPage( onToggleSidebar: () -> Unit = {}, ) { DemoMapPageScaffold( + initSelect = 1, initCameraPosition = viewModel.initCameraPosition, onToggleSidebar = onToggleSidebar, onMapViewStateChanged = viewModel::onMapViewChanged, @@ -54,22 +54,22 @@ fun FlyToMapPage( ) { Column( modifier = Modifier.fillMaxSize(), - verticalArrangement = Arrangement.spacedBy(8.dp) + verticalArrangement = Arrangement.spacedBy(8.dp), ) { Row( modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(8.dp) + horizontalArrangement = Arrangement.spacedBy(8.dp), ) { Button( onClick = { viewModel.flyToHonolulu() }, - modifier = Modifier.weight(1f) + modifier = Modifier.weight(1f), ) { Text("Honolulu") } Button( onClick = { viewModel.flyToTokyo() }, - modifier = Modifier.weight(1f) + modifier = Modifier.weight(1f), ) { Text("Tokyo") } @@ -77,18 +77,18 @@ fun FlyToMapPage( Row( modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(8.dp) + horizontalArrangement = Arrangement.spacedBy(8.dp), ) { Button( onClick = { viewModel.flyToLondon() }, - modifier = Modifier.weight(1f) + modifier = Modifier.weight(1f), ) { Text("London") } Button( onClick = { viewModel.flyToNewYork() }, - modifier = Modifier.weight(1f) + modifier = Modifier.weight(1f), ) { Text("New York") } diff --git a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt index ffac1705..5a8297c0 100644 --- a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt +++ b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt @@ -24,33 +24,40 @@ interface FlyToPageViewModel { val polylines: List fun onMapViewChanged(state: MapViewState<*>) + fun onMapClick(clicked: GeoPoint) fun flyToHonolulu() + fun flyToTokyo() + fun flyToLondon() + fun flyToNewYork() } class FlyToPageViewModelImpl( val icons: FlyToMapIcons, -) : ViewModel(), FlyToPageViewModel { +) : ViewModel(), + FlyToPageViewModel { private val _messages: MutableStateFlow> = MutableStateFlow(emptyList()) override val messages: StateFlow> = _messages.asStateFlow() private val _mapViewState = MutableStateFlow?>(null) override val mapViewState: StateFlow?> = _mapViewState.asStateFlow() - override val initCameraPosition = MapCameraPosition( - position = GeoPoint.fromLatLong( - latitude = 37.7749, // San Francisco - longitude = -122.4194, - ), - zoom = 2.0, - bearing = 0.0, - tilt = 0.0, - paddings = null, - ) + override val initCameraPosition = + MapCameraPosition( + position = + GeoPoint.fromLatLong( + latitude = 37.7749, // San Francisco + longitude = -122.4194, + ), + zoom = 2.0, + bearing = 0.0, + tilt = 0.0, + paddings = null, + ) // Define destination locations private val honoluluLocation = GeoPoint.fromLatLong(21.3099, -157.8581) @@ -59,108 +66,141 @@ class FlyToPageViewModelImpl( private val newYorkLocation = GeoPoint.fromLatLong(40.7128, -74.0060) private val sydneyLocation = GeoPoint.fromLatLong(-33.9506, 151.1815) - override val markers = listOf( - MarkerState( - id = "honolulu_marker", - position = honoluluLocation, - icon = ImageIcon( - drawable = icons.honolulu, + override val markers = + listOf( + MarkerState( + id = "honolulu_marker", + position = honoluluLocation, + icon = + ImageIcon( + drawable = icons.honolulu, + ), ), - ), - MarkerState( - id = "tokyo_marker", - position = tokyoLocation, - icon = ImageIcon( - drawable = icons.tokyo, + MarkerState( + id = "tokyo_marker", + position = tokyoLocation, + icon = + ImageIcon( + drawable = icons.tokyo, + ), ), - ), - MarkerState( - id = "london_marker", - position = londonLocation, - icon = ImageIcon( - drawable = icons.london, + MarkerState( + id = "london_marker", + position = londonLocation, + icon = + ImageIcon( + drawable = icons.london, + ), ), - ), - MarkerState( - id = "newyork_marker", - position = newYorkLocation, - icon = ImageIcon( - drawable = icons.newYork, + MarkerState( + id = "newyork_marker", + position = newYorkLocation, + icon = + ImageIcon( + drawable = icons.newYork, + ), ), - ), - MarkerState( - id = "sydney_marker", - position = sydneyLocation, - icon = ImageIcon( - drawable = icons.sydney, + MarkerState( + id = "sydney_marker", + position = sydneyLocation, + icon = + ImageIcon( + drawable = icons.sydney, + ), ), ) - ) private val drawGeodesicLines = true - override val polylines = listOf( - // Honolulu to NewYork - PolylineState( - id = "honolulu_to_newyork", - points = listOf(honoluluLocation, newYorkLocation), - strokeColor = Color.Blue.copy(alpha = 0.7f), - strokeWidth = 3.dp, - geodesic = drawGeodesicLines, - ), - // Honolulu to Sydney - PolylineState( - id = "honolulu_to_sydney", - points = listOf(honoluluLocation, sydneyLocation), - strokeColor = Color.Blue.copy(alpha = 0.7f), - strokeWidth = 3.dp, - geodesic = drawGeodesicLines, - ), - - // Tokyo to London - PolylineState( - id = "tokyo_to_london", - points = listOf(tokyoLocation, londonLocation), - strokeColor = Color.Black.copy(alpha = 0.7f), - strokeWidth = 3.dp, - geodesic = drawGeodesicLines, - ), - - // Tokyo to NewYork - PolylineState( - id = "tokyo_to_newyork", - points = listOf(tokyoLocation, newYorkLocation), - strokeColor = Color.Black.copy(alpha = 0.7f), - strokeWidth = 3.dp, - geodesic = drawGeodesicLines, - ), - // Tokyo to Honolulu - PolylineState( - id = "tokyo_to_honolulu", - points = listOf(tokyoLocation, honoluluLocation), - strokeColor = Color.Black.copy(alpha = 0.7f), - strokeWidth = 3.dp, - geodesic = drawGeodesicLines, - ), - - // London to New York - PolylineState( - id = "london_to_newyork", - points = listOf(londonLocation, newYorkLocation), - strokeColor = Color.Red.copy(alpha = 0.7f), - strokeWidth = 3.dp, - geodesic = drawGeodesicLines, - ), - - // London to Sydney - PolylineState( - id = "london_to_sydney", - points = listOf(londonLocation, sydneyLocation), - strokeColor = Color.Red.copy(alpha = 0.7f), - strokeWidth = 3.dp, - geodesic = drawGeodesicLines, - ), - ) + override val polylines = + listOf( + // Honolulu to NewYork + PolylineState( + id = "honolulu_to_newyork", + points = listOf(honoluluLocation, newYorkLocation), + strokeColor = Color.Black.copy(alpha = 0.7f), + strokeWidth = 3.dp, + geodesic = drawGeodesicLines, + ), + // Honolulu to Sydney + PolylineState( + id = "honolulu_to_sydney", + points = listOf(honoluluLocation, sydneyLocation), + strokeColor = + Color( // lime + red = 0.7f, + green = 0f, + blue = 0f, + alpha = 0.7f, + ), + strokeWidth = 3.dp, + geodesic = drawGeodesicLines, + ), + // Tokyo to London + PolylineState( + id = "tokyo_to_london", + points = listOf(tokyoLocation, londonLocation), + strokeColor = + Color( // Fuchsia + red = 1.0f, + green = 0f, + blue = 1.0f, + alpha = 0.7f, + ), + strokeWidth = 3.dp, + geodesic = drawGeodesicLines, + ), + // Tokyo to NewYork + PolylineState( + id = "tokyo_to_newyork", + points = listOf(tokyoLocation, newYorkLocation), + strokeColor = + Color( // green + red = 0f, + green = 0.75f, + blue = 0f, + alpha = 0.7f, + ), + strokeWidth = 3.dp, + geodesic = drawGeodesicLines, + ), + // Tokyo to Honolulu + PolylineState( + id = "tokyo_to_honolulu", + points = listOf(tokyoLocation, honoluluLocation), + strokeColor = Color.Blue.copy(alpha = 0.7f), + strokeWidth = 3.dp, + geodesic = drawGeodesicLines, + ), + // London to New York + PolylineState( + id = "london_to_newyork", + points = listOf(londonLocation, newYorkLocation), + strokeColor = + Color( // maroon + red = 0.75f, + green = 0f, + blue = 0f, + alpha = 0.7f, + ), + strokeWidth = 3.dp, + geodesic = drawGeodesicLines, + ), + // London to Sydney + PolylineState( + id = "london_to_sydney", + points = listOf(londonLocation, sydneyLocation), + strokeColor = + Color( // purple + red = 0.75f, + green = 0f, + blue = 0.75f, + alpha = 0.7f, + ), + strokeWidth = 3.dp, + geodesic = drawGeodesicLines, + ), + ) override fun onMapViewChanged(state: MapViewState<*>) { _mapViewState.value = state @@ -186,16 +226,20 @@ class FlyToPageViewModelImpl( flyToLocation(newYorkLocation, 10.0) } - private fun flyToLocation(location: GeoPoint, zoom: Double) { + private fun flyToLocation( + location: GeoPoint, + zoom: Double, + ) { viewModelScope.launch { _mapViewState.value?.let { mapState -> - val newCameraPosition = MapCameraPosition( - position = location, - zoom = zoom, - bearing = 0.0, - tilt = 0.0, - paddings = null - ) + val newCameraPosition = + MapCameraPosition( + position = location, + zoom = zoom, + bearing = 0.0, + tilt = 0.0, + paddings = null, + ) mapState.moveCameraTo( cameraPosition = newCameraPosition, diff --git a/example-app/src/main/java/com/mapconductor/example/pages/polygon/PolygonMapComponent.kt b/example-app/src/main/java/com/mapconductor/example/pages/polygon/PolygonMapComponent.kt index 7c4badc3..bae34c77 100644 --- a/example-app/src/main/java/com/mapconductor/example/pages/polygon/PolygonMapComponent.kt +++ b/example-app/src/main/java/com/mapconductor/example/pages/polygon/PolygonMapComponent.kt @@ -3,10 +3,7 @@ package com.mapconductor.example.pages.polygon import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import com.mapconductor.core.map.MapViewState -import com.mapconductor.core.marker.Marker import com.mapconductor.core.marker.OnMarkerEventHandler -import com.mapconductor.core.polyline.Polyline -import com.mapconductor.example.MapViewContainer @Composable fun PolygonMapComponent( diff --git a/example-app/src/main/java/com/mapconductor/example/pages/polyline/PolylinePageViewModel.kt b/example-app/src/main/java/com/mapconductor/example/pages/polyline/PolylinePageViewModel.kt index f142386c..652209b9 100644 --- a/example-app/src/main/java/com/mapconductor/example/pages/polyline/PolylinePageViewModel.kt +++ b/example-app/src/main/java/com/mapconductor/example/pages/polyline/PolylinePageViewModel.kt @@ -33,7 +33,6 @@ interface PolylinePageViewModel { class PolylinePageViewModelImpl : ViewModel(), PolylinePageViewModel { - override val initCameraPosition = MapCameraPosition( position = @@ -47,7 +46,8 @@ class PolylinePageViewModelImpl : paddings = null, ) - private val polylinePoints = mutableStateListOf( + private val polylinePoints = + mutableStateListOf( GeoPoint.fromLatLong(21.382314, -157.933097), // Honolulu center GeoPoint.fromLatLong(21.385314, -157.930097), // Northeast GeoPoint.fromLatLong(21.387314, -157.935097), // Northwest @@ -59,16 +59,18 @@ class PolylinePageViewModelImpl : private val _wayPointMarkers: MutableState> = mutableStateOf( polylinePoints.mapIndexed { index, point -> - val markerColor = when { - index == 0 -> Color.Green - index == polylinePoints.size - 1 -> Color.Green - else -> Color.Yellow - } - val label = when { - index == 0 -> "S" - index == polylinePoints.size - 1 -> "E" - else -> "$index" - } + val markerColor = + when { + index == 0 -> Color.Green + index == polylinePoints.size - 1 -> Color.Green + else -> Color.Yellow + } + val label = + when { + index == 0 -> "S" + index == polylinePoints.size - 1 -> "E" + else -> "$index" + } MarkerState( id = "waypoint_$index", position = point, @@ -124,4 +126,3 @@ class PolylinePageViewModelImpl : super.onCleared() } } - diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/Utils.kt b/mapconductor-core/src/main/java/com/mapconductor/core/Utils.kt index 473e995a..7b666b88 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/Utils.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/Utils.kt @@ -2,7 +2,6 @@ package com.mapconductor.core import com.mapconductor.core.features.GeoPoint import com.mapconductor.core.features.IGeoPoint -import com.mapconductor.core.polyline.PolylineState import java.lang.Math.pow import kotlin.math.abs import kotlin.math.atan2 @@ -40,31 +39,32 @@ fun printPoints( } } -fun toRadius(degValue: Double): Double { - return degValue * (Math.PI / 180.0) -} +fun toRadius(degValue: Double): Double = degValue * (Math.PI / 180.0) -fun toDegree(radValue: Double): Double { - return radValue / (Math.PI / 180.0) -} +fun toDegree(radValue: Double): Double = radValue / (Math.PI / 180.0) /** * Calculate waypoints from start to finish on geodesic line * @ref http://jamesmccaffrey.wordpress.com/2011/04/17/drawing-a-geodesic-line-for-bing-maps-ajax/ */ -fun interpolateGeodesicPolyline(origin: IGeoPoint, dest: IGeoPoint): List { +fun interpolateGeodesicPolyline( + origin: IGeoPoint, + dest: IGeoPoint, +): List { // convert to radians val lat1 = toRadius(origin.latitude) val lng1 = toRadius(origin.longitude) val lat2 = toRadius(dest.latitude) val lng2 = toRadius(dest.longitude) - val distance = 2 * abs( - sqrt( - pow(sin((lat1 - lat2) / 2.0), 2.0) + - cos(lat1) * cos(lat2) * pow(sin((lng1 - lng2) / 2.0), 2.0) - ) - ) + val distance = + 2 * + abs( + sqrt( + pow(sin((lat1 - lat2) / 2.0), 2.0) + + cos(lat1) * cos(lat2) * pow(sin((lng1 - lng2) / 2.0), 2.0), + ), + ) val wayPoints = mutableListOf() var fraction: Float = 0f // fraction of the curve val fractionI: Float = 0.01f // fraction increment @@ -88,11 +88,12 @@ fun interpolateGeodesicPolyline(origin: IGeoPoint, dest: IGeoPoint): List 179) break wayPoints.add(point) Log.d("debug", " ${GeoPoint.from(point).toUrlValue()}") @@ -111,3 +112,26 @@ fun createGeodesicPoints(points: List): List { } return results } + +fun splitByMeridian(points: List): List> { + val results = mutableListOf>() + var fragment = mutableListOf() + for (point in points) { + if (fragment.isEmpty()) { + fragment.add(point) + continue + } + val tailLng = fragment.last().longitude + if (tailLng >= 0 && point.longitude >= 0 || tailLng < 0 && point.longitude < 0) { + fragment.add(point) + continue + } + results.add(fragment.toList()) + fragment = mutableListOf() + fragment.add(point) + } + if (fragment.isNotEmpty()) { + results.add(fragment.toList()) + } + return results +} diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/features/GeoPoint.kt b/mapconductor-core/src/main/java/com/mapconductor/core/features/GeoPoint.kt index a4d88a90..dfafa120 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/features/GeoPoint.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/features/GeoPoint.kt @@ -17,10 +17,10 @@ class GeoPoint( longitude: Double, altitude: Double = 0.0, ) : IGeoPoint { - override var latitude by mutableStateOf(latitude) override var longitude by mutableStateOf(longitude) override var altitude by mutableStateOf(altitude) + fun toUrlValue(precision: Int = 6): String = "${latitude.toFixed(precision)},${longitude.toFixed(precision)}" override fun equals(other: Any?): Boolean { @@ -49,13 +49,12 @@ class GeoPoint( latitude: Double? = null, longitude: Double? = null, altitude: Double? = null, - ): GeoPoint { - return GeoPoint( + ): GeoPoint = + GeoPoint( latitude = latitude ?: this.latitude, longitude = longitude ?: this.longitude, altitude = altitude ?: this.altitude, ) - } companion object { fun fromLatLong( diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/marker/ImageIcon.kt b/mapconductor-core/src/main/java/com/mapconductor/core/marker/ImageIcon.kt index c5e89a1e..5ed6782b 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/marker/ImageIcon.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/marker/ImageIcon.kt @@ -2,28 +2,10 @@ package com.mapconductor.core.marker import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Size -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.unit.Dp -import androidx.compose.ui.unit.TextUnit -import androidx.compose.ui.unit.TextUnitType -import androidx.compose.ui.unit.sp -import androidx.core.graphics.createBitmap -import com.mapconductor.core.BitmapIconCache import com.mapconductor.core.ResourceProvider import com.mapconductor.settings.Settings -import kotlin.math.max -import android.graphics.Bitmap -import android.graphics.Canvas -import android.graphics.Matrix -import android.graphics.Paint -import android.graphics.Path -import android.graphics.Rect -import android.graphics.Typeface -import android.graphics.drawable.BitmapDrawable -import android.graphics.drawable.ColorDrawable import android.graphics.drawable.Drawable -import android.graphics.drawable.GradientDrawable class ImageIcon( drawable: Drawable, @@ -33,22 +15,22 @@ class ImageIcon( override val infoAnchor: Offset = Offset(0.5f, 0.5f), override val debug: Boolean = false, ) : AndroidDrawableIcon( - drawable = drawable, -) { + drawable = drawable, + ) { override fun toBitmapIcon(): BitmapIcon { val scaledSize = ResourceProvider.dpToPx(iconSize.value) * scale - val bitmap = this.toBitmap( - drawable = drawable, - width = scaledSize.toInt(), - height = scaledSize.toInt(), - ) + val bitmap = + this.toBitmap( + drawable = drawable, + width = scaledSize.toInt(), + height = scaledSize.toInt(), + ) return BitmapIcon( bitmap = bitmap, anchor = anchor, - size = Size(scaledSize.toFloat(), scaledSize.toFloat()) + size = Size(scaledSize.toFloat(), scaledSize.toFloat()), ) } - } diff --git a/mapconductor-for-here/src/main/java/com/mapconductor/here/polyline/HereMapPolylineRenderer.kt b/mapconductor-for-here/src/main/java/com/mapconductor/here/polyline/HereMapPolylineRenderer.kt index 72ec6d44..c695b162 100644 --- a/mapconductor-for-here/src/main/java/com/mapconductor/here/polyline/HereMapPolylineRenderer.kt +++ b/mapconductor-for-here/src/main/java/com/mapconductor/here/polyline/HereMapPolylineRenderer.kt @@ -10,7 +10,6 @@ import com.here.sdk.mapview.RenderSize import com.mapconductor.core.ResourceProvider import com.mapconductor.core.createGeodesicPoints import com.mapconductor.core.features.GeoPoint -import com.mapconductor.core.features.IGeoPoint import com.mapconductor.core.polyline.AbstractPolylineRenderer import com.mapconductor.core.polyline.PolylineEntity import com.mapconductor.core.polyline.PolylineOverlayManager @@ -18,16 +17,8 @@ import com.mapconductor.core.polyline.PolylineOverlayManagerImpl import com.mapconductor.core.polyline.PolylineRenderer.UpdateParams import com.mapconductor.core.polyline.PolylineRendererFactory import com.mapconductor.core.polyline.PolylineState -import com.mapconductor.core.toDegree -import com.mapconductor.core.toRadius import com.mapconductor.here.HereMapViewHolder import com.mapconductor.here.toGeoCoordinates -import java.lang.Math.pow -import kotlin.math.abs -import kotlin.math.atan2 -import kotlin.math.cos -import kotlin.math.sin -import kotlin.math.sqrt import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch @@ -87,18 +78,18 @@ class HereMapPolylineRenderer( } private fun createGeoPolyline(state: PolylineState): GeoPolyline { - val points = when (state.geodesic) { - false -> state.points.map { GeoPoint.from(it).toGeoCoordinates() } - true -> { - val results = createGeodesicPoints(state.points) - results.map { GeoPoint.from(it).toGeoCoordinates() } + val points = + when (state.geodesic) { + false -> state.points.map { GeoPoint.from(it).toGeoCoordinates() } + true -> { + val results = createGeodesicPoints(state.points) + results.map { GeoPoint.from(it).toGeoCoordinates() } + } } - } val geoPolyline = GeoPolyline(points) return geoPolyline } - private fun createRepresentation(state: PolylineState): MapPolyline.Representation { val lineWidth = MapMeasureDependentRenderSize( diff --git a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxTypeAlias.kt b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxTypeAlias.kt index 0175622a..a8199ba7 100644 --- a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxTypeAlias.kt +++ b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxTypeAlias.kt @@ -4,5 +4,5 @@ import com.mapbox.geojson.Feature typealias MapboxActualMarker = Feature typealias MapboxActualCircle = Feature -typealias MapboxActualPolyline = Feature +typealias MapboxActualPolyline = List typealias MapboxActualPolygon = Feature diff --git a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/polyline/MapboxPolylineLayer.kt b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/polyline/MapboxPolylineLayer.kt index cb2536a9..721477b0 100644 --- a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/polyline/MapboxPolylineLayer.kt +++ b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/polyline/MapboxPolylineLayer.kt @@ -36,9 +36,10 @@ class MapboxPolylineLayer( } fun draw(entities: List>) { - val features = entities.map { it.polyline } + val featureSet = entities.map { it.polyline } + source.featureCollection( - FeatureCollection.fromFeatures(features), + FeatureCollection.fromFeatures(featureSet.flatten()), ) } } diff --git a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/polyline/MapboxPolylineRenderer.kt b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/polyline/MapboxPolylineRenderer.kt index 06ef6401..7bc181b1 100644 --- a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/polyline/MapboxPolylineRenderer.kt +++ b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/polyline/MapboxPolylineRenderer.kt @@ -4,9 +4,9 @@ import com.google.gson.JsonObject import com.mapbox.geojson.Feature import com.mapbox.geojson.LineString import com.mapbox.maps.extension.style.sources.removeGeoJSONSourceFeatures -import com.mapbox.maps.extension.style.sources.updateGeoJSONSourceFeatures import com.mapconductor.core.createGeodesicPoints import com.mapconductor.core.features.GeoPoint +import com.mapconductor.core.features.IGeoPoint import com.mapconductor.core.polyline.AbstractPolylineRenderer import com.mapconductor.core.polyline.PolylineEntity import com.mapconductor.core.polyline.PolylineOverlayManager @@ -14,6 +14,7 @@ import com.mapconductor.core.polyline.PolylineOverlayManagerImpl import com.mapconductor.core.polyline.PolylineRenderer.UpdateParams import com.mapconductor.core.polyline.PolylineRendererFactory import com.mapconductor.core.polyline.PolylineState +import com.mapconductor.core.splitByMeridian import com.mapconductor.mapbox.MapboxActualPolyline import com.mapconductor.mapbox.MapboxMapViewHolder import com.mapconductor.mapbox.toMapboxColorString @@ -41,21 +42,26 @@ class MapboxPolylineRenderer( override val coroutine: CoroutineScope, private val layer: MapboxPolylineLayer, ) : AbstractPolylineRenderer() { - override suspend fun addPolylines(newLines: List): List { - val polylines = - newLines.map { state -> -// val points = state.points.map { GeoPoint.from(it).toPoint() } - val points = createGeodesicPoints(state.points).map { GeoPoint.from(it).toPoint() } - Feature.fromGeometry( - LineString.fromLngLats(points), - JsonObject().apply { - addProperty(MapboxPolylineLayer.Prop.STROKE_COLOR, state.strokeColor.toMapboxColorString()) - addProperty(MapboxPolylineLayer.Prop.STROKE_WIDTH, state.strokeWidth.value) - }, - "polyline-${state.id}", - ) + override suspend fun addPolylines(newLines: List): List = + newLines.map { state -> createMapboxLines(state) } + + private fun createMapboxLines(state: PolylineState): List { + val geoPoints: List = + when (state.geodesic) { + true -> createGeodesicPoints(state.points) + false -> state.points } - return polylines + return splitByMeridian(geoPoints).map { linePoints -> + val points = linePoints.map { GeoPoint.from(it).toPoint() } + return@map Feature.fromGeometry( + LineString.fromLngLats(points), + JsonObject().apply { + addProperty(MapboxPolylineLayer.Prop.STROKE_COLOR, state.strokeColor.toMapboxColorString()) + addProperty(MapboxPolylineLayer.Prop.STROKE_WIDTH, state.strokeWidth.value) + }, + "polyline-${state.id}", + ) + } } override suspend fun removePolylines(removeEntities: List>) { @@ -65,23 +71,7 @@ class MapboxPolylineRenderer( override suspend fun changePolylines( changes: List>, - ): List { - val features = - changes.map { params -> - val state = params.entity.state - val points = createGeodesicPoints(state.points).map { GeoPoint.from(it).toPoint() } - Feature.fromGeometry( - LineString.fromLngLats(points), - JsonObject().apply { - addProperty(MapboxPolylineLayer.Prop.STROKE_COLOR, state.strokeColor.toMapboxColorString()) - addProperty(MapboxPolylineLayer.Prop.STROKE_WIDTH, state.strokeWidth.value) - }, - "polyline-${state.id}", - ) - } - layer.source.updateGeoJSONSourceFeatures(features) - return features - } + ): List = changes.map { params -> createMapboxLines(params.entity.state) } fun redraw() { val polylines = polylineOverlayManager.getAllEntities() From f8ca94f96c033e5c4059b0205f6ce30e8f1b44cb Mon Sep 17 00:00:00 2001 From: Masashi Katsumata Date: Mon, 11 Aug 2025 23:20:03 +0900 Subject: [PATCH 4/7] Add: geodesic functionality --- .../pages/map/flyto/FlyToMapComponent.kt | 8 +- .../example/pages/map/flyto/FlyToMapPage.kt | 52 ++- .../pages/map/flyto/FlyToPageViewModel.kt | 77 ++--- .../pages/stores/StoreMapPageViewModel.kt | 2 +- .../main/java/com/mapconductor/core/Utils.kt | 308 ++++++++++++----- .../mapconductor/core/features/GeoPoint.kt | 50 +++ .../com/mapconductor/core/marker/Marker.kt | 8 +- .../mapconductor/core/marker/MarkerCompose.kt | 4 +- .../mapconductor/core/spherical/Spherical.kt | 316 ++++++++++++++++++ .../arcgis/marker/ArcGISMarkerRenderer.kt | 5 +- .../arcgis/polyline/ArcGISPolylineRenderer.kt | 24 +- .../mapconductor/googlemaps/GoogleMapView.kt | 157 ++++----- .../marker/GoogleMapMarkerRenderer.kt | 3 +- .../here/marker/HereMapMarkerRenderer.kt | 3 +- .../here/polyline/HereMapPolylineRenderer.kt | 13 +- .../mapbox/marker/MapboxMarkerRenderer.kt | 5 +- .../mapbox/marker/MarkerDragLayer.kt | 2 +- .../mapbox/polyline/MapboxPolylineRenderer.kt | 28 +- 18 files changed, 828 insertions(+), 237 deletions(-) create mode 100644 mapconductor-core/src/main/java/com/mapconductor/core/spherical/Spherical.kt diff --git a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapComponent.kt b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapComponent.kt index d1cf8703..e8fe290b 100644 --- a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapComponent.kt +++ b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapComponent.kt @@ -1,13 +1,13 @@ package com.mapconductor.example.pages.map.flyto import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue import androidx.compose.runtime.key +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import com.mapconductor.core.map.MapViewState -import com.mapconductor.core.map.OnMapEventHandler import com.mapconductor.core.marker.Marker import com.mapconductor.core.marker.MarkerState -import com.mapconductor.core.marker.OnMarkerEventHandler import com.mapconductor.core.polyline.Polyline import com.mapconductor.core.polyline.PolylineState import com.mapconductor.example.MapViewContainer @@ -18,15 +18,11 @@ fun FlyToMapComponent( polylines: List, markers: List, modifier: Modifier = Modifier, - onMapClick: OnMapEventHandler = {}, - onMarkerClick: OnMarkerEventHandler = {}, ) { mapViewState?.let { state -> MapViewContainer( modifier = modifier, state = state, - onMapClick = onMapClick, - onMarkerClick = onMarkerClick, ) { // Render polylines connecting all markers polylines.forEach { polyline -> diff --git a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt index 610fbaba..43c40c1f 100644 --- a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt +++ b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt @@ -8,10 +8,18 @@ import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Check import androidx.compose.material3.Button +import androidx.compose.material3.Icon +import androidx.compose.material3.Switch +import androidx.compose.material3.SwitchDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.LayoutDirection @@ -26,7 +34,6 @@ fun FlyToMapPage( onToggleSidebar: () -> Unit = {}, ) { DemoMapPageScaffold( - initSelect = 1, initCameraPosition = viewModel.initCameraPosition, onToggleSidebar = onToggleSidebar, onMapViewStateChanged = viewModel::onMapViewChanged, @@ -37,7 +44,6 @@ fun FlyToMapPage( mapViewState = mapViewState.value, polylines = viewModel.polylines, markers = viewModel.markers, - onMapClick = viewModel::onMapClick, ) // Control Panel @@ -51,11 +57,53 @@ fun FlyToMapPage( end = paddingValues.calculateEndPadding(LayoutDirection.Ltr) + 16.dp, ), title = "Fly To Controls", + maxHeight = 200.dp, ) { Column( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.spacedBy(8.dp), ) { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + Row( + modifier = Modifier.weight(1f), + verticalAlignment = Alignment.CenterVertically, + ) { + Switch( + checked = viewModel.geodesic, + onCheckedChange = { + viewModel.geodesic = !viewModel.geodesic + }, + thumbContent = + if (viewModel.geodesic) { + { + Icon( + imageVector = Icons.Filled.Check, + contentDescription = null, + modifier = Modifier.size(SwitchDefaults.IconSize), + ) + } + } else { + null + }, + ) + Text( + text = "geodesic", + modifier = + Modifier + .align(Alignment.CenterVertically) + .padding(16.dp), + ) + } + Button( + modifier = Modifier.weight(1f), + onClick = { viewModel.flyToSydney() }, + ) { + Text("Sydney") + } + } Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(8.dp), diff --git a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt index 5a8297c0..c139de0b 100644 --- a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt +++ b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt @@ -1,5 +1,8 @@ package com.mapconductor.example.pages.map.flyto +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import androidx.lifecycle.ViewModel @@ -22,6 +25,7 @@ interface FlyToPageViewModel { val messages: StateFlow> val markers: List val polylines: List + var geodesic: Boolean fun onMapViewChanged(state: MapViewState<*>) @@ -34,10 +38,12 @@ interface FlyToPageViewModel { fun flyToLondon() fun flyToNewYork() + + fun flyToSydney() } class FlyToPageViewModelImpl( - val icons: FlyToMapIcons, + icons: FlyToMapIcons, ) : ViewModel(), FlyToPageViewModel { private val _messages: MutableStateFlow> = MutableStateFlow(emptyList()) @@ -46,19 +52,6 @@ class FlyToPageViewModelImpl( private val _mapViewState = MutableStateFlow?>(null) override val mapViewState: StateFlow?> = _mapViewState.asStateFlow() - override val initCameraPosition = - MapCameraPosition( - position = - GeoPoint.fromLatLong( - latitude = 37.7749, // San Francisco - longitude = -122.4194, - ), - zoom = 2.0, - bearing = 0.0, - tilt = 0.0, - paddings = null, - ) - // Define destination locations private val honoluluLocation = GeoPoint.fromLatLong(21.3099, -157.8581) private val tokyoLocation = GeoPoint.fromLatLong(35.6762, 139.6503) @@ -66,6 +59,15 @@ class FlyToPageViewModelImpl( private val newYorkLocation = GeoPoint.fromLatLong(40.7128, -74.0060) private val sydneyLocation = GeoPoint.fromLatLong(-33.9506, 151.1815) + override val initCameraPosition = + MapCameraPosition( + position = londonLocation, + zoom = 8.0, + bearing = 0.0, + tilt = 0.0, + paddings = null, + ) + override val markers = listOf( MarkerState( @@ -110,7 +112,7 @@ class FlyToPageViewModelImpl( ), ) - private val drawGeodesicLines = true + override var geodesic by mutableStateOf(true) override val polylines = listOf( @@ -118,9 +120,9 @@ class FlyToPageViewModelImpl( PolylineState( id = "honolulu_to_newyork", points = listOf(honoluluLocation, newYorkLocation), - strokeColor = Color.Black.copy(alpha = 0.7f), + strokeColor = Color.Green.copy(alpha = 0.7f), strokeWidth = 3.dp, - geodesic = drawGeodesicLines, + geodesic = geodesic, ), // Honolulu to Sydney PolylineState( @@ -134,7 +136,7 @@ class FlyToPageViewModelImpl( alpha = 0.7f, ), strokeWidth = 3.dp, - geodesic = drawGeodesicLines, + geodesic = true, ), // Tokyo to London PolylineState( @@ -148,29 +150,29 @@ class FlyToPageViewModelImpl( alpha = 0.7f, ), strokeWidth = 3.dp, - geodesic = drawGeodesicLines, + geodesic = true, ), - // Tokyo to NewYork + // Tokyo to NewYork PolylineState( id = "tokyo_to_newyork", points = listOf(tokyoLocation, newYorkLocation), - strokeColor = - Color( // green - red = 0f, - green = 0.75f, - blue = 0f, - alpha = 0.7f, - ), + strokeColor = Color.Blue.copy(alpha = 0.7f), strokeWidth = 3.dp, - geodesic = drawGeodesicLines, + geodesic = true, ), // Tokyo to Honolulu PolylineState( id = "tokyo_to_honolulu", points = listOf(tokyoLocation, honoluluLocation), - strokeColor = Color.Blue.copy(alpha = 0.7f), + strokeColor = + Color( // Neon orange + red = 1.0f, + green = 0.35f, + blue = 0.12f, + alpha = 0.7f, + ), strokeWidth = 3.dp, - geodesic = drawGeodesicLines, + geodesic = true, ), // London to New York PolylineState( @@ -184,21 +186,16 @@ class FlyToPageViewModelImpl( alpha = 0.7f, ), strokeWidth = 3.dp, - geodesic = drawGeodesicLines, + geodesic = true, ), // London to Sydney PolylineState( id = "london_to_sydney", points = listOf(londonLocation, sydneyLocation), strokeColor = - Color( // purple - red = 0.75f, - green = 0f, - blue = 0.75f, - alpha = 0.7f, - ), + Color.Magenta.copy(alpha = 0.7f), strokeWidth = 3.dp, - geodesic = drawGeodesicLines, + geodesic = true, ), ) @@ -226,6 +223,10 @@ class FlyToPageViewModelImpl( flyToLocation(newYorkLocation, 10.0) } + override fun flyToSydney() { + flyToLocation(sydneyLocation, 10.0) + } + private fun flyToLocation( location: GeoPoint, zoom: Double, diff --git a/example-app/src/main/java/com/mapconductor/example/pages/stores/StoreMapPageViewModel.kt b/example-app/src/main/java/com/mapconductor/example/pages/stores/StoreMapPageViewModel.kt index 41f2d506..a6d936ca 100644 --- a/example-app/src/main/java/com/mapconductor/example/pages/stores/StoreMapPageViewModel.kt +++ b/example-app/src/main/java/com/mapconductor/example/pages/stores/StoreMapPageViewModel.kt @@ -57,7 +57,7 @@ class StoreMapPageViewModelImpl : val query = (markerState.extra as? Bundle)?.let { Uri.encode(it.getString("address", "")) - } ?: markerState.position.toUrlValue() + } ?: GeoPoint.from(markerState.position).toUrlValue() val gmmIntentUri = "google.navigation:q=$query".toUri() val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/Utils.kt b/mapconductor-core/src/main/java/com/mapconductor/core/Utils.kt index 7b666b88..bfdd1b3e 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/Utils.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/Utils.kt @@ -2,14 +2,13 @@ package com.mapconductor.core import com.mapconductor.core.features.GeoPoint import com.mapconductor.core.features.IGeoPoint +import com.mapconductor.core.features.normalize +import com.mapconductor.core.spherical.Spherical import java.lang.Math.pow import kotlin.math.abs -import kotlin.math.atan2 import kotlin.math.cos import kotlin.math.pow import kotlin.math.roundToInt -import kotlin.math.sin -import kotlin.math.sqrt import android.util.Log fun calculateZIndex(geoPointBase: IGeoPoint): Int { @@ -39,99 +38,252 @@ fun printPoints( } } -fun toRadius(degValue: Double): Double = degValue * (Math.PI / 180.0) +fun normalize(points: List): List = points.map { it.normalize() } -fun toDegree(radValue: Double): Double = radValue / (Math.PI / 180.0) - -/** - * Calculate waypoints from start to finish on geodesic line - * @ref http://jamesmccaffrey.wordpress.com/2011/04/17/drawing-a-geodesic-line-for-bing-maps-ajax/ - */ -fun interpolateGeodesicPolyline( - origin: IGeoPoint, - dest: IGeoPoint, -): List { - // convert to radians - val lat1 = toRadius(origin.latitude) - val lng1 = toRadius(origin.longitude) - val lat2 = toRadius(dest.latitude) - val lng2 = toRadius(dest.longitude) - - val distance = - 2 * - abs( - sqrt( - pow(sin((lat1 - lat2) / 2.0), 2.0) + - cos(lat1) * cos(lat2) * pow(sin((lng1 - lng2) / 2.0), 2.0), - ), - ) - val wayPoints = mutableListOf() - var fraction: Float = 0f // fraction of the curve - val fractionI: Float = 0.01f // fraction increment - - val sinD = sin(distance) - while (fraction <= 1f) { - val argA = sin((1.0f - fraction) * distance) / sinD - val argB = sin(fraction * distance) / sinD - - val cosLat1 = cos(lat1) - val cosLng1 = cos(lng1) - val cosLat2 = cos(lat2) - val cosLng2 = cos(lng2) - val sinLat1 = sin(lat1) - val sinLat2 = sin(lat2) - val sinLng1 = sin(lng1) - val sinLng2 = sin(lng2) - val x = argA * cosLat1 * cosLng1 + argB * cosLat2 * cosLng2 - val y = argA * cosLat1 * sinLng1 + argB * cosLat2 * sinLng2 - val z = argA * sinLat1 + argB * sinLat2 - val lat = atan2(z, sqrt((x * x) + (y * y))) - val lng = atan2(y, x) - - val point = - object : IGeoPoint { - override val latitude: Double = toDegree(lat) - override val longitude: Double = toDegree(lng) - override val altitude: Double? = null - } -// if (point.longitude> 179) break - wayPoints.add(point) - Log.d("debug", " ${GeoPoint.from(point).toUrlValue()}") - fraction += fractionI +fun createInterpolatePoints(points: List): List { + val results = mutableListOf() + val fractionStep = 0.01 + results.add(points[0]) + for (i in 1 until points.size) { + var fraction = fractionStep + while (fraction <= 1.0) { + val point = + Spherical.interpolate( + from = points[i - 1], + to = points[i], + fraction = fraction, + ) + results.add(point) + fraction += fractionStep + } + results.add(points[i]) } - - return wayPoints + return results } -fun createGeodesicPoints(points: List): List { +fun createLinearInterpolatePoints(points: List): List { val results = mutableListOf() - for (i in 1..points.size - 1) { - val interpolatedPoints = interpolateGeodesicPolyline(points[i - 1], points[i]) - results.addAll(interpolatedPoints) -// if (points[i].longitude < 0) break + val fractionStep = 0.01 + results.add(points[0]) + for (i in 1 until points.size) { + var fraction = fractionStep + while (fraction <= 1.0) { + val point = + Spherical.linearInterpolate( + from = points[i - 1], + to = points[i], + fraction = fraction, + ) + results.add(point) + fraction += fractionStep + } + results.add(points[i]) } return results } -fun splitByMeridian(points: List): List> { +/** + * Splits a list of points by the 180°/-180° meridian line and adds interpolated points + * at the meridian crossings to eliminate gaps. + * + * @param points List of IGeoPoint to split + * @param geodesic If true, uses geodesic (great circle) interpolation; if false, uses linear interpolation + * @return List of point groups, each representing a continuous segment without meridian crossings + */ +fun splitByMeridian( + points: List, + geodesic: Boolean, +): List> { + if (points.isEmpty()) return emptyList() + val results = mutableListOf>() var fragment = mutableListOf() - for (point in points) { + + for (i in points.indices) { + val currentPoint = points[i] + if (fragment.isEmpty()) { - fragment.add(point) + fragment.add(currentPoint) continue } - val tailLng = fragment.last().longitude - if (tailLng >= 0 && point.longitude >= 0 || tailLng < 0 && point.longitude < 0) { - fragment.add(point) - continue + + val previousPoint = fragment.last() + val prevLng = previousPoint.longitude + val currLng = currentPoint.longitude + + // Check if meridian crossing occurs +// val crossesMeridian = (prevLng >= 0 && currLng < 0) || (prevLng < 0 && currLng >= 0) + // 180°線交差のみを検出(0°線は除外) + val lngDiff = currLng - prevLng + val crossesMeridian = abs(lngDiff) > 180.0 + + if (!crossesMeridian) { + // No meridian crossing, add point to current fragment + fragment.add(currentPoint) + } else { + // Meridian crossing detected, add interpolated point at meridian + val meridianPoint = interpolateAtMeridian(previousPoint, currentPoint, geodesic) + fragment.add(meridianPoint) + + // Close current fragment and start new one + results.add(fragment.toList()) + fragment = mutableListOf() + + // Add the opposite meridian point to start the new fragment + val oppositeMeridianPoint = createOppositeMeridianPoint(meridianPoint) + fragment.add(oppositeMeridianPoint) + fragment.add(currentPoint) } - results.add(fragment.toList()) - fragment = mutableListOf() - fragment.add(point) } + if (fragment.isNotEmpty()) { results.add(fragment.toList()) } + return results } + +/** + * Interpolates a point at the 180°/-180° meridian line between two points. + * + * @param from Starting point + * @param to Ending point + * @param geodesic If true, uses geodesic (great circle) interpolation; if false, uses linear interpolation + * @return Point at the meridian crossing + */ +private fun interpolateAtMeridian( + from: IGeoPoint, + to: IGeoPoint, + geodesic: Boolean, +): GeoPoint { + if (geodesic) { + // Use geodesic interpolation (great circle path) + return interpolateAtMeridianGeodesic(from, to) + } else { + // Use linear interpolation + return interpolateAtMeridianLinear(from, to) + } +} + +/** + * Performs linear interpolation to find the meridian crossing point. + */ +private fun interpolateAtMeridianLinear( + from: IGeoPoint, + to: IGeoPoint, +): GeoPoint { + val fromLng = from.longitude + val toLng = to.longitude + + // Determine which meridian to interpolate to (180 or -180) + val targetMeridian = if (fromLng >= 0) 180.0 else -180.0 + + // Calculate the fraction where meridian crossing occurs + val totalLngDiff = toLng - fromLng + val meridianDiff = targetMeridian - fromLng + val fraction = meridianDiff / totalLngDiff + + // Interpolate latitude and altitude at the meridian + val interpolatedLatitude = from.latitude + fraction * (to.latitude - from.latitude) + val interpolatedAltitude = + when { + from.altitude != null && to.altitude != null -> + from.altitude!! + fraction * (to.altitude!! - from.altitude!!) + from.altitude != null -> from.altitude + to.altitude != null -> to.altitude + else -> 0.0 + } + + return GeoPoint( + latitude = interpolatedLatitude, + longitude = targetMeridian, + altitude = interpolatedAltitude!!, + ) +} + +/** + * Performs geodesic interpolation to find the meridian crossing point. + * Uses iterative method to find where the great circle path crosses the meridian. + */ +private fun interpolateAtMeridianGeodesic( + from: IGeoPoint, + to: IGeoPoint, +): GeoPoint { + val fromLng = from.longitude + + // Determine target meridian + val targetMeridian = if (fromLng >= 0) 180.0 else -180.0 + + // Use binary search to find the crossing point on the great circle + var low = 0.0 + var high = 1.0 + val tolerance = 1e-10 + val maxIterations = 50 + + var iteration = 0 + while (iteration < maxIterations && (high - low) > tolerance) { + val mid = (low + high) / 2.0 + val interpolatedPoint = Spherical.interpolate(from, to, mid) + val interpolatedLng = interpolatedPoint.longitude + + // Normalize longitude to handle crossing + val normalizedLng = + when { + interpolatedLng > 180 -> interpolatedLng - 360 + interpolatedLng <= -180 -> interpolatedLng + 360 + else -> interpolatedLng + } + + // Check which side of the target meridian we're on + val onTargetSide = + if (targetMeridian > 0) { + // Looking for 180° + normalizedLng >= 0 + } else { + // Looking for -180° + normalizedLng < 0 + } + + val fromOnTargetSide = + if (targetMeridian > 0) { + fromLng >= 0 + } else { + fromLng < 0 + } + + if (onTargetSide == fromOnTargetSide) { + low = mid + } else { + high = mid + } + + iteration++ + } + + // Final interpolation at the crossing point + val finalFraction = (low + high) / 2.0 + val crossingPoint = Spherical.interpolate(from, to, finalFraction) + + // Ensure the longitude is exactly at the target meridian + return GeoPoint( + latitude = crossingPoint.latitude, + longitude = targetMeridian, + altitude = crossingPoint.altitude, + ) +} + +/** + * Creates a point at the opposite meridian (180° ↔ -180°) with the same latitude and altitude. + * + * @param point Point at one meridian + * @return Point at the opposite meridian + */ +private fun createOppositeMeridianPoint(point: IGeoPoint): GeoPoint { + val oppositeLongitude = if (point.longitude >= 0) -180.0 else 180.0 + + return GeoPoint( + latitude = point.latitude, + longitude = oppositeLongitude, + altitude = point.altitude ?: 0.0, + ) +} diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/features/GeoPoint.kt b/mapconductor-core/src/main/java/com/mapconductor/core/features/GeoPoint.kt index dfafa120..825991c6 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/features/GeoPoint.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/features/GeoPoint.kt @@ -3,6 +3,7 @@ package com.mapconductor.core.features import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue +import com.mapconductor.core.spherical.Spherical import com.mapconductor.core.toFixed import kotlin.math.abs @@ -79,3 +80,52 @@ class GeoPoint( } } } + +/** + * Extension function to create a normalized GeoPoint with clamped/normalized coordinates + */ +fun IGeoPoint.normalize(): GeoPoint = + GeoPoint( + latitude = this.latitude.coerceIn(-90.0, 90.0), + longitude = (((this.longitude + 180) % 360 + 360) % 360) - 180, + altitude = this.altitude ?: 0.0, + ) + +/** + * Extension function to check if a GeoPoint is valid + */ +fun IGeoPoint.isValid(): Boolean = latitude in -90.0..90.0 && longitude in -180.0..180.0 + +/** + * Extension function to calculate distance to another point + */ +fun IGeoPoint.distanceTo(other: IGeoPoint): Double = Spherical.computeDistanceBetween(this, other) + +/** + * Extension function to calculate heading to another point + */ +fun IGeoPoint.headingTo(other: IGeoPoint): Double = Spherical.computeHeading(this, other) + +/** + * Extension function to move to a new position + */ +fun IGeoPoint.offset( + distance: Double, + heading: Double, +): GeoPoint = Spherical.computeOffset(this, distance, heading) + +/** + * Extension function for spherical interpolation (considers Earth's curvature) + */ +fun IGeoPoint.interpolateTo( + other: IGeoPoint, + fraction: Double, +): GeoPoint = Spherical.interpolate(this, other, fraction) + +/** + * Extension function for linear interpolation (ignores Earth's curvature) + */ +fun IGeoPoint.linearInterpolateTo( + other: IGeoPoint, + fraction: Double, +): GeoPoint = Spherical.linearInterpolate(this, other, fraction) diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/marker/Marker.kt b/mapconductor-core/src/main/java/com/mapconductor/core/marker/Marker.kt index f3301526..39f24c18 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/marker/Marker.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/marker/Marker.kt @@ -9,7 +9,7 @@ import androidx.compose.runtime.snapshots.Snapshot import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Size import com.mapconductor.core.ResourceProvider -import com.mapconductor.core.features.GeoPoint +import com.mapconductor.core.features.IGeoPoint import java.io.ByteArrayOutputStream import android.graphics.Bitmap import android.os.Parcelable @@ -18,7 +18,7 @@ import kotlinx.coroutines.flow.distinctUntilChanged // ------- Core Types ---------- class MarkerState( - position: GeoPoint, + position: IGeoPoint, id: String? = null, var extra: Parcelable? = null, icon: MarkerIcon? = null, @@ -48,7 +48,7 @@ class MarkerState( var clickable by mutableStateOf(clickable) var draggable by mutableStateOf(draggable) - private var dragPosition: GeoPoint = position + private var dragPosition: IGeoPoint = position private var _isDragging by mutableStateOf(false) var isDragging: Boolean get() = _isDragging @@ -70,7 +70,7 @@ class MarkerState( fun copy( id: String? = this.id, - position: GeoPoint = this.position, + position: IGeoPoint = this.position, extra: Parcelable? = this.extra, icon: MarkerIcon? = this.icon, clickable: Boolean? = this.clickable, diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/marker/MarkerCompose.kt b/mapconductor-core/src/main/java/com/mapconductor/core/marker/MarkerCompose.kt index 287e4867..cb83e340 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/marker/MarkerCompose.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/marker/MarkerCompose.kt @@ -4,7 +4,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.SideEffect import androidx.compose.runtime.remember import com.mapconductor.core.MapViewScope -import com.mapconductor.core.features.GeoPoint +import com.mapconductor.core.features.IGeoPoint import android.os.Parcelable @Composable @@ -17,7 +17,7 @@ fun MapViewScope.Marker(state: MarkerState) { @Composable fun MapViewScope.Marker( - position: GeoPoint, + position: IGeoPoint, clickable: Boolean = true, draggable: Boolean = false, icon: MarkerIcon? = null, diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/spherical/Spherical.kt b/mapconductor-core/src/main/java/com/mapconductor/core/spherical/Spherical.kt new file mode 100644 index 00000000..99670b90 --- /dev/null +++ b/mapconductor-core/src/main/java/com/mapconductor/core/spherical/Spherical.kt @@ -0,0 +1,316 @@ +package com.mapconductor.core.spherical + +import com.mapconductor.core.features.GeoPoint +import com.mapconductor.core.features.IGeoPoint +import kotlin.math.abs +import kotlin.math.asin +import kotlin.math.atan2 +import kotlin.math.cos +import kotlin.math.sin +import kotlin.math.sqrt + +/** + * Spherical geometry utility functions for calculating distances, headings, + * and positions on Earth's surface using the spherical Earth model. + * + * This is a Kotlin port of the Cordova Google Maps plugin spherical.js utilities. + * Uses GeoPoint instead of LatLng for coordinate representation. + */ +object Spherical { + // Earth's radius in meters (WGS84 ellipsoid semi-major axis) + private const val EARTH_RADIUS = 6378137.0 + + // Mathematical constants + private const val PI = Math.PI + private const val RAD_TO_DEG = 180.0 / PI + private const val DEG_TO_RAD = PI / 180.0 + + /** + * Returns the distance, in meters, between two GeoPoint locations. + * Uses the haversine formula. + * + * @param from Starting point + * @param to Ending point + * @return Distance in meters + */ + fun computeDistanceBetween( + from: IGeoPoint, + to: IGeoPoint, + ): Double { + val lat1Rad = from.latitude * DEG_TO_RAD + val lat2Rad = to.latitude * DEG_TO_RAD + val deltaLat = (to.latitude - from.latitude) * DEG_TO_RAD + val deltaLng = (to.longitude - from.longitude) * DEG_TO_RAD + + val a = + sin(deltaLat / 2) * sin(deltaLat / 2) + + cos(lat1Rad) * cos(lat2Rad) * + sin(deltaLng / 2) * sin(deltaLng / 2) + + val c = 2 * atan2(sqrt(a), sqrt(1 - a)) + + return EARTH_RADIUS * c + } + + /** + * Returns the heading from one GeoPoint to another GeoPoint. + * Headings are expressed in degrees clockwise from North within the range (-180, 180). + * + * @param from Starting point + * @param to Ending point + * @return Heading in degrees + */ + fun computeHeading( + from: IGeoPoint, + to: IGeoPoint, + ): Double { + val lat1Rad = from.latitude * DEG_TO_RAD + val lat2Rad = to.latitude * DEG_TO_RAD + val deltaLng = (to.longitude - from.longitude) * DEG_TO_RAD + + val y = sin(deltaLng) * cos(lat2Rad) + val x = cos(lat1Rad) * sin(lat2Rad) - sin(lat1Rad) * cos(lat2Rad) * cos(deltaLng) + + var heading = atan2(y, x) * RAD_TO_DEG + + // Normalize to (-180, 180] + while (heading > 180) heading -= 360 + while (heading <= -180) heading += 360 + + return heading + } + + /** + * Returns the GeoPoint resulting from moving a distance from an origin + * in the specified heading (expressed in degrees clockwise from north). + * + * @param origin Starting point + * @param distance Distance to travel in meters + * @param heading Direction to travel in degrees (0 = North, 90 = East) + * @return New GeoPoint position + */ + fun computeOffset( + origin: IGeoPoint, + distance: Double, + heading: Double, + ): GeoPoint { + val distanceRad = distance / EARTH_RADIUS + val headingRad = heading * DEG_TO_RAD + val lat1Rad = origin.latitude * DEG_TO_RAD + val lng1Rad = origin.longitude * DEG_TO_RAD + + val lat2Rad = + asin( + sin(lat1Rad) * cos(distanceRad) + + cos(lat1Rad) * sin(distanceRad) * cos(headingRad), + ) + + val lng2Rad = + lng1Rad + + atan2( + sin(headingRad) * sin(distanceRad) * cos(lat1Rad), + cos(distanceRad) - sin(lat1Rad) * sin(lat2Rad), + ) + + return GeoPoint( + latitude = lat2Rad * RAD_TO_DEG, + longitude = lng2Rad * RAD_TO_DEG, + altitude = origin.altitude ?: 0.0, + ) + } + + /** + * Returns the location of origin when provided with a GeoPoint destination, + * meters travelled and original heading. + * Headings are expressed in degrees clockwise from North. + * + * @param to Destination point + * @param distance Distance travelled in meters + * @param heading Original heading in degrees + * @return Origin GeoPoint position, or null if no solution is available + */ + fun computeOffsetOrigin( + to: IGeoPoint, + distance: Double, + heading: Double, + ): GeoPoint? { + // Calculate the reverse heading + val reverseHeading = (heading + 180) % 360 + + return try { + computeOffset(to, distance, reverseHeading) + } catch (e: Exception) { + null + } + } + + /** + * Returns the length of the given path in meters. + * + * @param path List of GeoPoint locations defining the path + * @return Length in meters + */ + fun computeLength(path: List): Double { + if (path.size < 2) return 0.0 + + var length = 0.0 + for (i in 1 until path.size) { + length += computeDistanceBetween(path[i - 1], path[i]) + } + + return length + } + + /** + * Returns the area of a closed path in square meters. + * The path should form a closed polygon. + * + * @param path List of GeoPoint locations defining the closed path + * @return Area in square meters + */ + fun computeArea(path: List): Double = abs(computeSignedArea(path)) + + /** + * Returns the signed area of a closed path in square meters. + * The signed area may be used to determine the orientation of the path. + * Positive values indicate counter-clockwise orientation, + * negative values indicate clockwise orientation. + * + * @param path List of GeoPoint locations defining the closed path + * @return Signed area in square meters + */ + fun computeSignedArea(path: List): Double { + if (path.size < 3) return 0.0 + + var area = 0.0 + val n = path.size + + for (i in path.indices) { + val j = (i + 1) % n + val lat1 = path[i].latitude * DEG_TO_RAD + val lat2 = path[j].latitude * DEG_TO_RAD + val deltaLng = (path[j].longitude - path[i].longitude) * DEG_TO_RAD + + area += deltaLng * (2 + sin(lat1) + sin(lat2)) + } + + return area * EARTH_RADIUS * EARTH_RADIUS / 2.0 + } + + /** + * Interpolates between two GeoPoint locations along the great circle path. + * + * @param from Starting point + * @param to Ending point + * @param fraction Interpolation fraction (0.0 = from, 1.0 = to) + * @return Interpolated GeoPoint position + */ + fun interpolate( + from: IGeoPoint, + to: IGeoPoint, + fraction: Double, + ): GeoPoint { + val lat1Rad = from.latitude * DEG_TO_RAD + val lng1Rad = from.longitude * DEG_TO_RAD + val lat2Rad = to.latitude * DEG_TO_RAD + val lng2Rad = to.longitude * DEG_TO_RAD + + val deltaLat = lat2Rad - lat1Rad + val deltaLng = lng2Rad - lng1Rad + + // Use simple linear interpolation for small distances + if (abs(deltaLat) < 0.1 && abs(deltaLng) < 0.1) { + val interpolatedAltitude = + when { + from.altitude != null && to.altitude != null -> + from.altitude!! + fraction * (to.altitude!! - from.altitude!!) + from.altitude != null -> from.altitude + to.altitude != null -> to.altitude + else -> 0.0 + } + + return GeoPoint( + latitude = from.latitude + fraction * (to.latitude - from.latitude), + longitude = from.longitude + fraction * (to.longitude - from.longitude), + altitude = interpolatedAltitude!!, + ) + } + + // Use great circle interpolation for larger distances + val distance = computeDistanceBetween(from, to) + val heading = computeHeading(from, to) + + return computeOffset(from, distance * fraction, heading) + } + + /** + * Performs linear interpolation between two GeoPoint locations without considering Earth's curvature. + * This method treats coordinates as if they were on a flat plane, which may result in + * inaccurate results for large distances but is computationally faster. + * + * For longitude interpolation, this method automatically chooses the shorter path, + * which may cross the 180°/-180° meridian line if that results in a shorter distance. + * + * Use this method only when: + * - Working with small distances where Earth's curvature is negligible + * - Performance is critical and accuracy can be sacrificed + * - Working with projected coordinate systems + * + * @param from Starting point + * @param to Ending point + * @param fraction Interpolation fraction (0.0 = from, 1.0 = to) + * @return Linearly interpolated GeoPoint position + */ + fun linearInterpolate( + from: IGeoPoint, + to: IGeoPoint, + fraction: Double, + ): GeoPoint { + val interpolatedAltitude = + when { + from.altitude != null && to.altitude != null -> + from.altitude!! + fraction * (to.altitude!! - from.altitude!!) + from.altitude != null -> from.altitude + to.altitude != null -> to.altitude + else -> 0.0 + } + + // Latitude interpolation is straightforward + val interpolatedLatitude = from.latitude + fraction * (to.latitude - from.latitude) + + // Longitude interpolation: choose the shorter path + val fromLng = from.longitude + val toLng = to.longitude + + // Calculate both possible longitude differences + val directDiff = toLng - fromLng + val crossMeridianDiff = + when { + directDiff > 180 -> directDiff - 360 // Cross westward + directDiff < -180 -> directDiff + 360 // Cross eastward + else -> directDiff // Direct path is shorter + } + + // Use the shorter difference for interpolation + val interpolatedLongitude = fromLng + fraction * crossMeridianDiff + + // Normalize longitude to [-180, 180] range + val normalizedLongitude = normalizeLng(interpolatedLongitude) + + return GeoPoint( + latitude = interpolatedLatitude, + longitude = normalizedLongitude, + altitude = interpolatedAltitude!!, + ) + } + + /** + * Normalizes longitude to the range (-180, 180]. + */ + private fun normalizeLng(lng: Double): Double = (((lng + 180) % 360 + 360) % 360) - 180 + + /** + * Clamps latitude to the range [-90, 90]. + */ + private fun clampLat(lat: Double): Double = lat.coerceIn(-90.0, 90.0) +} diff --git a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/marker/ArcGISMarkerRenderer.kt b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/marker/ArcGISMarkerRenderer.kt index 9b0e8248..8fb2203c 100644 --- a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/marker/ArcGISMarkerRenderer.kt +++ b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/marker/ArcGISMarkerRenderer.kt @@ -74,7 +74,7 @@ class ArcGISMarkerRenderer( val marker = Graphic( - geometry = params.first.position.toPoint(holder.map.scene?.spatialReference), + geometry = GeoPoint.from(params.first.position).toPoint(holder.map.scene?.spatialReference), symbol = pictureSymbolFuture, ).also { it.attributes.set("id", params.first.id) @@ -118,8 +118,7 @@ class ArcGISMarkerRenderer( if (params.entity.state.position != params.prevEntity.state.position) { params.entity.marker.geometry = - params.entity.state.position - .toPoint() + GeoPoint.from(params.entity.state.position).toPoint() } // ArcGISはマーカーを再作成しなくてよいので、同じマーカーのインスタンスを返す diff --git a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/polyline/ArcGISPolylineRenderer.kt b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/polyline/ArcGISPolylineRenderer.kt index ee3d427d..ba3ecf58 100644 --- a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/polyline/ArcGISPolylineRenderer.kt +++ b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/polyline/ArcGISPolylineRenderer.kt @@ -18,6 +18,7 @@ import com.mapconductor.core.polyline.PolylineOverlayManagerImpl import com.mapconductor.core.polyline.PolylineRenderer.UpdateParams import com.mapconductor.core.polyline.PolylineRendererFactory import com.mapconductor.core.polyline.PolylineState +import com.mapconductor.core.spherical.Spherical import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -101,8 +102,27 @@ class ArcGISPolylineRenderer( private fun createGeometry(state: PolylineState): Geometry { val polylineBuilder = PolylineBuilder().also { builder -> - state.points.forEach { - builder.addPoint(GeoPoint.from(it).toPoint()) + if (state.geodesic) { + state.points.forEach { + builder.addPoint(GeoPoint.from(it).toPoint()) + } + return@also + } + + builder.addPoint(GeoPoint.from(state.points[0]).toPoint(holder.map.spatialReference.value)) + for (i in 1 until state.points.size) { + var fraction = 0.0 + while (fraction <= 1.0) { + val point = + Spherical.linearInterpolate( + from = state.points[i - 1], + to = state.points[i], + fraction = fraction, + ) + builder.addPoint(point.toPoint(holder.map.spatialReference.value)) + fraction += 0.01 + } + builder.addPoint(GeoPoint.from(state.points[i]).toPoint(holder.map.spatialReference.value)) } } return polylineBuilder.toGeometry() diff --git a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt index e371ddf6..44b88d27 100644 --- a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt +++ b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt @@ -2,6 +2,7 @@ package com.mapconductor.googlemaps import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.key import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.node.Ref @@ -40,90 +41,92 @@ fun GoogleMapsView( val context = LocalContext.current // Context will be available from MapViewBase too if needed val registry = remember { scope.buildRegistry() } - MapViewBase( - state = state, - modifier = modifier, - holderRef = holderRef, - controllerRef = controllerRef, - viewProvider = { this.mapView }, // Assuming GoogleMapViewHolder has a 'mapView' property - scope = scope, - registry = registry, - onInitialize = { - // Specific Google Maps initialization logic - // This lambda will be executed within state.initAsync by MapViewBase - val cameraPosition = - state.mapCameraPosition.value?.let { - CameraPosition - .Builder() - .apply { - target(GeoPoint.from(it.position).toLatLng()) - zoom(it.zoom.toFloat()) - bearing(it.bearing.toFloat()) - tilt(it.tilt.toFloat()) - }.build() - } + key(state.id) { + MapViewBase( + state = state, + modifier = modifier, + holderRef = holderRef, + controllerRef = controllerRef, + viewProvider = { this.mapView }, // Assuming GoogleMapViewHolder has a 'mapView' property + scope = scope, + registry = registry, + onInitialize = { + // Specific Google Maps initialization logic + // This lambda will be executed within state.initAsync by MapViewBase + val cameraPosition = + state.mapCameraPosition.value?.let { + CameraPosition + .Builder() + .apply { + target(GeoPoint.from(it.position).toLatLng()) + zoom(it.zoom.toFloat()) + bearing(it.bearing.toFloat()) + tilt(it.tilt.toFloat()) + }.build() + } - val mapInitOptions = - GoogleMapOptions() - .mapType(state.mapDesignType.getValue()) - .camera(cameraPosition) + val mapInitOptions = + GoogleMapOptions() + .mapType(state.mapDesignType.getValue()) + .camera(cameraPosition) - val controller = - GoogleMapViewControllerStore.getOrCreate( - context = context, // Use context from the outer scope - id = state.id, - options = mapInitOptions, - ) - (state as? GoogleMapViewState)?.let { mapViewState -> - mapViewState.controller = controller - controller.cameraMoveListener = mapViewState::OnCameraChange - } - controller.mapClickListener = onMapClick - controller.markerClickListener = onMarkerClick - controller.markerDragStartListener = onMarkerDragStart - controller.markerDragListener = onMarkerDrag - controller.markerDragEndListener = onMarkerDragEnd - controller.circleClickListener = onCircleClick - controller.polylineClickListener = onPolylineClick - controller.setOnMarkerAnimationStart(onMarkerAnimateStart) - controller.setOnMarkerAnimationEnd(onMarkerAnimateEnd) + val controller = + GoogleMapViewControllerStore.getOrCreate( + context = context, // Use context from the outer scope + id = state.id, + options = mapInitOptions, + ) + (state as? GoogleMapViewState)?.let { mapViewState -> + mapViewState.controller = controller + controller.cameraMoveListener = mapViewState::OnCameraChange + } + controller.mapClickListener = onMapClick + controller.markerClickListener = onMarkerClick + controller.markerDragStartListener = onMarkerDragStart + controller.markerDragListener = onMarkerDrag + controller.markerDragEndListener = onMarkerDragEnd + controller.circleClickListener = onCircleClick + controller.polylineClickListener = onPolylineClick + controller.setOnMarkerAnimationStart(onMarkerAnimateStart) + controller.setOnMarkerAnimationEnd(onMarkerAnimateEnd) - holderRef.value = controller.holder - controllerRef.value = controller - true // Return success/failure of initialization - }, - customDisposableEffect = { _state, _holderRef -> - // Specific Google Maps DisposableEffect logic - val lifecycle = LocalLifecycleOwner.current.lifecycle // Get lifecycle here - DisposableEffect(lifecycle) { - val stateId = _state.id - val observer = - object : DefaultLifecycleObserver { - override fun onResume(owner: LifecycleOwner) {} + holderRef.value = controller.holder + controllerRef.value = controller + true // Return success/failure of initialization + }, + customDisposableEffect = { _state, _holderRef -> + // Specific Google Maps DisposableEffect logic + val lifecycle = LocalLifecycleOwner.current.lifecycle // Get lifecycle here + DisposableEffect(lifecycle) { + val stateId = _state.id + val observer = + object : DefaultLifecycleObserver { + override fun onResume(owner: LifecycleOwner) {} - override fun onPause(owner: LifecycleOwner) {} + override fun onPause(owner: LifecycleOwner) {} - override fun onDestroy(owner: LifecycleOwner) { - val activity = context.findActivity() - if (activity?.isChangingConfigurations == true) { - (_holderRef.value!!.mapView.parent as? ViewGroup)?.removeView( - _holderRef.value!!.mapView, - ) - } else { - GoogleMapViewControllerStore.remove(stateId) + override fun onDestroy(owner: LifecycleOwner) { + val activity = context.findActivity() + if (activity?.isChangingConfigurations == true) { + (_holderRef.value!!.mapView.parent as? ViewGroup)?.removeView( + _holderRef.value!!.mapView, + ) + } else { + GoogleMapViewControllerStore.remove(stateId) + } } } + lifecycle.addObserver(observer) + onDispose { + // _state.resetInitState() + lifecycle.removeObserver(observer) } - lifecycle.addObserver(observer) - onDispose { - _state.resetInitState() - lifecycle.removeObserver(observer) } - } - }, - // Pass content if it needs to be rendered within the overlay providers in MapViewBase, - // or handle it here if it's specific to GoogleMapsView structure before calling MapViewBase. - // For now, assuming content relates to overlay definitions. - content = content, // This might need adjustment based on how overlays are handled - ) + }, + // Pass content if it needs to be rendered within the overlay providers in MapViewBase, + // or handle it here if it's specific to GoogleMapsView structure before calling MapViewBase. + // For now, assuming content relates to overlay definitions. + content = content, // This might need adjustment based on how overlays are handled + ) + } } diff --git a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/marker/GoogleMapMarkerRenderer.kt b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/marker/GoogleMapMarkerRenderer.kt index cca4de0d..36e950d7 100644 --- a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/marker/GoogleMapMarkerRenderer.kt +++ b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/marker/GoogleMapMarkerRenderer.kt @@ -88,8 +88,7 @@ class GoogleMapMarkerRenderer( } if (params.entity.state.position != params.prevEntity.state.position) { params.entity.marker.position = - params.entity.state.position - .toLatLng() + GeoPoint.from(params.entity.state.position).toLatLng() } // Google Mapsはマーカーを再作成しなくてよいので、同じマーカーのインスタンスを返す diff --git a/mapconductor-for-here/src/main/java/com/mapconductor/here/marker/HereMapMarkerRenderer.kt b/mapconductor-for-here/src/main/java/com/mapconductor/here/marker/HereMapMarkerRenderer.kt index 5ee6acd3..74af6fe5 100644 --- a/mapconductor-for-here/src/main/java/com/mapconductor/here/marker/HereMapMarkerRenderer.kt +++ b/mapconductor-for-here/src/main/java/com/mapconductor/here/marker/HereMapMarkerRenderer.kt @@ -95,8 +95,7 @@ class HereMapMarkerRenderer( } if (params.entity.state.position != params.prevEntity.state.position) { params.entity.marker.coordinates = - params.entity.state.position - .toGeoCoordinates() + GeoPoint.from(params.entity.state.position).toGeoCoordinates() } // Hereはマーカーを再作成しなくてよいので、同じマーカーのインスタンスを返す diff --git a/mapconductor-for-here/src/main/java/com/mapconductor/here/polyline/HereMapPolylineRenderer.kt b/mapconductor-for-here/src/main/java/com/mapconductor/here/polyline/HereMapPolylineRenderer.kt index c695b162..e9ea9bb6 100644 --- a/mapconductor-for-here/src/main/java/com/mapconductor/here/polyline/HereMapPolylineRenderer.kt +++ b/mapconductor-for-here/src/main/java/com/mapconductor/here/polyline/HereMapPolylineRenderer.kt @@ -8,8 +8,9 @@ import com.here.sdk.mapview.MapMeasureDependentRenderSize import com.here.sdk.mapview.MapPolyline import com.here.sdk.mapview.RenderSize import com.mapconductor.core.ResourceProvider -import com.mapconductor.core.createGeodesicPoints +import com.mapconductor.core.createInterpolatePoints import com.mapconductor.core.features.GeoPoint +import com.mapconductor.core.features.IGeoPoint import com.mapconductor.core.polyline.AbstractPolylineRenderer import com.mapconductor.core.polyline.PolylineEntity import com.mapconductor.core.polyline.PolylineOverlayManager @@ -78,14 +79,12 @@ class HereMapPolylineRenderer( } private fun createGeoPolyline(state: PolylineState): GeoPolyline { - val points = + val geoPoints: List = when (state.geodesic) { - false -> state.points.map { GeoPoint.from(it).toGeoCoordinates() } - true -> { - val results = createGeodesicPoints(state.points) - results.map { GeoPoint.from(it).toGeoCoordinates() } - } + true -> createInterpolatePoints(state.points) + false -> state.points } + val points = geoPoints.map { GeoPoint.from(it).toGeoCoordinates() } val geoPolyline = GeoPolyline(points) return geoPolyline } diff --git a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/marker/MapboxMarkerRenderer.kt b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/marker/MapboxMarkerRenderer.kt index 40cfa61d..5ac85b38 100644 --- a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/marker/MapboxMarkerRenderer.kt +++ b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/marker/MapboxMarkerRenderer.kt @@ -123,7 +123,7 @@ class MapboxMarkerRenderer( return newMarkers.map { (state, _) -> val featureId = "marker-${state.id}" - val position = state.position.toPoint() + val position = GeoPoint.from(state.position).toPoint() val properties = JsonObject().apply { if (state.icon != null) { @@ -213,8 +213,7 @@ class MapboxMarkerRenderer( } val position = - params.entity.state.position - .toPoint() + GeoPoint.from(params.entity.state.position).toPoint() val featureId = "marker-${params.entity.state.id}" Feature.fromGeometry(position, properties, featureId) } diff --git a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/marker/MarkerDragLayer.kt b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/marker/MarkerDragLayer.kt index afc521e4..7b09cd89 100644 --- a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/marker/MarkerDragLayer.kt +++ b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/marker/MarkerDragLayer.kt @@ -23,7 +23,7 @@ class MarkerDragLayer( selected?.let { val feature = Feature.fromGeometry( - it.state.position.toPoint(), + GeoPoint.from(it.state.position).toPoint(), it.marker.properties(), it.state.id, ) diff --git a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/polyline/MapboxPolylineRenderer.kt b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/polyline/MapboxPolylineRenderer.kt index 7bc181b1..ada810d1 100644 --- a/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/polyline/MapboxPolylineRenderer.kt +++ b/mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/polyline/MapboxPolylineRenderer.kt @@ -4,9 +4,11 @@ import com.google.gson.JsonObject import com.mapbox.geojson.Feature import com.mapbox.geojson.LineString import com.mapbox.maps.extension.style.sources.removeGeoJSONSourceFeatures -import com.mapconductor.core.createGeodesicPoints +import com.mapconductor.core.createInterpolatePoints +import com.mapconductor.core.createLinearInterpolatePoints import com.mapconductor.core.features.GeoPoint import com.mapconductor.core.features.IGeoPoint +import com.mapconductor.core.features.normalize import com.mapconductor.core.polyline.AbstractPolylineRenderer import com.mapconductor.core.polyline.PolylineEntity import com.mapconductor.core.polyline.PolylineOverlayManager @@ -48,25 +50,33 @@ class MapboxPolylineRenderer( private fun createMapboxLines(state: PolylineState): List { val geoPoints: List = when (state.geodesic) { - true -> createGeodesicPoints(state.points) - false -> state.points - } - return splitByMeridian(geoPoints).map { linePoints -> + true -> createInterpolatePoints(state.points) + false -> createLinearInterpolatePoints(state.points) + }.map { it.normalize() } + return splitByMeridian(geoPoints, state.geodesic).mapIndexed { index, linePoints -> val points = linePoints.map { GeoPoint.from(it).toPoint() } - return@map Feature.fromGeometry( + val id = "polyline-${state.id}-$index" + + return@mapIndexed Feature.fromGeometry( LineString.fromLngLats(points), JsonObject().apply { addProperty(MapboxPolylineLayer.Prop.STROKE_COLOR, state.strokeColor.toMapboxColorString()) addProperty(MapboxPolylineLayer.Prop.STROKE_WIDTH, state.strokeWidth.value) + addProperty("id", id) }, - "polyline-${state.id}", + id, ) } } override suspend fun removePolylines(removeEntities: List>) { - val featureIds = removeEntities.map { "polyline-${it.state.id}" } - layer.source.removeGeoJSONSourceFeatures(featureIds) + val featureIds = + removeEntities.map { entity -> + entity.polyline.map { feature -> + feature.getStringProperty("id") + } + } + layer.source.removeGeoJSONSourceFeatures(featureIds.flatten()) } override suspend fun changePolylines( From 59074770d3db39bfee35413e241e5756ab7647bf Mon Sep 17 00:00:00 2001 From: Masashi Katsumata Date: Tue, 12 Aug 2025 01:05:55 +0900 Subject: [PATCH 5/7] Fix: Mapview does not redraw polyline when polylineState.geodesic property has been changed. --- .../example/pages/map/flyto/FlyToMapPage.kt | 4 +-- .../pages/map/flyto/FlyToPageViewModel.kt | 32 ++++++++++++------- .../core/circle/CircleOverlayManager.kt | 1 + .../core/polyline/PolylineOverlayManager.kt | 1 + .../arcgis/polyline/ArcGISPolylineRenderer.kt | 8 ++--- .../mapconductor/googlemaps/GoogleMapView.kt | 2 +- .../here/polyline/HereMapPolylineRenderer.kt | 32 ++++++++++++------- 7 files changed, 50 insertions(+), 30 deletions(-) diff --git a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt index 43c40c1f..f9a1ca30 100644 --- a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt +++ b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt @@ -18,8 +18,6 @@ import androidx.compose.material3.SwitchDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue -import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.LayoutDirection @@ -74,7 +72,7 @@ fun FlyToMapPage( Switch( checked = viewModel.geodesic, onCheckedChange = { - viewModel.geodesic = !viewModel.geodesic + viewModel.setGeodesic(!viewModel.geodesic) }, thumbContent = if (viewModel.geodesic) { diff --git a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt index c139de0b..dfe6f187 100644 --- a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt +++ b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt @@ -25,7 +25,7 @@ interface FlyToPageViewModel { val messages: StateFlow> val markers: List val polylines: List - var geodesic: Boolean + val geodesic: Boolean fun onMapViewChanged(state: MapViewState<*>) @@ -40,6 +40,8 @@ interface FlyToPageViewModel { fun flyToNewYork() fun flyToSydney() + + fun setGeodesic(value: Boolean) } class FlyToPageViewModelImpl( @@ -61,8 +63,8 @@ class FlyToPageViewModelImpl( override val initCameraPosition = MapCameraPosition( - position = londonLocation, - zoom = 8.0, + position = tokyoLocation, + zoom = 0.0, bearing = 0.0, tilt = 0.0, paddings = null, @@ -112,7 +114,15 @@ class FlyToPageViewModelImpl( ), ) - override var geodesic by mutableStateOf(true) + private var _geodesic by mutableStateOf(false) + override val geodesic + get() = _geodesic + + override fun setGeodesic(value: Boolean) { + this._geodesic = value + + polylines.forEach { it.geodesic = value } + } override val polylines = listOf( @@ -122,7 +132,7 @@ class FlyToPageViewModelImpl( points = listOf(honoluluLocation, newYorkLocation), strokeColor = Color.Green.copy(alpha = 0.7f), strokeWidth = 3.dp, - geodesic = geodesic, + geodesic = false, ), // Honolulu to Sydney PolylineState( @@ -136,7 +146,7 @@ class FlyToPageViewModelImpl( alpha = 0.7f, ), strokeWidth = 3.dp, - geodesic = true, + geodesic = false, ), // Tokyo to London PolylineState( @@ -150,7 +160,7 @@ class FlyToPageViewModelImpl( alpha = 0.7f, ), strokeWidth = 3.dp, - geodesic = true, + geodesic = false, ), // Tokyo to NewYork PolylineState( @@ -158,7 +168,7 @@ class FlyToPageViewModelImpl( points = listOf(tokyoLocation, newYorkLocation), strokeColor = Color.Blue.copy(alpha = 0.7f), strokeWidth = 3.dp, - geodesic = true, + geodesic = false, ), // Tokyo to Honolulu PolylineState( @@ -172,7 +182,7 @@ class FlyToPageViewModelImpl( alpha = 0.7f, ), strokeWidth = 3.dp, - geodesic = true, + geodesic = false, ), // London to New York PolylineState( @@ -186,7 +196,7 @@ class FlyToPageViewModelImpl( alpha = 0.7f, ), strokeWidth = 3.dp, - geodesic = true, + geodesic = false, ), // London to Sydney PolylineState( @@ -195,7 +205,7 @@ class FlyToPageViewModelImpl( strokeColor = Color.Magenta.copy(alpha = 0.7f), strokeWidth = 3.dp, - geodesic = true, + geodesic = false, ), ) diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/circle/CircleOverlayManager.kt b/mapconductor-core/src/main/java/com/mapconductor/core/circle/CircleOverlayManager.kt index c0424490..74a9fd86 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/circle/CircleOverlayManager.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/circle/CircleOverlayManager.kt @@ -130,6 +130,7 @@ class CircleOverlayManagerImpl( } } } + onPostProcess?.invoke() } } diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/polyline/PolylineOverlayManager.kt b/mapconductor-core/src/main/java/com/mapconductor/core/polyline/PolylineOverlayManager.kt index abf854cf..096562ab 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/polyline/PolylineOverlayManager.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/polyline/PolylineOverlayManager.kt @@ -122,6 +122,7 @@ class PolylineOverlayManagerImpl( } } } + onPostProcess?.invoke() } } diff --git a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/polyline/ArcGISPolylineRenderer.kt b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/polyline/ArcGISPolylineRenderer.kt index ba3ecf58..9091c7eb 100644 --- a/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/polyline/ArcGISPolylineRenderer.kt +++ b/mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/polyline/ArcGISPolylineRenderer.kt @@ -80,7 +80,7 @@ class ArcGISPolylineRenderer( return@withContext changes.map { params -> val finger = params.entity.fingerPrint val prevFinger = params.prevEntity.fingerPrint - if (finger.points != prevFinger.points) { + if (finger.points != prevFinger.points || finger.geodesic != prevFinger.geodesic) { params.entity.polyline.geometry = createGeometry(params.entity.state) } @@ -109,7 +109,7 @@ class ArcGISPolylineRenderer( return@also } - builder.addPoint(GeoPoint.from(state.points[0]).toPoint(holder.map.spatialReference.value)) + builder.addPoint(GeoPoint.from(state.points[0]).toPoint()) for (i in 1 until state.points.size) { var fraction = 0.0 while (fraction <= 1.0) { @@ -119,10 +119,10 @@ class ArcGISPolylineRenderer( to = state.points[i], fraction = fraction, ) - builder.addPoint(point.toPoint(holder.map.spatialReference.value)) + builder.addPoint(point.toPoint()) fraction += 0.01 } - builder.addPoint(GeoPoint.from(state.points[i]).toPoint(holder.map.spatialReference.value)) + builder.addPoint(GeoPoint.from(state.points[i]).toPoint()) } } return polylineBuilder.toGeometry() diff --git a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt index 44b88d27..ddb6e79b 100644 --- a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt +++ b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt @@ -118,7 +118,7 @@ fun GoogleMapsView( } lifecycle.addObserver(observer) onDispose { - // _state.resetInitState() + _state.resetInitState() lifecycle.removeObserver(observer) } } diff --git a/mapconductor-for-here/src/main/java/com/mapconductor/here/polyline/HereMapPolylineRenderer.kt b/mapconductor-for-here/src/main/java/com/mapconductor/here/polyline/HereMapPolylineRenderer.kt index e9ea9bb6..04bfd8b1 100644 --- a/mapconductor-for-here/src/main/java/com/mapconductor/here/polyline/HereMapPolylineRenderer.kt +++ b/mapconductor-for-here/src/main/java/com/mapconductor/here/polyline/HereMapPolylineRenderer.kt @@ -9,6 +9,7 @@ import com.here.sdk.mapview.MapPolyline import com.here.sdk.mapview.RenderSize import com.mapconductor.core.ResourceProvider import com.mapconductor.core.createInterpolatePoints +import com.mapconductor.core.createLinearInterpolatePoints import com.mapconductor.core.features.GeoPoint import com.mapconductor.core.features.IGeoPoint import com.mapconductor.core.polyline.AbstractPolylineRenderer @@ -18,18 +19,19 @@ import com.mapconductor.core.polyline.PolylineOverlayManagerImpl import com.mapconductor.core.polyline.PolylineRenderer.UpdateParams import com.mapconductor.core.polyline.PolylineRendererFactory import com.mapconductor.core.polyline.PolylineState +import com.mapconductor.here.HereMapActualPolyline import com.mapconductor.here.HereMapViewHolder import com.mapconductor.here.toGeoCoordinates import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -class DefaultHereMapPolylineRenderer : PolylineRendererFactory { +class DefaultHereMapPolylineRenderer : PolylineRendererFactory { override fun create( - onAdd: suspend (List) -> List, - onChange: suspend (List>) -> List, - onRemove: suspend (List>) -> Unit, + onAdd: suspend (List) -> List, + onChange: suspend (List>) -> List, + onRemove: suspend (List>) -> Unit, onPostProcess: (suspend () -> Unit)?, - ): PolylineOverlayManager = + ): PolylineOverlayManager = PolylineOverlayManagerImpl( onRemove = onRemove, onAdd = onAdd, @@ -41,7 +43,7 @@ class DefaultHereMapPolylineRenderer : PolylineRendererFactory { class HereMapPolylineRenderer( override val holder: HereMapViewHolder, override val coroutine: CoroutineScope, -) : AbstractPolylineRenderer() { +) : AbstractPolylineRenderer() { override suspend fun addPolylines(newLines: List): List { val polylines = newLines.map { state -> @@ -55,18 +57,20 @@ class HereMapPolylineRenderer( return polylines } - override suspend fun removePolylines(removeEntities: List>) { + override suspend fun removePolylines(removeEntities: List>) { val polylines = removeEntities.map { it.polyline } coroutine.launch { holder.map.removeMapPolylines(polylines) } } - override suspend fun changePolylines(changes: List>): List { - return changes.map { params -> + override suspend fun changePolylines(changes: List>): List { + val removed = mutableListOf() + val polylines = changes.map { params -> val finger = params.entity.fingerPrint val prevFinger = params.prevEntity.fingerPrint - if (finger.points != prevFinger.points) { + if (finger.points != prevFinger.points || finger.geodesic != prevFinger.geodesic) { + removed.add(params.prevEntity.polyline) val geoPolyline = createGeoPolyline(params.entity.state) params.entity.polyline.geometry = geoPolyline } @@ -76,13 +80,19 @@ class HereMapPolylineRenderer( } return@map params.entity.polyline } + + coroutine.launch { + holder.map.removeMapPolylines(removed) + holder.map.addMapPolylines(polylines) + } + return polylines } private fun createGeoPolyline(state: PolylineState): GeoPolyline { val geoPoints: List = when (state.geodesic) { true -> createInterpolatePoints(state.points) - false -> state.points + false -> createLinearInterpolatePoints(state.points) } val points = geoPoints.map { GeoPoint.from(it).toGeoCoordinates() } val geoPolyline = GeoPolyline(points) From b7eb9e35159afab70f67462d9b9e65e2e2a2c0aa Mon Sep 17 00:00:00 2001 From: Masashi Katsumata Date: Thu, 14 Aug 2025 02:10:57 +0900 Subject: [PATCH 6/7] fix: setting new value for geodesic property by delegating makes crash --- .../example/pages/map/flyto/FlyToMapPage.kt | 20 +- .../pages/map/flyto/FlyToPageViewModel.kt | 195 ++++++++---------- .../mapconductor/core/circle/CircleCompose.kt | 4 +- .../mapconductor/core/marker/MarkerCompose.kt | 4 +- .../core/polygon/PolygonComponent.kt | 4 +- .../core/polyline/PolylineComponent.kt | 4 +- .../here/polyline/HereMapPolylineRenderer.kt | 31 +-- 7 files changed, 131 insertions(+), 131 deletions(-) diff --git a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt index f9a1ca30..80c0303a 100644 --- a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt +++ b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToMapPage.kt @@ -22,15 +22,31 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.viewmodel.compose.viewModel import com.mapconductor.example.ui.DemoMapPageScaffold import com.mapconductor.example.ui.MessageCard @Composable fun FlyToMapPage( icons: FlyToMapIcons, - viewModel: FlyToPageViewModel = FlyToPageViewModelImpl(icons), onToggleSidebar: () -> Unit = {}, ) { + val viewModel: FlyToPageViewModel = + viewModel( + factory = + object : ViewModelProvider.Factory { + override fun create(modelClass: Class): T { + if (modelClass.isAssignableFrom(FlyToPageViewModelImpl::class.java)) { + @Suppress("UNCHECKED_CAST") + return FlyToPageViewModelImpl(icons) as T + } + throw IllegalArgumentException("Unknown ViewModel class") + } + }, + ) + DemoMapPageScaffold( initCameraPosition = viewModel.initCameraPosition, onToggleSidebar = onToggleSidebar, @@ -72,7 +88,7 @@ fun FlyToMapPage( Switch( checked = viewModel.geodesic, onCheckedChange = { - viewModel.setGeodesic(!viewModel.geodesic) + viewModel.geodesic = !viewModel.geodesic }, thumbContent = if (viewModel.geodesic) { diff --git a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt index dfe6f187..991b4eba 100644 --- a/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt +++ b/example-app/src/main/java/com/mapconductor/example/pages/map/flyto/FlyToPageViewModel.kt @@ -25,12 +25,10 @@ interface FlyToPageViewModel { val messages: StateFlow> val markers: List val polylines: List - val geodesic: Boolean + var geodesic: Boolean fun onMapViewChanged(state: MapViewState<*>) - fun onMapClick(clicked: GeoPoint) - fun flyToHonolulu() fun flyToTokyo() @@ -40,8 +38,6 @@ interface FlyToPageViewModel { fun flyToNewYork() fun flyToSydney() - - fun setGeodesic(value: Boolean) } class FlyToPageViewModelImpl( @@ -61,6 +57,8 @@ class FlyToPageViewModelImpl( private val newYorkLocation = GeoPoint.fromLatLong(40.7128, -74.0060) private val sydneyLocation = GeoPoint.fromLatLong(-33.9506, 151.1815) + override var geodesic by mutableStateOf(false) + override val initCameraPosition = MapCameraPosition( position = tokyoLocation, @@ -114,109 +112,96 @@ class FlyToPageViewModelImpl( ), ) - private var _geodesic by mutableStateOf(false) - override val geodesic - get() = _geodesic - - override fun setGeodesic(value: Boolean) { - this._geodesic = value - - polylines.forEach { it.geodesic = value } - } - - override val polylines = - listOf( - // Honolulu to NewYork - PolylineState( - id = "honolulu_to_newyork", - points = listOf(honoluluLocation, newYorkLocation), - strokeColor = Color.Green.copy(alpha = 0.7f), - strokeWidth = 3.dp, - geodesic = false, - ), - // Honolulu to Sydney - PolylineState( - id = "honolulu_to_sydney", - points = listOf(honoluluLocation, sydneyLocation), - strokeColor = - Color( // lime - red = 0.7f, - green = 0f, - blue = 0f, - alpha = 0.7f, - ), - strokeWidth = 3.dp, - geodesic = false, - ), - // Tokyo to London - PolylineState( - id = "tokyo_to_london", - points = listOf(tokyoLocation, londonLocation), - strokeColor = - Color( // Fuchsia - red = 1.0f, - green = 0f, - blue = 1.0f, - alpha = 0.7f, - ), - strokeWidth = 3.dp, - geodesic = false, - ), - // Tokyo to NewYork - PolylineState( - id = "tokyo_to_newyork", - points = listOf(tokyoLocation, newYorkLocation), - strokeColor = Color.Blue.copy(alpha = 0.7f), - strokeWidth = 3.dp, - geodesic = false, - ), - // Tokyo to Honolulu - PolylineState( - id = "tokyo_to_honolulu", - points = listOf(tokyoLocation, honoluluLocation), - strokeColor = - Color( // Neon orange - red = 1.0f, - green = 0.35f, - blue = 0.12f, - alpha = 0.7f, - ), - strokeWidth = 3.dp, - geodesic = false, - ), - // London to New York - PolylineState( - id = "london_to_newyork", - points = listOf(londonLocation, newYorkLocation), - strokeColor = - Color( // maroon - red = 0.75f, - green = 0f, - blue = 0f, - alpha = 0.7f, - ), - strokeWidth = 3.dp, - geodesic = false, - ), - // London to Sydney - PolylineState( - id = "london_to_sydney", - points = listOf(londonLocation, sydneyLocation), - strokeColor = - Color.Magenta.copy(alpha = 0.7f), - strokeWidth = 3.dp, - geodesic = false, - ), - ) + override val polylines + get() = + listOf( + // Honolulu to NewYork + PolylineState( + id = "honolulu_to_newyork", + points = listOf(honoluluLocation, newYorkLocation), + strokeColor = Color.Green.copy(alpha = 0.7f), + strokeWidth = 3.dp, + geodesic = geodesic, + ), + // Honolulu to Sydney + PolylineState( + id = "honolulu_to_sydney", + points = listOf(honoluluLocation, sydneyLocation), + strokeColor = + Color( // lime + red = 0.7f, + green = 0f, + blue = 0f, + alpha = 0.7f, + ), + strokeWidth = 3.dp, + geodesic = geodesic, + ), + // Tokyo to London + PolylineState( + id = "tokyo_to_london", + points = listOf(tokyoLocation, londonLocation), + strokeColor = + Color( // Fuchsia + red = 1.0f, + green = 0f, + blue = 1.0f, + alpha = 0.7f, + ), + strokeWidth = 3.dp, + geodesic = geodesic, + ), + // Tokyo to NewYork + PolylineState( + id = "tokyo_to_newyork", + points = listOf(tokyoLocation, newYorkLocation), + strokeColor = Color.Blue.copy(alpha = 0.7f), + strokeWidth = 3.dp, + geodesic = geodesic, + ), + // Tokyo to Honolulu + PolylineState( + id = "tokyo_to_honolulu", + points = listOf(tokyoLocation, honoluluLocation), + strokeColor = + Color( // Neon orange + red = 1.0f, + green = 0.35f, + blue = 0.12f, + alpha = 0.7f, + ), + strokeWidth = 3.dp, + geodesic = geodesic, + ), + // London to New York + PolylineState( + id = "london_to_newyork", + points = listOf(londonLocation, newYorkLocation), + strokeColor = + Color( // maroon + red = 0.75f, + green = 0f, + blue = 0f, + alpha = 0.7f, + ), + strokeWidth = 3.dp, + geodesic = geodesic, + ), + // London to Sydney + PolylineState( + id = "london_to_sydney", + points = listOf(londonLocation, sydneyLocation), + strokeColor = + Color.Magenta.copy(alpha = 0.7f), + strokeWidth = 3.dp, + geodesic = geodesic, + ), + ) override fun onMapViewChanged(state: MapViewState<*>) { _mapViewState.value = state } - override fun onMapClick(clicked: GeoPoint) { -// showToast("Map clicked at: ${clicked.toUrlValue()}") - } - override fun flyToHonolulu() { flyToLocation(honoluluLocation, 10.0) } @@ -259,8 +244,4 @@ class FlyToPageViewModelImpl( } } } - - override fun onCleared() { - super.onCleared() - } } diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/circle/CircleCompose.kt b/mapconductor-core/src/main/java/com/mapconductor/core/circle/CircleCompose.kt index 6b0c0063..30ed1ce4 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/circle/CircleCompose.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/circle/CircleCompose.kt @@ -12,9 +12,9 @@ import android.os.Parcelable @Composable fun MapViewScope.Circle(state: CircleState) { - val rememberState = remember { state } + val rememberState = remember(state.fingerPrint()) { state } SideEffect { - circleFlow.value = circleFlow.value + rememberState + circleFlow.value = circleFlow.value.filter { it.id != rememberState.id } + rememberState } } diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/marker/MarkerCompose.kt b/mapconductor-core/src/main/java/com/mapconductor/core/marker/MarkerCompose.kt index cb83e340..948ff660 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/marker/MarkerCompose.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/marker/MarkerCompose.kt @@ -9,9 +9,9 @@ import android.os.Parcelable @Composable fun MapViewScope.Marker(state: MarkerState) { - val rememberMarker = remember { state } + val rememberMarker = remember(state.fingerPrint()) { state } SideEffect { - markerFlow.value = markerFlow.value + rememberMarker + markerFlow.value = markerFlow.value.filter { it.id != rememberMarker.id } + rememberMarker } } diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/polygon/PolygonComponent.kt b/mapconductor-core/src/main/java/com/mapconductor/core/polygon/PolygonComponent.kt index bcd4d804..f68d3890 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/polygon/PolygonComponent.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/polygon/PolygonComponent.kt @@ -12,9 +12,9 @@ import android.os.Parcelable @Composable fun MapViewScope.Polygon(state: PolygonState) { - val rememberState = remember { state } + val rememberState = remember(state.fingerPrint()) { state } SideEffect { - polygonFlow.value = polygonFlow.value + rememberState + polygonFlow.value = polygonFlow.value.filter { it.id != rememberState.id } + rememberState } } diff --git a/mapconductor-core/src/main/java/com/mapconductor/core/polyline/PolylineComponent.kt b/mapconductor-core/src/main/java/com/mapconductor/core/polyline/PolylineComponent.kt index 4308bdb0..9fcecf80 100644 --- a/mapconductor-core/src/main/java/com/mapconductor/core/polyline/PolylineComponent.kt +++ b/mapconductor-core/src/main/java/com/mapconductor/core/polyline/PolylineComponent.kt @@ -12,9 +12,9 @@ import android.os.Parcelable @Composable fun MapViewScope.Polyline(state: PolylineState) { - val rememberState = remember(state.id) { state } + val rememberState = remember(state.fingerPrint()) { state } SideEffect { - polylineFlow.value = polylineFlow.value + rememberState + polylineFlow.value = polylineFlow.value.filter { it.id != rememberState.id } + rememberState } } diff --git a/mapconductor-for-here/src/main/java/com/mapconductor/here/polyline/HereMapPolylineRenderer.kt b/mapconductor-for-here/src/main/java/com/mapconductor/here/polyline/HereMapPolylineRenderer.kt index 04bfd8b1..a7f56acd 100644 --- a/mapconductor-for-here/src/main/java/com/mapconductor/here/polyline/HereMapPolylineRenderer.kt +++ b/mapconductor-for-here/src/main/java/com/mapconductor/here/polyline/HereMapPolylineRenderer.kt @@ -64,22 +64,25 @@ class HereMapPolylineRenderer( } } - override suspend fun changePolylines(changes: List>): List { + override suspend fun changePolylines( + changes: List>, + ): List { val removed = mutableListOf() - val polylines = changes.map { params -> - val finger = params.entity.fingerPrint - val prevFinger = params.prevEntity.fingerPrint - if (finger.points != prevFinger.points || finger.geodesic != prevFinger.geodesic) { - removed.add(params.prevEntity.polyline) - val geoPolyline = createGeoPolyline(params.entity.state) - params.entity.polyline.geometry = geoPolyline - } - if (finger.strokeColor != prevFinger.strokeColor || finger.strokeWidth != prevFinger.strokeColor) { - val representation = createRepresentation(params.entity.state) - params.entity.polyline.setRepresentation(representation) + val polylines = + changes.map { params -> + val finger = params.entity.fingerPrint + val prevFinger = params.prevEntity.fingerPrint + if (finger.points != prevFinger.points || finger.geodesic != prevFinger.geodesic) { + removed.add(params.prevEntity.polyline) + val geoPolyline = createGeoPolyline(params.entity.state) + params.entity.polyline.geometry = geoPolyline + } + if (finger.strokeColor != prevFinger.strokeColor || finger.strokeWidth != prevFinger.strokeColor) { + val representation = createRepresentation(params.entity.state) + params.entity.polyline.setRepresentation(representation) + } + return@map params.entity.polyline } - return@map params.entity.polyline - } coroutine.launch { holder.map.removeMapPolylines(removed) From ca0a2cff181913cfb8979467c0b03c355f5c7bbd Mon Sep 17 00:00:00 2001 From: Masashi Katsumata Date: Thu, 14 Aug 2025 02:22:24 +0900 Subject: [PATCH 7/7] Remove unnecessary key() statement --- .../mapconductor/googlemaps/GoogleMapView.kt | 157 +++++++++--------- 1 file changed, 77 insertions(+), 80 deletions(-) diff --git a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt index ddb6e79b..e371ddf6 100644 --- a/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt +++ b/mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt @@ -2,7 +2,6 @@ package com.mapconductor.googlemaps import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect -import androidx.compose.runtime.key import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.node.Ref @@ -41,92 +40,90 @@ fun GoogleMapsView( val context = LocalContext.current // Context will be available from MapViewBase too if needed val registry = remember { scope.buildRegistry() } - key(state.id) { - MapViewBase( - state = state, - modifier = modifier, - holderRef = holderRef, - controllerRef = controllerRef, - viewProvider = { this.mapView }, // Assuming GoogleMapViewHolder has a 'mapView' property - scope = scope, - registry = registry, - onInitialize = { - // Specific Google Maps initialization logic - // This lambda will be executed within state.initAsync by MapViewBase - val cameraPosition = - state.mapCameraPosition.value?.let { - CameraPosition - .Builder() - .apply { - target(GeoPoint.from(it.position).toLatLng()) - zoom(it.zoom.toFloat()) - bearing(it.bearing.toFloat()) - tilt(it.tilt.toFloat()) - }.build() - } + MapViewBase( + state = state, + modifier = modifier, + holderRef = holderRef, + controllerRef = controllerRef, + viewProvider = { this.mapView }, // Assuming GoogleMapViewHolder has a 'mapView' property + scope = scope, + registry = registry, + onInitialize = { + // Specific Google Maps initialization logic + // This lambda will be executed within state.initAsync by MapViewBase + val cameraPosition = + state.mapCameraPosition.value?.let { + CameraPosition + .Builder() + .apply { + target(GeoPoint.from(it.position).toLatLng()) + zoom(it.zoom.toFloat()) + bearing(it.bearing.toFloat()) + tilt(it.tilt.toFloat()) + }.build() + } - val mapInitOptions = - GoogleMapOptions() - .mapType(state.mapDesignType.getValue()) - .camera(cameraPosition) + val mapInitOptions = + GoogleMapOptions() + .mapType(state.mapDesignType.getValue()) + .camera(cameraPosition) - val controller = - GoogleMapViewControllerStore.getOrCreate( - context = context, // Use context from the outer scope - id = state.id, - options = mapInitOptions, - ) - (state as? GoogleMapViewState)?.let { mapViewState -> - mapViewState.controller = controller - controller.cameraMoveListener = mapViewState::OnCameraChange - } - controller.mapClickListener = onMapClick - controller.markerClickListener = onMarkerClick - controller.markerDragStartListener = onMarkerDragStart - controller.markerDragListener = onMarkerDrag - controller.markerDragEndListener = onMarkerDragEnd - controller.circleClickListener = onCircleClick - controller.polylineClickListener = onPolylineClick - controller.setOnMarkerAnimationStart(onMarkerAnimateStart) - controller.setOnMarkerAnimationEnd(onMarkerAnimateEnd) + val controller = + GoogleMapViewControllerStore.getOrCreate( + context = context, // Use context from the outer scope + id = state.id, + options = mapInitOptions, + ) + (state as? GoogleMapViewState)?.let { mapViewState -> + mapViewState.controller = controller + controller.cameraMoveListener = mapViewState::OnCameraChange + } + controller.mapClickListener = onMapClick + controller.markerClickListener = onMarkerClick + controller.markerDragStartListener = onMarkerDragStart + controller.markerDragListener = onMarkerDrag + controller.markerDragEndListener = onMarkerDragEnd + controller.circleClickListener = onCircleClick + controller.polylineClickListener = onPolylineClick + controller.setOnMarkerAnimationStart(onMarkerAnimateStart) + controller.setOnMarkerAnimationEnd(onMarkerAnimateEnd) - holderRef.value = controller.holder - controllerRef.value = controller - true // Return success/failure of initialization - }, - customDisposableEffect = { _state, _holderRef -> - // Specific Google Maps DisposableEffect logic - val lifecycle = LocalLifecycleOwner.current.lifecycle // Get lifecycle here - DisposableEffect(lifecycle) { - val stateId = _state.id - val observer = - object : DefaultLifecycleObserver { - override fun onResume(owner: LifecycleOwner) {} + holderRef.value = controller.holder + controllerRef.value = controller + true // Return success/failure of initialization + }, + customDisposableEffect = { _state, _holderRef -> + // Specific Google Maps DisposableEffect logic + val lifecycle = LocalLifecycleOwner.current.lifecycle // Get lifecycle here + DisposableEffect(lifecycle) { + val stateId = _state.id + val observer = + object : DefaultLifecycleObserver { + override fun onResume(owner: LifecycleOwner) {} - override fun onPause(owner: LifecycleOwner) {} + override fun onPause(owner: LifecycleOwner) {} - override fun onDestroy(owner: LifecycleOwner) { - val activity = context.findActivity() - if (activity?.isChangingConfigurations == true) { - (_holderRef.value!!.mapView.parent as? ViewGroup)?.removeView( - _holderRef.value!!.mapView, - ) - } else { - GoogleMapViewControllerStore.remove(stateId) - } + override fun onDestroy(owner: LifecycleOwner) { + val activity = context.findActivity() + if (activity?.isChangingConfigurations == true) { + (_holderRef.value!!.mapView.parent as? ViewGroup)?.removeView( + _holderRef.value!!.mapView, + ) + } else { + GoogleMapViewControllerStore.remove(stateId) } } - lifecycle.addObserver(observer) - onDispose { - _state.resetInitState() - lifecycle.removeObserver(observer) } + lifecycle.addObserver(observer) + onDispose { + _state.resetInitState() + lifecycle.removeObserver(observer) } - }, - // Pass content if it needs to be rendered within the overlay providers in MapViewBase, - // or handle it here if it's specific to GoogleMapsView structure before calling MapViewBase. - // For now, assuming content relates to overlay definitions. - content = content, // This might need adjustment based on how overlays are handled - ) - } + } + }, + // Pass content if it needs to be rendered within the overlay providers in MapViewBase, + // or handle it here if it's specific to GoogleMapsView structure before calling MapViewBase. + // For now, assuming content relates to overlay definitions. + content = content, // This might need adjustment based on how overlays are handled + ) }