we now show real distances in the GUI

pull/8/head
geeksville 2020-02-17 15:03:34 -08:00
rodzic 3b89abe1ef
commit 6f39ba1331
4 zmienionych plików z 37 dodań i 4 usunięć

Wyświetl plik

@ -2,6 +2,8 @@ package com.geeksville.mesh
import android.os.Parcel
import android.os.Parcelable
import com.geeksville.mesh.ui.bearing
import com.geeksville.mesh.ui.latLongToMeter
// model objects that directly map to the corresponding protobufs
@ -44,6 +46,12 @@ data class Position(val latitude: Double, val longitude: Double, val altitude: I
) {
}
/// @return distance in meters to some other node (or null if unknown)
fun distance(o: Position) = latLongToMeter(latitude, longitude, o.latitude, o.longitude)
/// @return bearing to the other position in degrees
fun bearing(o: Position) = bearing(latitude, longitude, o.latitude, o.longitude)
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeDouble(latitude)
parcel.writeDouble(longitude)
@ -80,6 +88,24 @@ data class NodeInfo(
) {
}
/// @return distance in meters to some other node (or null if unknown)
fun distance(o: NodeInfo?): Double? {
val p = position
val op = o?.position
return if (p != null && op != null)
p.distance(op)
else
null
}
/// @return a nice human readable string for the distance, or null for unknown
fun distanceStr(o: NodeInfo?) = distance(o)?.let { dist ->
if (dist < 1000)
"%.0f m".format(dist)
else
"%.1f km".format(dist / 1000)
}
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeInt(num)
parcel.writeParcelable(user, flags)

Wyświetl plik

@ -96,7 +96,10 @@ fun addDistance(
return doubleArrayOf(lat + dLat, longitude + dLong)
}
fun LatLongToMeter(
/**
* @return distance in meters along the surface of the earth (ish)
*/
fun latLongToMeter(
lat_a: Double,
lng_a: Double,
lat_b: Double,

Wyświetl plik

@ -36,7 +36,7 @@ val TimestampEmphasis = object : Emphasis {
@Composable
fun MessageCard(msg: TextMessage, modifier: Modifier = Modifier.None) {
Row(modifier = modifier) {
UserIcon(null)
UserIcon(NodeDB.nodes.value[msg.from])
Column(modifier = LayoutPadding(left = 12.dp)) {
Row {

Wyświetl plik

@ -9,6 +9,7 @@ import androidx.ui.material.MaterialTheme
import androidx.ui.tooling.preview.Preview
import com.geeksville.mesh.NodeInfo
import com.geeksville.mesh.R
import com.geeksville.mesh.model.NodeDB
/**
* Show the user icon for a particular user with distance from the operator and a small pointer
@ -22,7 +23,10 @@ fun UserIcon(user: NodeInfo? = null, modifier: Modifier = Modifier.None) {
tint = palette.onSecondary,
modifier = LayoutGravity.Center
)
Text("1.2 km", modifier = LayoutGravity.Center)
val ourNodeInfo = NodeDB.ourNodeInfo
val distance = ourNodeInfo.distanceStr(user)
if (distance != null)
Text(distance, modifier = LayoutGravity.Center)
}
}
@ -31,6 +35,6 @@ fun UserIcon(user: NodeInfo? = null, modifier: Modifier = Modifier.None) {
fun previewUserIcon() {
// another bug? It seems modaldrawerlayout not yet supported in preview
MaterialTheme(colors = palette) {
UserIcon()
UserIcon(NodeDB.testNodes[1])
}
}