Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
53eff11
implement MapLibre skeleton
wf9a5m75 Oct 16, 2025
bda0cca
implement Maplibre skeleton
wf9a5m75 Oct 16, 2025
7939a81
wip: implementing symbol_layer
wf9a5m75 Oct 17, 2025
03f37e2
wip: symbol_layer
wf9a5m75 Oct 17, 2025
fe86417
fix: marker is not drawn
wf9a5m75 Oct 17, 2025
62f2acf
wip: adjusting ArcGISMapView initialization steps
wf9a5m75 Oct 21, 2025
ff1a72f
Fix: ArcGIS fails during initialization
wf9a5m75 Oct 21, 2025
6516179
Load styles before creating ArcGISMapViewHolderImpl
wf9a5m75 Oct 21, 2025
c733d55
feat: add Polyline
wf9a5m75 Oct 21, 2025
d5ababa
fix: ArcGIS crashes
wf9a5m75 Oct 23, 2025
371d9b3
feat: Polygon for MapLibre
wf9a5m75 Oct 25, 2025
c58d310
fix: gradlew allLintChecks do not work
wf9a5m75 Oct 25, 2025
af2935c
fix: Overlay component is not removed automatically on recomposition …
wf9a5m75 Oct 25, 2025
6db84bd
feat: Polygon supports click event if its geodesic property is false
wf9a5m75 Oct 25, 2025
b193608
feat: Polygon.geodesic property
wf9a5m75 Oct 26, 2025
73984e0
feat: PolygonState.zIndex works for renderring order and click detect…
wf9a5m75 Oct 26, 2025
7049334
feat: Draw Polyline by z-index correctly
wf9a5m75 Oct 26, 2025
f72e10f
fix: Polygon.geodesic = false does not work on Here
wf9a5m75 Oct 26, 2025
5acb3f8
fix: KtLint errors
wf9a5m75 Oct 26, 2025
0ea36e7
feat: Geodesic polygon example
wf9a5m75 Oct 26, 2025
592e88d
wip: drawing circle on maplibre
wf9a5m75 Nov 1, 2025
822c07b
fix: circle does not render on MapLibre
wf9a5m75 Nov 1, 2025
f06eb48
fix: consider polygon's z-index on Here and ArcGIS
wf9a5m75 Nov 1, 2025
713614a
fix: Polygon's geodesic property does not work on ArcGIS
wf9a5m75 Nov 1, 2025
c555d88
Add MapLibre choice for demonstrations
wf9a5m75 Nov 1, 2025
3d2cda8
Add MapLibre choice for demonstrations
wf9a5m75 Nov 1, 2025
c349504
Add MapLibre choice for demonstrations
wf9a5m75 Nov 1, 2025
aea633d
fix: moveCamera does not work on each mapview state
wf9a5m75 Nov 1, 2025
4aff703
fix: Marker does not render on Mapbox
wf9a5m75 Nov 1, 2025
a76acf2
fix: Marker remains in the dragging mode after marker is dropped
wf9a5m75 Nov 1, 2025
27d7233
fix: Can not drag marker on MapLibre.
wf9a5m75 Nov 1, 2025
2572236
fix: icon size is incorrect on MapLibre
wf9a5m75 Nov 2, 2025
3d152b6
fix: Icon cache mechanism is incorrect
wf9a5m75 Nov 2, 2025
7affef4
fix: Icon size is incorrect only at polygon/geodesic example
wf9a5m75 Nov 2, 2025
b4c81ff
refactor: change the comment
wf9a5m75 Nov 2, 2025
e5d4417
fix: camera zoom level on MapLibre does not match with other SDKs
wf9a5m75 Nov 2, 2025
56197f4
fix: remove OnMapViewInitializedHandler because OnMapViewInitializedH…
wf9a5m75 Nov 2, 2025
53dbf8e
fix: remove OnMapViewInitializedHandler because OnMapViewInitializedH…
wf9a5m75 Nov 2, 2025
f8019f4
fix: remove OnMapViewInitializedHandler because OnMapViewInitializedH…
wf9a5m75 Nov 2, 2025
a124e43
refactor: prevent error if layers are already added
wf9a5m75 Nov 2, 2025
e909fa2
fix: the markers of bunch of markers example does not draw the marker…
wf9a5m75 Nov 2, 2025
5839161
fix: some markers in the viewport of MapLibre would be dismiss when v…
wf9a5m75 Nov 2, 2025
e882e25
refactor: improve the performance
wf9a5m75 Nov 2, 2025
4444ec0
feat: apply the same logic of RemoteSpatialMarkerStrategy to NativeRe…
wf9a5m75 Nov 2, 2025
2f2f3fa
feat: Introduce threading technique
wf9a5m75 Nov 2, 2025
73a4cbf
feat: ensure markers are drew on Mapbox and MapLibre
wf9a5m75 Nov 2, 2025
d3333f0
feat: ensure markers are drew on ArcGIS, Google Maps, and HERE
wf9a5m75 Nov 2, 2025
8158fb0
fix: ktLint errors
wf9a5m75 Nov 3, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions .claude/settings.local.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,12 @@
"Bash(for:*)",
"WebFetch(domain:github.com)",
"Bash(grep:*)",
"Bash(rm:*)"
"Bash(rm:*)",
"Bash(cat:*)",
"Read(//Users/masashi/.gradle/caches/**)",
"Bash(xargs jar tf:*)"
],
"deny": [],
"ask": []
}
}
}
14 changes: 8 additions & 6 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,14 @@ val modules: List<String> =
rootDir
.resolve("projects.properties")
.readLines()
.firstOrNull { it.startsWith("modules=") }
?.removePrefix("modules=")
?.split(",")
?.map { it.trim() }
?.filter { it.isNotEmpty() }
?: emptyList()
.dropWhile { !it.startsWith("modules=") }
.takeWhile { it.startsWith("modules=") || it.trim().endsWith(",\\") || it.trim().matches(Regex("^[a-zA-Z0-9-]+$")) }
.joinToString("")
.removePrefix("modules=")
.replace("\\", "")
.split(",")
.map { it.trim() }
.filter { it.isNotEmpty() }

tasks.register("allLintChecks") {
group = "verification"
Expand Down
31 changes: 6 additions & 25 deletions example-app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -139,29 +139,19 @@ android {
dependencies {

implementation(libs.androidx.core.ktx)

implementation(libs.androidx.lifecycle.runtime.ktx)

implementation(libs.androidx.activity.compose)

implementation(libs.androidx.lifecycle.viewmodel.compose)

implementation(platform(libs.androidx.compose.bom))

implementation(libs.androidx.ui)

implementation(libs.androidx.ui.graphics)

implementation(libs.androidx.material3)

implementation(libs.androidx.appcompat)

// Google Maps SDK

implementation(libs.play.services.maps)

// Here Maps SDK

implementation(
fileTree(
mapOf(
Expand All @@ -172,19 +162,18 @@ dependencies {
)

// Mapbox SDK

implementation(libs.mapbox.android)

// ArcGIS Maps for Kotlin - SDK dependency

implementation(libs.arcgis.maps.kotlin)

implementation(platform(libs.arcgis.maps.kotlin.toolkit.bom))

implementation(libs.arcgis.maps.kotlin.toolkit.geoview.compose)

implementation(libs.arcgis.maps.kotlin.toolkit.authentication)

// MapLibre SDK
implementation(libs.maplibre.sdk)
implementation(libs.maplibre.annotation)

// Map Conductor
// implementation("com.mapconductor:core")
// implementation("com.mapconductor:icons")
Expand All @@ -204,6 +193,7 @@ dependencies {
releaseImplementation(libs.mapconductor.here)
releaseImplementation(libs.mapconductor.mapbox)
releaseImplementation(libs.mapconductor.arcgis)
releaseImplementation(libs.mapconductor.maplibre)
releaseImplementation(libs.mapconductor.marker.strategy)
releaseImplementation(libs.mapconductor.marker.native.strategy)

Expand All @@ -213,28 +203,19 @@ dependencies {
debugImplementation(project(":mapconductor-for-here"))
debugImplementation(project(":mapconductor-for-mapbox"))
debugImplementation(project(":mapconductor-for-arcgis"))
debugImplementation(project(":mapconductor-for-maplibre"))
debugImplementation(project(":mapconductor-marker-strategy"))
debugImplementation(project(":mapconductor-marker-native-strategy"))

implementation(libs.androidx.vectordrawable)

testImplementation(libs.junit)

testImplementation(libs.androidx.core)

testImplementation(libs.androidx.junit)

testImplementation(libs.androidx.runner)

androidTestImplementation(libs.androidx.junit)

androidTestImplementation(libs.androidx.espresso.core)

androidTestImplementation(platform(libs.androidx.compose.bom))

androidTestImplementation(libs.androidx.ui.test.junit4)

debugImplementation(libs.androidx.ui.tooling)

debugImplementation(libs.androidx.ui.test.manifest)
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ import com.mapconductor.example.pages.marker.animation.AnimationMapPage
import com.mapconductor.example.pages.marker.icons.MarkerBasicPage
import com.mapconductor.example.pages.marker.postoffice.PostOfficeMapPage
import com.mapconductor.example.pages.polygon.basic.PolygonMapPage
import com.mapconductor.example.pages.polygon.click.PolygonClickPage
import com.mapconductor.example.pages.polygon.geodesic.PolygonGeodesicPage
import com.mapconductor.example.pages.polyline.PolylineClickMapPage
import com.mapconductor.example.pages.polyline.PolylineMapPage
import com.mapconductor.example.pages.startup.StartUpPage
Expand Down Expand Up @@ -134,6 +136,14 @@ fun DemoAppScreen(initPage: String = "map") {
id = "polygon",
title = "Polygon ",
),
SidebarItem(
id = "polygon-click",
title = "Polygon Click",
),
SidebarItem(
id = "polygon-geodesic",
title = "Geodesic polygons",
),
)

AppTheme {
Expand Down Expand Up @@ -226,6 +236,16 @@ fun DemoAppScreen(initPage: String = "map") {
onToggleSidebar = navigationViewModel::toggleSidebar,
)
}
"polygon-click" -> {
PolygonClickPage(
onToggleSidebar = navigationViewModel::toggleSidebar,
)
}
"polygon-geodesic" -> {
PolygonGeodesicPage(
onToggleSidebar = navigationViewModel::toggleSidebar,
)
}
"groundImage" -> {
GroundImageMapPage(
groundImageResources = groundImageResources,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ class MainActivity : ComponentActivity() {

setContent {
DemoAppScreen(
// initPage = "polyline-click",
initPage = "startup",
initPage = "polygon-geodesic",
// initPage = "startup",
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import com.mapconductor.core.groundimage.OnGroundImageEventHandler
import com.mapconductor.core.map.MapViewState
import com.mapconductor.core.map.OnMapEventHandler
import com.mapconductor.core.map.OnMapLoadedHandler
import com.mapconductor.core.map.OnMapViewInitializedHandler
import com.mapconductor.core.marker.MarkerRenderingStrategy
import com.mapconductor.core.marker.OnMarkerEventHandler
import com.mapconductor.core.polygon.OnPolygonEventHandler
Expand All @@ -25,13 +24,15 @@ import com.mapconductor.here.HereViewStateImpl
import com.mapconductor.mapbox.MapboxActualMarker
import com.mapconductor.mapbox.MapboxMapView
import com.mapconductor.mapbox.MapboxViewStateImpl
import com.mapconductor.maplibre.MapLibreActualMarker
import com.mapconductor.maplibre.MapLibreMapView
import com.mapconductor.maplibre.MapLibreViewStateImpl

@Composable
fun MapViewContainer(
modifier: Modifier = Modifier,
renderingStrategy: MarkerRenderingStrategy<*>? = null,
state: MapViewState<*>? = null,
onMapViewInitialized: OnMapViewInitializedHandler? = null,
onMapLoaded: OnMapLoadedHandler? = null,
onMapClick: OnMapEventHandler? = null,
onMarkerClick: OnMarkerEventHandler? = null,
Expand All @@ -44,7 +45,6 @@ fun MapViewContainer(
onPolylineClick: OnPolylineEventHandler? = null,
onPolygonClick: OnPolygonEventHandler? = null,
onGroundImageClick: OnGroundImageEventHandler? = null,
shouldInitialize: Boolean = true, // Allow deferring initialization
content: (@Composable MapViewScope.() -> Unit)? = null,
) {
@Suppress("UNCHECKED_CAST")
Expand All @@ -54,7 +54,6 @@ fun MapViewContainer(
modifier = modifier,
markerRenderingStrategy = renderingStrategy as? MarkerRenderingStrategy<GoogleMapActualMarker>?,
state = state,
onMapViewInitialized = onMapViewInitialized,
onMapLoaded = onMapLoaded,
onMapClick = onMapClick,
onMarkerClick = onMarkerClick,
Expand All @@ -67,7 +66,6 @@ fun MapViewContainer(
onPolylineClick = onPolylineClick,
onPolygonClick = onPolygonClick,
onGroundImageClick = onGroundImageClick,
shouldInitialize = shouldInitialize,
content = content,
)

Expand All @@ -76,7 +74,6 @@ fun MapViewContainer(
modifier = modifier,
markerRenderingStrategy = renderingStrategy as? MarkerRenderingStrategy<HereActualMarker>?,
state = state,
onMapViewInitialized = onMapViewInitialized,
onMapLoaded = onMapLoaded,
onMapClick = onMapClick,
onMarkerClick = onMarkerClick,
Expand All @@ -96,7 +93,6 @@ fun MapViewContainer(
modifier = modifier,
markerRenderingStrategy = renderingStrategy as? MarkerRenderingStrategy<MapboxActualMarker>?,
state = state,
onMapViewInitialized = onMapViewInitialized,
onMapLoaded = onMapLoaded,
onMapClick = onMapClick,
onMarkerClick = onMarkerClick,
Expand All @@ -116,7 +112,25 @@ fun MapViewContainer(
modifier = modifier,
markerRenderingStrategy = renderingStrategy as? MarkerRenderingStrategy<ArcGISActualMarker>?,
state = state,
onMapViewInitialized = onMapViewInitialized,
onMapLoaded = onMapLoaded,
onMapClick = onMapClick,
onMarkerClick = onMarkerClick,
onMarkerDragStart = onMarkerDragStart,
onMarkerDrag = onMarkerDrag,
onMarkerDragEnd = onMarkerDragEnd,
onMarkerAnimateStart = onMarkerAnimateStart,
onMarkerAnimateEnd = onMarkerAnimateEnd,
onCircleClick = onCircleClick,
onPolylineClick = onPolylineClick,
onPolygonClick = onPolygonClick,
content = content,
)

is MapLibreViewStateImpl ->
MapLibreMapView(
modifier = modifier,
markerRenderingStrategy = renderingStrategy as? MarkerRenderingStrategy<MapLibreActualMarker>?,
state = state,
onMapLoaded = onMapLoaded,
onMapClick = onMapClick,
onMarkerClick = onMarkerClick,
Expand Down
Loading
Loading