diff --git a/app/build.gradle b/app/build.gradle index ed738e9..4dcd1cb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,8 +20,8 @@ applicationId "com.casic.detector" minSdkVersion 22 targetSdkVersion 33 - versionCode 5060 - versionName "5.0.6" + versionCode 5070 + versionName "5.0.7" ndk { moduleName "serial_port" diff --git a/app/build.gradle b/app/build.gradle index ed738e9..4dcd1cb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,8 +20,8 @@ applicationId "com.casic.detector" minSdkVersion 22 targetSdkVersion 33 - versionCode 5060 - versionName "5.0.6" + versionCode 5070 + versionName "5.0.7" ndk { moduleName "serial_port" diff --git a/app/src/main/java/com/casic/detector/extensions/AMapLocation.kt b/app/src/main/java/com/casic/detector/extensions/AMapLocation.kt deleted file mode 100644 index 1fbec05..0000000 --- a/app/src/main/java/com/casic/detector/extensions/AMapLocation.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.casic.detector.extensions - -import com.amap.api.location.AMapLocation -import com.amap.api.maps.model.LatLng -import kotlin.math.atan2 - -/** - * 计算两个经纬度之间连线的方位角,因为距离很近(一般是5米内),球面近似为平面 - * A(探测仪所在位置),B(最近的标识器位置),C(辅助点位置) - * 手机坐标轴Y轴反置,所以右下角才是第一象限 - * */ -fun AMapLocation.calculateAngle(target: LatLng): Double { - val radian = atan2((target.latitude - this.latitude), (target.longitude - this.longitude)) - - //弧度转角度,度=弧度×180°/π - return (radian * 180) / Math.PI -} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index ed738e9..4dcd1cb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,8 +20,8 @@ applicationId "com.casic.detector" minSdkVersion 22 targetSdkVersion 33 - versionCode 5060 - versionName "5.0.6" + versionCode 5070 + versionName "5.0.7" ndk { moduleName "serial_port" diff --git a/app/src/main/java/com/casic/detector/extensions/AMapLocation.kt b/app/src/main/java/com/casic/detector/extensions/AMapLocation.kt deleted file mode 100644 index 1fbec05..0000000 --- a/app/src/main/java/com/casic/detector/extensions/AMapLocation.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.casic.detector.extensions - -import com.amap.api.location.AMapLocation -import com.amap.api.maps.model.LatLng -import kotlin.math.atan2 - -/** - * 计算两个经纬度之间连线的方位角,因为距离很近(一般是5米内),球面近似为平面 - * A(探测仪所在位置),B(最近的标识器位置),C(辅助点位置) - * 手机坐标轴Y轴反置,所以右下角才是第一象限 - * */ -fun AMapLocation.calculateAngle(target: LatLng): Double { - val radian = atan2((target.latitude - this.latitude), (target.longitude - this.longitude)) - - //弧度转角度,度=弧度×180°/π - return (radian * 180) / Math.PI -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 55012a7..ef0dcbd 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -49,7 +49,6 @@ import com.casic.detector.databinding.DialogInstallMarkerBinding import com.casic.detector.databinding.DialogSearchMarkerNewBinding import com.casic.detector.extensions.appendDownloadUrl -import com.casic.detector.extensions.calculateAngle import com.casic.detector.extensions.compressImage import com.casic.detector.extensions.createTaskCode import com.casic.detector.extensions.drawCircle @@ -117,6 +116,7 @@ import java.util.Date import java.util.Timer import java.util.TimerTask +import kotlin.math.atan2 class MainActivity : SerialPortActivity(), SensorEventListener, Handler.Callback { @@ -1578,8 +1578,6 @@ override fun onAMapLocationGet(location: AMapLocation?) { val random = result.random() location?.apply { - val time = System.currentTimeMillis().timestampToCompleteDate() - "[$time, ${longitude}, ${latitude}]".writeToFile(createLogFile()) renderDataPoint(this, random) } } @@ -1592,23 +1590,27 @@ * @param testPoint 模拟点 * */ private fun renderDataPoint(location: AMapLocation, testPoint: DoubleArray) { + val longitude = location.longitude + val latitude = location.latitude lifecycleScope.launch(Dispatchers.IO) { val dataPoints = ArrayList() DataBaseManager.get.loadMarkers().forEach { //单位:米。计算出标识器与探测仪(定位点)的距离 val distance = AMapUtils.calculateLineDistance( - LatLng(it.lat.toDouble(), it.lng.toDouble()), - LatLng(location.latitude, location.longitude) + LatLng(it.lat.toDouble(), it.lng.toDouble()), LatLng(latitude, longitude) ) - - if (distance <= LocaleConstant.MAX_DISTANCE) { + val formatDistance = decimalFormat.format(distance).toFloat() + if (formatDistance <= LocaleConstant.MAX_DISTANCE) { //计算出探测仪(定位点)与标识器的方位角 - val angle = location.calculateAngle( - LatLng(it.lat.toDouble(), it.lng.toDouble()) + val angle = atan2( + (it.lat.toDouble() - latitude), (it.lng.toDouble() - longitude) ) + val formatAngle = decimalFormat.format(angle).toDouble() - val formatDistance = decimalFormat.format(distance) - dataPoints.add(RadarScanView.DataPoint(angle, formatDistance.toFloat())) + "$longitude, $latitude,$formatDistance, $formatAngle".writeToFile( + createLogFile() + ) + dataPoints.add(RadarScanView.DataPoint(formatAngle, formatDistance)) } // if (it.markerId == "0008865561" || it.markerId == "0008877280") { @@ -1617,16 +1619,19 @@ // LatLng(testPoint[1], testPoint[0]) // ) // -// if (distance <= LocaleConstant.MAX_DISTANCE) { +// val formatDistance = decimalFormat.format(distance).toFloat() +// if (formatDistance <= LocaleConstant.MAX_DISTANCE) { // //计算出探测仪(定位点)与标识器的方位角 -// val angle = location.calculateAngle( -// LatLng(it.lat.toDouble(), it.lng.toDouble()) +// val angle = atan2( +// (it.lat.toDouble() - testPoint[1]), +// (it.lng.toDouble() - testPoint[0]) // ) +// val formatAngle = decimalFormat.format(angle).toDouble() // -// val formatDistance = decimalFormat.format(distance) -// Log.d(kTag, "${testPoint[1]}, ${testPoint[0]}, $formatDistance, $angle") -// -// dataPoints.add(RadarScanView.DataPoint(angle, formatDistance.toFloat())) +// "${it.markerId}, ${testPoint[0]}, ${testPoint[1]}, $formatDistance, $formatAngle".writeToFile( +// createLogFile() +// ) +// dataPoints.add(RadarScanView.DataPoint(formatAngle, formatDistance)) // } // } } diff --git a/app/build.gradle b/app/build.gradle index ed738e9..4dcd1cb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,8 +20,8 @@ applicationId "com.casic.detector" minSdkVersion 22 targetSdkVersion 33 - versionCode 5060 - versionName "5.0.6" + versionCode 5070 + versionName "5.0.7" ndk { moduleName "serial_port" diff --git a/app/src/main/java/com/casic/detector/extensions/AMapLocation.kt b/app/src/main/java/com/casic/detector/extensions/AMapLocation.kt deleted file mode 100644 index 1fbec05..0000000 --- a/app/src/main/java/com/casic/detector/extensions/AMapLocation.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.casic.detector.extensions - -import com.amap.api.location.AMapLocation -import com.amap.api.maps.model.LatLng -import kotlin.math.atan2 - -/** - * 计算两个经纬度之间连线的方位角,因为距离很近(一般是5米内),球面近似为平面 - * A(探测仪所在位置),B(最近的标识器位置),C(辅助点位置) - * 手机坐标轴Y轴反置,所以右下角才是第一象限 - * */ -fun AMapLocation.calculateAngle(target: LatLng): Double { - val radian = atan2((target.latitude - this.latitude), (target.longitude - this.longitude)) - - //弧度转角度,度=弧度×180°/π - return (radian * 180) / Math.PI -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 55012a7..ef0dcbd 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -49,7 +49,6 @@ import com.casic.detector.databinding.DialogInstallMarkerBinding import com.casic.detector.databinding.DialogSearchMarkerNewBinding import com.casic.detector.extensions.appendDownloadUrl -import com.casic.detector.extensions.calculateAngle import com.casic.detector.extensions.compressImage import com.casic.detector.extensions.createTaskCode import com.casic.detector.extensions.drawCircle @@ -117,6 +116,7 @@ import java.util.Date import java.util.Timer import java.util.TimerTask +import kotlin.math.atan2 class MainActivity : SerialPortActivity(), SensorEventListener, Handler.Callback { @@ -1578,8 +1578,6 @@ override fun onAMapLocationGet(location: AMapLocation?) { val random = result.random() location?.apply { - val time = System.currentTimeMillis().timestampToCompleteDate() - "[$time, ${longitude}, ${latitude}]".writeToFile(createLogFile()) renderDataPoint(this, random) } } @@ -1592,23 +1590,27 @@ * @param testPoint 模拟点 * */ private fun renderDataPoint(location: AMapLocation, testPoint: DoubleArray) { + val longitude = location.longitude + val latitude = location.latitude lifecycleScope.launch(Dispatchers.IO) { val dataPoints = ArrayList() DataBaseManager.get.loadMarkers().forEach { //单位:米。计算出标识器与探测仪(定位点)的距离 val distance = AMapUtils.calculateLineDistance( - LatLng(it.lat.toDouble(), it.lng.toDouble()), - LatLng(location.latitude, location.longitude) + LatLng(it.lat.toDouble(), it.lng.toDouble()), LatLng(latitude, longitude) ) - - if (distance <= LocaleConstant.MAX_DISTANCE) { + val formatDistance = decimalFormat.format(distance).toFloat() + if (formatDistance <= LocaleConstant.MAX_DISTANCE) { //计算出探测仪(定位点)与标识器的方位角 - val angle = location.calculateAngle( - LatLng(it.lat.toDouble(), it.lng.toDouble()) + val angle = atan2( + (it.lat.toDouble() - latitude), (it.lng.toDouble() - longitude) ) + val formatAngle = decimalFormat.format(angle).toDouble() - val formatDistance = decimalFormat.format(distance) - dataPoints.add(RadarScanView.DataPoint(angle, formatDistance.toFloat())) + "$longitude, $latitude,$formatDistance, $formatAngle".writeToFile( + createLogFile() + ) + dataPoints.add(RadarScanView.DataPoint(formatAngle, formatDistance)) } // if (it.markerId == "0008865561" || it.markerId == "0008877280") { @@ -1617,16 +1619,19 @@ // LatLng(testPoint[1], testPoint[0]) // ) // -// if (distance <= LocaleConstant.MAX_DISTANCE) { +// val formatDistance = decimalFormat.format(distance).toFloat() +// if (formatDistance <= LocaleConstant.MAX_DISTANCE) { // //计算出探测仪(定位点)与标识器的方位角 -// val angle = location.calculateAngle( -// LatLng(it.lat.toDouble(), it.lng.toDouble()) +// val angle = atan2( +// (it.lat.toDouble() - testPoint[1]), +// (it.lng.toDouble() - testPoint[0]) // ) +// val formatAngle = decimalFormat.format(angle).toDouble() // -// val formatDistance = decimalFormat.format(distance) -// Log.d(kTag, "${testPoint[1]}, ${testPoint[0]}, $formatDistance, $angle") -// -// dataPoints.add(RadarScanView.DataPoint(angle, formatDistance.toFloat())) +// "${it.markerId}, ${testPoint[0]}, ${testPoint[1]}, $formatDistance, $formatAngle".writeToFile( +// createLogFile() +// ) +// dataPoints.add(RadarScanView.DataPoint(formatAngle, formatDistance)) // } // } } diff --git a/app/src/main/java/com/casic/detector/widgets/RadarScanView.kt b/app/src/main/java/com/casic/detector/widgets/RadarScanView.kt index 9239e06..29be976 100644 --- a/app/src/main/java/com/casic/detector/widgets/RadarScanView.kt +++ b/app/src/main/java/com/casic/detector/widgets/RadarScanView.kt @@ -394,14 +394,12 @@ * dataPoint转为PointF * */ private fun DataPoint.convertPointF(): PointF { - val dataAngle = (this.angle * Math.PI / 180).toFloat() - /** * 距离最大5.5米,表盘四个环,一个环距离1.5米,半径124dp(248px) * */ val dataDistance = (this.distance / LocaleConstant.MAX_DISTANCE) * radius - val x = dataDistance * cos(dataAngle) - val y = dataDistance * sin(dataAngle) + val x = dataDistance * cos(this.angle).toFloat() + val y = dataDistance * sin(this.angle).toFloat() return PointF(x, y) }