Skip to content

Introduce GroundImage, and refactor architecture - #60

Merged
wf9a5m75 merged 51 commits into
mainfrom
ground_overlay
Sep 5, 2025
Merged

Introduce GroundImage, and refactor architecture#60
wf9a5m75 merged 51 commits into
mainfrom
ground_overlay

Conversation

@wf9a5m75

@wf9a5m75 wf9a5m75 commented Sep 4, 2025

Copy link
Copy Markdown
Contributor
  • Implement comprehensive GroundOverlay/GroundImage support for Google Maps
  • Add unified overlay architecture with abstract controller pattern
  • Create interactive demo with opacity controls and image swapping functionality
  • Refactor architecture to support polygons, polylines, and ground overlays consistently

Key Features

  • GroundImage: Interactive ground overlay support with bounds manipulation
  • Unified Architecture: Abstract overlay controllers for consistent cross-provider implementation
  • Interactive Demo: Touch-to-swap images, opacity slider controls, draggable boundary markers
  • Provider Coverage: Full implementation across Google Maps, Mapbox, HERE Maps, and ArcGIS

Implementation Details

  • Added GroundImageState and GroundImageController abstractions
  • Implemented provider-specific ground overlay renderers
  • Enhanced example app with ground overlay demo page
  • Updated feature matrix in README to reflect polyline completion
  • Improved overlay management with spatial indexing and bounds detection
  • Update the README.md

KouTsukigase and others added 30 commits August 2, 2025 22:48
…ers are not yet linked with bounds, but committing as instructed.
- Extract abstract marker controller and render interfaces
- Replace concrete MarkerController with AbstractMarkerController
- Add provider-specific marker controller implementations for all map SDKs
- Rename MapViewState files to *Impl.kt for consistency
- Remove deprecated marker implementation files
- Create AbstractPolylineController.kt with unified controller logic
- Create AbstractPolylineOverlayRenderer.kt as base renderer class
- Implement provider-specific controllers for Google Maps, Mapbox, HERE, and ArcGIS
- Replace overlay manager pattern with controller architecture
- Remove deprecated polyline renderer implementations
- Update all MapViewController classes to use new controller pattern
Add fill opacity and stroke width sliders to polygon and circle examples,
refactor ViewModels to use remember pattern, and improve component state management
Standardizes all overlay types (circles, polygons, polylines, ground images) to use the new overlay renderer pattern across all map providers, improving consistency and maintainability.
# Conflicts:
#	README.md
#	example-app/src/main/java/com/mapconductor/example/DemoAppScreen.kt
#	example-app/src/main/java/com/mapconductor/example/MapViewContainer.kt
#	example-app/src/main/java/com/mapconductor/example/navigation/NavigationViewModel.kt
#	example-app/src/main/java/com/mapconductor/example/pages/animation/AnimationMapPage.kt
#	example-app/src/main/java/com/mapconductor/example/pages/animation/AnimationPageViewModel.kt
#	example-app/src/main/java/com/mapconductor/example/pages/circle/CircleMapComponent.kt
#	example-app/src/main/java/com/mapconductor/example/pages/groundimage/GroundImageMapPage.kt
#	example-app/src/main/java/com/mapconductor/example/pages/mapDesign/MapDesignMapComponent.kt
#	example-app/src/main/java/com/mapconductor/example/pages/mapDesign/MapDesignMapPage.kt
#	example-app/src/main/java/com/mapconductor/example/pages/mapDesign/MapDesignPageViewModel.kt
#	mapconductor-core/src/main/java/com/mapconductor/core/OverlayProvider.kt
#	mapconductor-core/src/main/java/com/mapconductor/core/controller/MapViewController.kt
#	mapconductor-core/src/main/java/com/mapconductor/core/groundimage/GroundImage.kt
#	mapconductor-core/src/main/java/com/mapconductor/core/groundimage/GroundImageController.kt
#	mapconductor-core/src/main/java/com/mapconductor/core/groundimage/GroundImageOverlay.kt
#	mapconductor-core/src/main/java/com/mapconductor/core/map/MapViewBase.kt
#	mapconductor-core/src/main/java/com/mapconductor/core/map/MapViewState.kt
#	mapconductor-core/src/main/java/com/mapconductor/core/marker/MarkerRenderer.kt
#	mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapView.kt
#	mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapViewController.kt
#	mapconductor-for-arcgis/src/main/java/com/mapconductor/arcgis/ArcGISMapViewStateImpl.kt
#	mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapTypeAlias.kt
#	mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapView.kt
#	mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewController.kt
#	mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewControllerStore.kt
#	mapconductor-for-googlemaps/src/main/java/com/mapconductor/googlemaps/GoogleMapViewStateImpl.kt
#	mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapView.kt
#	mapconductor-for-here/src/main/java/com/mapconductor/here/HereMapViewController.kt
#	mapconductor-for-here/src/main/java/com/mapconductor/here/HereViewStateImpl.kt
#	mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapView.kt
#	mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxMapViewController.kt
#	mapconductor-for-mapbox/src/main/java/com/mapconductor/mapbox/MapboxViewStateImpl.kt
@wf9a5m75
wf9a5m75 merged commit fb82477 into main Sep 5, 2025
1 check failed
@wf9a5m75
wf9a5m75 deleted the ground_overlay branch September 5, 2025 17:28
wf9a5m75 added a commit that referenced this pull request Nov 28, 2025
* TempSave

* TempSave3

* Resolve merge conflicts.

* WIP: GroundImage bounds change detection in progress.

* WIP: GroundImage rendered; modification handling not yet done.

* Add support for swapping GroundImage (Google Maps API GroundOverlay) image on touch event

* Impliment edit opacity slider'.

* update README.md

* Changes groundImageState.opacity following the slider value

* Initial implementation of GroundImage (GroundOverlay). NE and SW markers are not yet linked with bounds, but committing as instructed.

* WIP: GroundImage feature implementation. Known issue: recomposition does not occur, committing current state.

* Fix: GroundImage does not update by following markers

* Fix: GeoRectBounds.extend is incorrect

* Update: Marker labels based on the relative positions

* Fix: ktLint errors

* Use LaunchedEffect instead of SideEffect

* Fix: crash the app on displaying maps (except Google Maps)

* Update: GroundImage is now selectable by controller

* Rename: position property to clicked of GroundImageEvent class

* Remove generic type from GroundImageCapable

* Remove unused interface

* Small refactoring

* Refactor marker architecture to abstract pattern

- Extract abstract marker controller and render interfaces
- Replace concrete MarkerController with AbstractMarkerController
- Add provider-specific marker controller implementations for all map SDKs
- Rename MapViewState files to *Impl.kt for consistency
- Remove deprecated marker implementation files

* Refactor polyline architecture to abstract controller pattern

- Create AbstractPolylineController.kt with unified controller logic
- Create AbstractPolylineOverlayRenderer.kt as base renderer class
- Implement provider-specific controllers for Google Maps, Mapbox, HERE, and ArcGIS
- Replace overlay manager pattern with controller architecture
- Remove deprecated polyline renderer implementations
- Update all MapViewController classes to use new controller pattern

* Small refactoring

* wip: refactoring for polygon

* wip: refactoring for polygon

* wip: implementing polygon

* wip: PolygonController

* wip: implementing PolygonOverlayManager for Mapbox

* wip: refactoring polygon

* wip:reimplement Polygon for Mapbox

* wip: enhance polygon and circle UI with interactive controls

Add fill opacity and stroke width sliders to polygon and circle examples,
refactor ViewModels to use remember pattern, and improve component state management

* Fix: marker.icon.scale property does not work on ArcGIS and Google Maps SDKs

* Fix: KtLint errors

* Fix: Polyline.strokeWidth is incorrect on Mapbox SDK

* create marker icon demo

* fix: The polyline in the polyline example does not update when the example markers are dragged.

* wip:fixing the flyTo demo

* Fix: map.flyTo demo does not work

* Use Android-NDK27 for mapbox
https://docs.mapbox.com/android/ja/maps/guides/#ndk-27

* Refactor overlay architecture to use unified overlay pattern

Standardizes all overlay types (circles, polygons, polylines, ground images) to use the new overlay renderer pattern across all map providers, improving consistency and maintainability.

* add: firebase app distribution dependencies

* merge: main branch into ground_overlay branch

---------

Co-authored-by: KouTsukigase <kou.tsukigase@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants