Center the map on collars when possible
This commit is contained in:
parent
7716d77f25
commit
8bf4f513b7
|
@ -1,18 +1,14 @@
|
|||
package com.danilafe.fencelessgrazing
|
||||
|
||||
import android.app.Application
|
||||
import android.graphics.Color
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import com.android.volley.Request
|
||||
import com.android.volley.RequestQueue
|
||||
import com.android.volley.Response
|
||||
import com.android.volley.toolbox.Volley
|
||||
import com.danilafe.fencelessgrazing.model.CollarPos
|
||||
import com.danilafe.fencelessgrazing.model.CollarSummary
|
||||
import com.danilafe.fencelessgrazing.model.Polygon
|
||||
import com.danilafe.fencelessgrazing.requests.CollarDetailRequest
|
||||
import com.danilafe.fencelessgrazing.requests.CollarHistoryRequest
|
||||
|
@ -20,9 +16,7 @@ import org.osmdroid.util.GeoPoint
|
|||
import org.osmdroid.views.MapView
|
||||
import org.osmdroid.views.overlay.Marker
|
||||
import org.osmdroid.views.overlay.Polyline
|
||||
import java.sql.Time
|
||||
import java.util.*
|
||||
import kotlin.collections.ArrayList
|
||||
import kotlin.concurrent.timerTask
|
||||
|
||||
class CollarDetailActivity : AppCompatActivity() {
|
||||
|
@ -34,6 +28,7 @@ class CollarDetailActivity : AppCompatActivity() {
|
|||
private lateinit var queue: RequestQueue
|
||||
private var collarId: Int = -1
|
||||
|
||||
private var centerSet: Boolean = false
|
||||
private lateinit var map: MapView
|
||||
|
||||
private var refreshTimer = Timer()
|
||||
|
@ -67,6 +62,7 @@ class CollarDetailActivity : AppCompatActivity() {
|
|||
queue = Volley.newRequestQueue(this)
|
||||
|
||||
map = findViewById(R.id.detailMap)
|
||||
map.controller.setZoom(9.5)
|
||||
mapPolygon = org.osmdroid.views.overlay.Polygon(map)
|
||||
mapMarker = Marker(map)
|
||||
mapPolyline = Polyline(map)
|
||||
|
@ -127,11 +123,15 @@ class CollarDetailActivity : AppCompatActivity() {
|
|||
|
||||
private fun updateAnimalHistory(points : List<GeoPoint>) {
|
||||
val currentPoint = points.first()
|
||||
mapMarker.position = currentPoint
|
||||
mapPolyline.setPoints(points)
|
||||
collarPos.text = getString(R.string.collarSummaryLocation, currentPoint.longitude, currentPoint.latitude)
|
||||
if(!map.overlays.contains(mapMarker)) map.overlays.add(mapMarker)
|
||||
if(!map.overlays.contains(mapPolyline)) map.overlays.add(mapPolyline)
|
||||
mapMarker.position = currentPoint
|
||||
mapPolyline.setPoints(points)
|
||||
if(!centerSet) {
|
||||
centerSet = true
|
||||
map.controller.setCenter(currentPoint)
|
||||
}
|
||||
map.invalidate()
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@ package com.danilafe.fencelessgrazing
|
|||
import android.content.Intent
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.widget.Toast
|
||||
import androidx.preference.PreferenceManager
|
||||
import androidx.recyclerview.widget.DividerItemDecoration
|
||||
|
@ -34,6 +33,7 @@ class CollarListActivity : AppCompatActivity() {
|
|||
private lateinit var queue: RequestQueue
|
||||
|
||||
// The OpenStreetMap map.
|
||||
private var centerSet: Boolean = false
|
||||
private lateinit var map: MapView
|
||||
private val collarOverlays: MutableMap<Int, Marker> = mutableMapOf()
|
||||
|
||||
|
@ -51,6 +51,7 @@ class CollarListActivity : AppCompatActivity() {
|
|||
|
||||
token = intent.getStringExtra("token")!!
|
||||
map.setTileSource(TileSourceFactory.MAPNIK)
|
||||
map.controller.setZoom(9.5)
|
||||
queue = Volley.newRequestQueue(this)
|
||||
|
||||
setupCollarList()
|
||||
|
@ -76,7 +77,7 @@ class CollarListActivity : AppCompatActivity() {
|
|||
summaries.clear()
|
||||
summaries.addAll(it)
|
||||
summaryAdapter.notifyDataSetChanged()
|
||||
updateMapOverlay()
|
||||
updateMap()
|
||||
},
|
||||
Response.ErrorListener {
|
||||
Toast.makeText(this, "Failed to retrieve collar list!", Toast.LENGTH_SHORT).show()
|
||||
|
@ -111,6 +112,20 @@ class CollarListActivity : AppCompatActivity() {
|
|||
collarList.addItemDecoration(DividerItemDecoration(collarList.context, layoutManager.orientation))
|
||||
}
|
||||
|
||||
private fun updateMap() {
|
||||
updateMapCenter()
|
||||
updateMapOverlay()
|
||||
}
|
||||
|
||||
private fun updateMapCenter() {
|
||||
if(centerSet) return
|
||||
|
||||
centerSet = true
|
||||
val averageLongitude = summaries.map { it.pos.longitude.toDouble() }.average()
|
||||
val averageLatitude = summaries.map { it.pos.latitude.toDouble() }.average()
|
||||
map.controller.setCenter(GeoPoint(averageLongitude, averageLatitude))
|
||||
}
|
||||
|
||||
private fun updateMapOverlay() {
|
||||
val currentSet = mutableSetOf<Int>()
|
||||
summaries.forEach {
|
||||
|
@ -132,6 +147,7 @@ class CollarListActivity : AppCompatActivity() {
|
|||
collarOverlays.remove(it)
|
||||
}
|
||||
}
|
||||
|
||||
map.invalidate()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user