Improving edition map

master
Arthur VALIN 2 years ago
parent d2f6389123
commit 4b4f1de6b7

@ -6,39 +6,42 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import org.osmdroid.bonuspack.routing.OSRMRoadManager
import org.osmdroid.views.MapView
import org.osmdroid.util.BoundingBox
import org.osmdroid.util.GeoPoint
import uca.baptistearthur.geocaching.model.RoadTripEntity
import uca.baptistearthur.geocaching.ui.overlay.AddMarkerOverlay
import uca.baptistearthur.geocaching.ui.overlay.EditMarkerOverlay
import uca.baptistearthur.geocaching.ui.overlay.MarkerOverlay
import uca.baptistearthur.geocaching.ui.overlay.EditRoadtripOverlay
import kotlin.math.ln
import kotlin.math.roundToInt
import kotlin.math.sqrt
class EditRoadtripMap : Map() {
companion object{
const val defaultZoomLevel = 10.0
}
class EditRoadtripMap : Map() {
var roadTrip: RoadTripEntity? = null
set(value) {
roadTrip?:
value?.let {
val editMarkerOverlay = EditMarkerOverlay(OSRMRoadManager(context, userAgent), value)
editMarkerOverlay.addPlaces(value.places, map)
map.overlays.add(editMarkerOverlay);
map.controller.setCenter(value.places.first())
addEditMarkerOverlay(value)
getMapParams(value).let{
map.controller.setCenter(it.first)
map.controller.setZoom(it.second)
}
field = value
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
Log.d("GeoMap", "CREATE EDIT MAP")
val view = super.onCreateView(inflater, container, savedInstanceState)
map.controller.setZoom(defaultZoomLevel)
return view
private fun addEditMarkerOverlay(roadTrip: RoadTripEntity){
val editMarkerOverlay = EditMarkerOverlay(OSRMRoadManager(context, userAgent), roadTrip)
editMarkerOverlay.addPlaces(roadTrip.places, map)
map.overlays.add(editMarkerOverlay);
}
private fun getMapParams(roadTrip: RoadTripEntity): Pair<GeoPoint, Double>{
val boundingBox = BoundingBox.fromGeoPoints(roadTrip.places)
val maxDistance = 7000000.0
val logZoom = (defaultZoomLevel - minimumZoomLevel) * ln(boundingBox.diagonalLengthInMeters) / ln(maxDistance)
val zoomLevel = (defaultZoomLevel - logZoom).coerceIn(minimumZoomLevel, defaultZoomLevel)
return Pair(boundingBox.centerWithDateLine, zoomLevel)
}
}

@ -6,7 +6,7 @@ import org.osmdroid.util.GeoPoint
import org.osmdroid.views.MapView
import uca.baptistearthur.geocaching.model.RoadTripEntity
class EditMarkerOverlay(roadManager: RoadManager, val roadTrip: RoadTripEntity) : MarkerOverlay<EditRoadtripOverlay>(roadManager) {
class EditMarkerOverlay(roadManager: RoadManager, var roadTrip: RoadTripEntity) : MarkerOverlay<EditRoadtripOverlay>(roadManager) {
fun addPlaces(geopoints: Collection<GeoPoint>, mapView: MapView)=
geopoints.forEach {

@ -1,6 +1,10 @@
package uca.baptistearthur.geocaching.ui.overlay
import android.app.AlertDialog
import android.content.Context
import android.text.InputFilter
import android.util.Log
import android.widget.EditText
import android.widget.Toast
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelStoreOwner
@ -15,6 +19,7 @@ import uca.baptistearthur.geocaching.model.Place
import uca.baptistearthur.geocaching.model.RoadTripEntity
import uca.baptistearthur.geocaching.viewModels.RoadTripViewModel
import uca.baptistearthur.geocaching.viewModels.RoadTripViewModelFactory
import java.util.*
class EditRoadtripOverlay(points: MutableCollection<PlaceMarker>, val roadTripEntity: RoadTripEntity) : ConfirmationOverlay(points) {
@ -25,13 +30,14 @@ class EditRoadtripOverlay(points: MutableCollection<PlaceMarker>, val roadTripEn
RoadTripViewModel::class.java)
}
override fun confirm(mapView: MapView) {
val places: MutableList<Place> = points.map { Place(it.position.latitude, it.position.longitude) }.toMutableList()
private fun onValidation(mapView: MapView, input: String) {
val places: MutableList<Place> =
points.map { Place(it.position.latitude, it.position.longitude) }.toMutableList()
CoroutineScope(Dispatchers.Main).launch {
places.filter{it.address.displayName==="unknown"}.forEach{ it.initAddress() }
places.filter { it.address.displayName === "unknown" }.forEach { it.initAddress() }
val newRoadTrip = RoadTripEntity(
id = roadTripEntity.id,
name = roadTripEntity.name,
name = input,
date = roadTripEntity.date,
places = places
)
@ -42,7 +48,33 @@ class EditRoadtripOverlay(points: MutableCollection<PlaceMarker>, val roadTripEn
R.string.changesSaved,
Toast.LENGTH_SHORT
).show()
}
}
override fun confirm(mapView: MapView) {
val input = EditText(mapView.context)
input.setText(roadTripEntity.name)
input.filters = arrayOf<InputFilter>(InputFilter.LengthFilter(50))
val dialog = AlertDialog.Builder(mapView.context)
.setTitle(R.string.newRoadtripDialog)
.setView(input)
.setPositiveButton(R.string.confirm) { _, _ ->
val userInput = input.text.toString()
if (userInput.isNotBlank()) {
onValidation(mapView, input.text.toString())
} else {
Toast.makeText(
mapView.context,
R.string.emptyTextError,
Toast.LENGTH_SHORT
).show()
}
}
.setNegativeButton(R.string.cancel) { dialog, _ ->
dialog.cancel()
}
.create()
dialog.show()
}
}
Loading…
Cancel
Save