2024-11-04 17:48:38 -03:00
|
|
|
package com.geeksville.mesh.util
|
|
|
|
|
|
|
|
|
|
import android.graphics.Color
|
|
|
|
|
import android.graphics.Paint
|
2024-11-04 17:52:27 -03:00
|
|
|
import android.graphics.Typeface
|
|
|
|
|
import androidx.compose.ui.unit.Density
|
|
|
|
|
import androidx.compose.ui.unit.dp
|
|
|
|
|
import androidx.compose.ui.unit.sp
|
2024-11-04 17:48:38 -03:00
|
|
|
import org.osmdroid.events.DelayedMapListener
|
|
|
|
|
import org.osmdroid.events.MapListener
|
|
|
|
|
import org.osmdroid.events.ScrollEvent
|
|
|
|
|
import org.osmdroid.events.ZoomEvent
|
|
|
|
|
import org.osmdroid.views.MapView
|
|
|
|
|
import org.osmdroid.views.overlay.CopyrightOverlay
|
2024-11-04 17:52:27 -03:00
|
|
|
import org.osmdroid.views.overlay.ScaleBarOverlay
|
2024-11-04 17:48:38 -03:00
|
|
|
import org.osmdroid.views.overlay.gridlines.LatLonGridlineOverlay2
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Adds copyright to map depending on what source is showing
|
|
|
|
|
*/
|
|
|
|
|
fun MapView.addCopyright() {
|
|
|
|
|
if (overlays.none { it is CopyrightOverlay }) {
|
|
|
|
|
val copyrightNotice: String = tileProvider.tileSource.copyrightNotice ?: return
|
|
|
|
|
val copyrightOverlay = CopyrightOverlay(context)
|
|
|
|
|
copyrightOverlay.setCopyrightNotice(copyrightNotice)
|
|
|
|
|
overlays.add(copyrightOverlay)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create LatLong Grid line overlay
|
|
|
|
|
* @param enabled: turn on/off gridlines
|
|
|
|
|
*/
|
|
|
|
|
fun MapView.createLatLongGrid(enabled: Boolean) {
|
|
|
|
|
val latLongGridOverlay = LatLonGridlineOverlay2()
|
|
|
|
|
latLongGridOverlay.isEnabled = enabled
|
|
|
|
|
if (latLongGridOverlay.isEnabled) {
|
|
|
|
|
val textPaint = Paint().apply {
|
|
|
|
|
textSize = 40f
|
|
|
|
|
color = Color.GRAY
|
|
|
|
|
isAntiAlias = true
|
|
|
|
|
isFakeBoldText = true
|
|
|
|
|
textAlign = Paint.Align.CENTER
|
|
|
|
|
}
|
|
|
|
|
latLongGridOverlay.textPaint = textPaint
|
|
|
|
|
latLongGridOverlay.setBackgroundColor(Color.TRANSPARENT)
|
|
|
|
|
latLongGridOverlay.setLineWidth(3.0f)
|
|
|
|
|
latLongGridOverlay.setLineColor(Color.GRAY)
|
|
|
|
|
overlays.add(latLongGridOverlay)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-04 17:52:27 -03:00
|
|
|
fun MapView.addScaleBarOverlay(density: Density) {
|
|
|
|
|
if (overlays.none { it is ScaleBarOverlay }) {
|
|
|
|
|
val scaleBarOverlay = ScaleBarOverlay(this).apply {
|
|
|
|
|
setAlignBottom(true)
|
|
|
|
|
with(density) {
|
|
|
|
|
setScaleBarOffset(15.dp.toPx().toInt(), 40.dp.toPx().toInt())
|
|
|
|
|
setTextSize(12.sp.toPx())
|
|
|
|
|
}
|
|
|
|
|
textPaint.apply {
|
|
|
|
|
isAntiAlias = true
|
|
|
|
|
typeface = Typeface.DEFAULT_BOLD
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
overlays.add(scaleBarOverlay)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-04 17:48:38 -03:00
|
|
|
private const val INACTIVITY_DELAY_MILLIS = 500L
|
|
|
|
|
fun MapView.addMapEventListener(onEvent: () -> Unit) {
|
|
|
|
|
addMapListener(DelayedMapListener(object : MapListener {
|
|
|
|
|
override fun onScroll(event: ScrollEvent): Boolean {
|
|
|
|
|
onEvent()
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override fun onZoom(event: ZoomEvent): Boolean {
|
|
|
|
|
onEvent()
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
}, INACTIVITY_DELAY_MILLIS))
|
|
|
|
|
}
|