Skip to content

Commit 692cfff

Browse files
committed
Switch map distance layer to geojson renderer
Signed-off-by: Kyle Corry <kylecorry31@gmail.com>
1 parent 76ac28a commit 692cfff

1 file changed

Lines changed: 52 additions & 56 deletions

File tree

app/src/main/java/com/kylecorry/trail_sense/tools/photo_maps/ui/MapDistanceLayer.kt

Lines changed: 52 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,35 @@ import android.graphics.Color
44
import androidx.annotation.ColorInt
55
import com.kylecorry.andromeda.canvas.ICanvasDrawer
66
import com.kylecorry.andromeda.core.units.PixelCoordinate
7+
import com.kylecorry.andromeda.geojson.GeoJsonFeature
8+
import com.kylecorry.andromeda.geojson.GeoJsonFeatureCollection
9+
import com.kylecorry.andromeda.geojson.GeoJsonPoint
710
import com.kylecorry.sol.units.Coordinate
8-
import com.kylecorry.trail_sense.tools.beacons.domain.Beacon
9-
import com.kylecorry.trail_sense.tools.navigation.ui.MappablePath
10-
import com.kylecorry.trail_sense.tools.beacons.map_layers.LegacyBeaconLayer
11+
import com.kylecorry.trail_sense.shared.extensions.lineString
12+
import com.kylecorry.trail_sense.shared.extensions.point
1113
import com.kylecorry.trail_sense.shared.map_layers.ui.layers.ILayer
1214
import com.kylecorry.trail_sense.shared.map_layers.ui.layers.IMapView
13-
import com.kylecorry.trail_sense.tools.paths.map_layers.LegacyPathLayer
15+
import com.kylecorry.trail_sense.shared.map_layers.ui.layers.geojson.GeoJsonRenderer
1416
import com.kylecorry.trail_sense.tools.paths.domain.LineStyle
1517

1618
class MapDistanceLayer(private val onPathChanged: (points: List<Coordinate>) -> Unit = {}) :
1719
ILayer {
1820

19-
private val pointLayer = LegacyBeaconLayer {
20-
if (!isEnabled) {
21-
return@LegacyBeaconLayer false
22-
}
23-
add(it.coordinate)
24-
true
25-
}
26-
private val pathLayer = LegacyPathLayer()
21+
private val renderer = GeoJsonRenderer()
2722
private var points = mutableListOf<Coordinate>()
23+
private var pathColor = Color.BLACK
24+
private var outlineColor = Color.WHITE
2825

2926
init {
30-
pathLayer.setShouldRenderWithDrawLines(true)
27+
renderer.setOnClickListener {
28+
val geometry = it.geometry
29+
if (geometry is GeoJsonPoint) {
30+
geometry.point?.coordinate?.let { point -> add(point) }
31+
true
32+
} else {
33+
false
34+
}
35+
}
3136
}
3237

3338
var isEnabled = true
@@ -36,15 +41,14 @@ class MapDistanceLayer(private val onPathChanged: (points: List<Coordinate>) ->
3641
clear()
3742
}
3843

39-
private var pathColor: Int = Color.BLACK
40-
4144
fun setPathColor(@ColorInt color: Int) {
4245
pathColor = color
4346
updateLayers()
4447
}
4548

4649
fun setOutlineColor(@ColorInt color: Int) {
47-
pointLayer.setOutlineColor(color)
50+
outlineColor = color
51+
updateLayers()
4852
}
4953

5054
fun add(location: Coordinate) {
@@ -78,36 +82,26 @@ class MapDistanceLayer(private val onPathChanged: (points: List<Coordinate>) ->
7882
if (!isEnabled) {
7983
return
8084
}
81-
82-
pathLayer.draw(drawer, map)
83-
pointLayer.draw(drawer, map)
85+
renderer.draw(drawer, map)
8486
}
8587

8688
override fun drawOverlay(
8789
drawer: ICanvasDrawer,
8890
map: IMapView
8991
) {
90-
if (!isEnabled) {
91-
return
92-
}
93-
94-
pathLayer.drawOverlay(drawer, map)
95-
pointLayer.drawOverlay(drawer, map)
92+
// Do nothing
9693
}
9794

9895
override fun invalidate() {
99-
pointLayer.invalidate()
100-
pathLayer.invalidate()
96+
renderer.invalidate()
10197
}
10298

10399
override fun onClick(drawer: ICanvasDrawer, map: IMapView, pixel: PixelCoordinate): Boolean {
104100
if (!isEnabled) {
105101
return false
106102
}
107103

108-
val wasPointClicked = pointLayer.onClick(drawer, map, pixel)
109-
110-
if (wasPointClicked) {
104+
if (renderer.onClick(drawer, map, pixel)) {
111105
return true
112106
}
113107

@@ -116,33 +110,35 @@ class MapDistanceLayer(private val onPathChanged: (points: List<Coordinate>) ->
116110
}
117111

118112
private fun updateLayers() {
119-
pointLayer.setBeacons(getBeacons())
120-
pathLayer.setPaths(listOf(getPath()))
121-
}
113+
val features = mutableListOf<GeoJsonFeature>()
122114

123-
private fun getPath(): MappablePath {
124-
return MappablePath(
125-
0,
126-
getBeacons(),
127-
pathColor,
128-
LineStyle.Solid
129-
)
130-
}
131-
132-
private fun getBeacons(): List<Beacon> {
133-
return points.mapIndexed { index, coordinate ->
134-
Beacon(
135-
index.toLong(),
136-
"",
137-
coordinate,
138-
color = pathColor,
139-
temporary = true
140-
)
115+
if (points.isNotEmpty()) {
116+
// Path
117+
if (points.size > 1) {
118+
features.add(
119+
GeoJsonFeature.lineString(
120+
points,
121+
color = pathColor,
122+
lineStyle = LineStyle.Solid
123+
)
124+
)
125+
}
126+
127+
// Points
128+
points.forEach {
129+
features.add(
130+
GeoJsonFeature.point(
131+
it,
132+
color = pathColor,
133+
strokeColor = outlineColor,
134+
isClickable = true
135+
)
136+
)
137+
}
141138
}
142-
}
143139

144-
private var _percentOpacity: Float = 1f
140+
renderer.setGeoJsonObject(GeoJsonFeatureCollection(features))
141+
}
145142

146-
override val percentOpacity: Float
147-
get() = _percentOpacity
148-
}
143+
override var percentOpacity: Float = 1f
144+
}

0 commit comments

Comments
 (0)