增加10S自动定位及指北模式
This commit is contained in:
parent
3caaa57e20
commit
f40f1a1881
@ -103,6 +103,11 @@ class Constant {
|
||||
*/
|
||||
var AUTO_LOCATION = false
|
||||
|
||||
/**
|
||||
* 地图视角是否锁定
|
||||
*/
|
||||
var MapRotateEnable = false
|
||||
|
||||
var IS_VIDEO_SPEED by kotlin.properties.Delegates.notNull<Boolean>()
|
||||
|
||||
const val message_status_late = "预约,待发送"
|
||||
|
@ -325,12 +325,18 @@ class MainActivity : BaseActivity() {
|
||||
7, RoundingMode.HALF_UP
|
||||
)
|
||||
},${BigDecimal(it.latitude).setScale(7, RoundingMode.HALF_UP)}"
|
||||
viewModel.startAutoLocationTimer()
|
||||
binding.mainActivityLocation.setImageResource(R.drawable.icon_location)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("qj", "异常 $e")
|
||||
}
|
||||
}
|
||||
|
||||
viewModel.liveDataAutoLocation.observe(this){
|
||||
if(it==true){
|
||||
onClickLocation()
|
||||
}
|
||||
}
|
||||
viewModel.liveDataSignMoreInfo.observe(this) {
|
||||
val fragment =
|
||||
supportFragmentManager.findFragmentById(R.id.main_activity_sign_more_info_fragment)
|
||||
@ -1129,6 +1135,14 @@ class MainActivity : BaseActivity() {
|
||||
rightController.navigate(R.id.NoteFragment)
|
||||
}
|
||||
|
||||
/**
|
||||
* 点击定位按钮
|
||||
*/
|
||||
fun onClickLocation() {
|
||||
binding.mainActivityLocation.setImageResource(R.drawable.icon_location_north)
|
||||
viewModel.onClickLocationButton()
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增评测link
|
||||
*/
|
||||
|
@ -51,7 +51,6 @@ import io.realm.RealmSet
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.flow.flow
|
||||
import kotlinx.coroutines.launch
|
||||
@ -132,6 +131,11 @@ class MainViewModel @Inject constructor(
|
||||
*/
|
||||
val liveDataCenterPoint = MutableLiveData<MapPosition>()
|
||||
|
||||
/**
|
||||
* 是否自动定位
|
||||
*/
|
||||
val liveDataAutoLocation = MutableLiveData<Boolean>()
|
||||
|
||||
// var testPoint = GeoPoint(0, 0)
|
||||
|
||||
//uuid标识,用于记录轨迹组
|
||||
@ -209,6 +213,11 @@ class MainViewModel @Inject constructor(
|
||||
|
||||
private var timer: Timer? = null
|
||||
|
||||
//自动定位
|
||||
private var autoLocationTimer: Timer? = null
|
||||
|
||||
private var disAutoLocationTime: Long = 10000
|
||||
|
||||
private var disTime: Long = 1000
|
||||
|
||||
private var currentMapZoomLevel: Int = 0
|
||||
@ -227,6 +236,7 @@ class MainViewModel @Inject constructor(
|
||||
when (e) {
|
||||
Map.SCALE_EVENT, Map.MOVE_EVENT, Map.ROTATE_EVENT -> liveDataCenterPoint.value =
|
||||
mapPosition
|
||||
//Map.CLEAR_EVENT->startAutoLocationTimer()
|
||||
}
|
||||
|
||||
currentMapZoomLevel = mapController.mMapView.vtmMap.mapPosition.zoomLevel
|
||||
@ -652,12 +662,6 @@ class MainViewModel @Inject constructor(
|
||||
)
|
||||
)
|
||||
}
|
||||
withContext(Dispatchers.Main) {
|
||||
if (Constant.AUTO_LOCATION) {
|
||||
mapController.mMapView.vtmMap.animator()
|
||||
.animateTo(GeoPoint(location.latitude, location.longitude))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//显示轨迹图层
|
||||
@ -674,7 +678,7 @@ class MainViewModel @Inject constructor(
|
||||
point.longitude,
|
||||
point.latitude
|
||||
),
|
||||
buffer = 2.0, catchAll = false,
|
||||
buffer = 2.4, catchAll = false,
|
||||
)
|
||||
//增加道路线过滤原则
|
||||
val filterResult = itemList.filter {
|
||||
@ -887,6 +891,9 @@ class MainViewModel @Inject constructor(
|
||||
* 点击我的位置,回到我的位置
|
||||
*/
|
||||
fun onClickLocationButton() {
|
||||
val mapPosition: MapPosition = mapController.mMapView.vtmMap.getMapPosition()
|
||||
mapPosition.setBearing(0f) // 锁定角度,自动将地图旋转到正北方向
|
||||
mapController.mMapView.vtmMap.setMapPosition(mapPosition)
|
||||
mapController.locationLayerHandler.animateToCurrentPosition()
|
||||
}
|
||||
|
||||
@ -1390,6 +1397,27 @@ class MainViewModel @Inject constructor(
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 开启自动定位
|
||||
*/
|
||||
fun startAutoLocationTimer(){
|
||||
if (autoLocationTimer != null) {
|
||||
cancelAutoLocation()
|
||||
}
|
||||
autoLocationTimer = fixedRateTimer("", false, disAutoLocationTime, disAutoLocationTime) {
|
||||
liveDataAutoLocation.postValue(true)
|
||||
Log.e("qj","自动定位开始执行")
|
||||
startAutoLocationTimer()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 结束自动定位
|
||||
*/
|
||||
fun cancelAutoLocation() {
|
||||
autoLocationTimer?.cancel()
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启测量工具
|
||||
*/
|
||||
|
@ -10,6 +10,8 @@ import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.Toast
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.core.view.forEach
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import com.blankj.utilcode.util.ToastUtils
|
||||
@ -26,24 +28,28 @@ import com.navinfo.omqs.databinding.FragmentPersonalCenterBinding
|
||||
import com.navinfo.omqs.db.ImportOMDBHelper
|
||||
import com.navinfo.omqs.hilt.ImportOMDBHiltFactory
|
||||
import com.navinfo.omqs.tools.CoroutineUtils
|
||||
import com.navinfo.omqs.ui.fragment.BaseFragment
|
||||
import com.navinfo.omqs.ui.activity.map.MainViewModel
|
||||
import com.navinfo.omqs.ui.activity.scan.QrCodeActivity
|
||||
import com.navinfo.omqs.ui.fragment.BaseFragment
|
||||
import com.permissionx.guolindev.PermissionX
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import org.oscim.core.GeoPoint
|
||||
import org.oscim.core.MapPosition
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* 个人中心
|
||||
*/
|
||||
@AndroidEntryPoint
|
||||
class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?)? = null) : BaseFragment(),
|
||||
class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?)? = null) :
|
||||
BaseFragment(),
|
||||
FSAFActivityCallbacks {
|
||||
|
||||
private var _binding: FragmentPersonalCenterBinding? = null
|
||||
private val binding get() = _binding!!
|
||||
private val fileChooser by lazy { FileChooser(requireContext()) }
|
||||
private val viewModel by lazy { viewModels<PersonalCenterViewModel>().value }
|
||||
private val viewMainModel by activityViewModels<MainViewModel>()
|
||||
|
||||
@Inject
|
||||
lateinit var importOMDBHiltFactory: ImportOMDBHiltFactory
|
||||
@ -66,6 +72,7 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
|
||||
when (it.itemId) {
|
||||
R.id.personal_center_menu_offline_map ->
|
||||
findNavController().navigate(R.id.OfflineMapFragment)
|
||||
|
||||
R.id.personal_center_menu_obtain_data -> { // 生成数据,根据sqlite文件生成对应的zip文件
|
||||
fileChooser.openChooseFileDialog(object : FileChooserCallback() {
|
||||
override fun onCancel(reason: String) {
|
||||
@ -90,6 +97,7 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
R.id.personal_center_menu_import_data -> { // 导入zip数据
|
||||
fileChooser.openChooseFileDialog(object : FileChooserCallback() {
|
||||
override fun onCancel(reason: String) {
|
||||
@ -106,6 +114,7 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
R.id.personal_center_menu_import_yuan_data -> {
|
||||
// 用户选中导入数据,打开文件选择器,用户选择导入的数据文件目录
|
||||
fileChooser.openChooseFileDialog(object : FileChooserCallback() {
|
||||
@ -117,49 +126,59 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
R.id.personal_center_menu_open_auto_location -> {
|
||||
Constant.AUTO_LOCATION = true
|
||||
Constant.AUTO_LOCATION = !Constant.AUTO_LOCATION
|
||||
if (Constant.AUTO_LOCATION) {
|
||||
it.title = "关闭自动定位"
|
||||
viewMainModel.startAutoLocationTimer()
|
||||
} else {
|
||||
it.title = "开启10S自动定位"
|
||||
viewMainModel.cancelAutoLocation()
|
||||
}
|
||||
}
|
||||
R.id.personal_center_menu_close_auto_location -> {
|
||||
Constant.AUTO_LOCATION = false
|
||||
|
||||
R.id.personal_center_menu_rotate_over_look -> {
|
||||
niMapController.mMapView.vtmMap.eventLayer.enableTilt(Constant.MapRotateEnable)
|
||||
niMapController.mMapView.vtmMap.eventLayer.enableRotation(Constant.MapRotateEnable)
|
||||
Constant.MapRotateEnable = !Constant.MapRotateEnable
|
||||
if (Constant.MapRotateEnable) {
|
||||
val mapPosition: MapPosition =
|
||||
niMapController.mMapView.vtmMap.getMapPosition()
|
||||
mapPosition.setBearing(0f) // 锁定角度,自动将地图旋转到正北方向
|
||||
niMapController.mMapView.vtmMap.setMapPosition(mapPosition)
|
||||
it.title = "开启地图旋转及视角"
|
||||
} else {
|
||||
it.title = "锁定地图旋转及视角"
|
||||
}
|
||||
}
|
||||
|
||||
R.id.personal_center_menu_test -> {
|
||||
viewModel.readRealmData()
|
||||
//116.25017070328308 40.061730653134696
|
||||
// 定位到指定位置
|
||||
niMapController.mMapView.vtmMap.animator()
|
||||
// .animateTo(GeoPoint( 40.05108004733645, 116.29187746293708 ))
|
||||
.animateTo(GeoPoint(40.51850916836801,115.78801387178642))
|
||||
.animateTo(GeoPoint(40.51850916836801, 115.78801387178642))
|
||||
}
|
||||
|
||||
R.id.personal_center_menu_open_all_layer -> {
|
||||
MapParamUtils.setDataLayerEnum(DataLayerEnum.SHOW_ALL_LAYERS)
|
||||
niMapController.layerManagerHandler.updateOMDBVectorTileLayer()
|
||||
viewModel.realmOperateHelper.updateRealmDefaultInstance()
|
||||
}
|
||||
|
||||
R.id.personal_center_menu_close_hide_layer -> {
|
||||
MapParamUtils.setDataLayerEnum(DataLayerEnum.ONLY_ENABLE_LAYERS)
|
||||
niMapController.layerManagerHandler.updateOMDBVectorTileLayer()
|
||||
viewModel.realmOperateHelper.updateRealmDefaultInstance()
|
||||
}
|
||||
// R.id.personal_center_menu_task_list -> {
|
||||
// findNavController().navigate(R.id.TaskManagerFragment)
|
||||
// }
|
||||
// R.id.personal_center_menu_qs_record_list -> {
|
||||
// findNavController().navigate(R.id.QsRecordListFragment)
|
||||
// }
|
||||
// R.id.personal_center_menu_layer_manager -> { // 图层管理
|
||||
// findNavController().navigate(R.id.QsLayerManagerFragment)
|
||||
// }
|
||||
/* R.id.personal_center_menu_qs_record_list -> {
|
||||
findNavController().navigate(R.id.QsRecordListFragment)
|
||||
}
|
||||
R.id.personal_center_menu_layer_manager -> { // 图层管理
|
||||
findNavController().navigate(R.id.QsLayerManagerFragment)
|
||||
}*/
|
||||
|
||||
R.id.personal_center_menu_scan_qr_code -> {
|
||||
//跳转二维码扫描界面
|
||||
checkPermission()
|
||||
}
|
||||
|
||||
R.id.personal_center_menu_scan_indoor_data -> {
|
||||
indoorDataListener?.invoke(true)
|
||||
}
|
||||
@ -171,6 +190,24 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
|
||||
ToastUtils.showShort(it)
|
||||
}
|
||||
fileChooser.setCallbacks(this@PersonalCenterFragment)
|
||||
binding.root.menu.forEach {
|
||||
when (it.itemId) {
|
||||
R.id.personal_center_menu_open_auto_location -> {
|
||||
if (Constant.AUTO_LOCATION) {
|
||||
it.title = "关闭自动定位"
|
||||
} else {
|
||||
it.title = "开启10S自动定位"
|
||||
}
|
||||
}
|
||||
R.id.personal_center_menu_rotate_over_look -> {
|
||||
if (Constant.MapRotateEnable) {
|
||||
it.title = "开启地图旋转及视角"
|
||||
} else {
|
||||
it.title = "锁定地图旋转及视角"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun intentTOQRCode() {
|
||||
@ -198,7 +235,7 @@ class PersonalCenterFragment(private var indoorDataListener: ((Boolean) -> Unit?
|
||||
.request { allGranted, grantedList, deniedList ->
|
||||
if (allGranted) {
|
||||
//所有权限已经授权
|
||||
Toast.makeText(context,"授权成功",Toast.LENGTH_LONG).show()
|
||||
Toast.makeText(context, "授权成功", Toast.LENGTH_LONG).show()
|
||||
intentTOQRCode()
|
||||
} else {
|
||||
Toast.makeText(context, "拒绝权限: $deniedList", Toast.LENGTH_LONG).show()
|
||||
|
BIN
app/src/main/res/drawable-xxhdpi/icon_location_north.png
Normal file
BIN
app/src/main/res/drawable-xxhdpi/icon_location_north.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.8 KiB |
BIN
app/src/main/res/drawable-xxhdpi/icon_location_reset.png
Normal file
BIN
app/src/main/res/drawable-xxhdpi/icon_location_reset.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.6 KiB |
@ -284,8 +284,8 @@
|
||||
android:id="@+id/main_activity_location"
|
||||
style="@style/zoom_btns_style"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:onClick="@{()->viewModel.onClickLocationButton()}"
|
||||
android:src="@drawable/icon_location"
|
||||
android:onClick="@{()->mainActivity.onClickLocation()}"
|
||||
android:src="@drawable/icon_location_north"
|
||||
app:layout_constraintBottom_toTopOf="@id/main_activity_map_update"
|
||||
app:layout_constraintRight_toRightOf="@id/main_activity_map_update" />
|
||||
|
||||
|
@ -41,7 +41,7 @@
|
||||
android:layout_marginRight="5dp"
|
||||
android:background="@color/transparent"
|
||||
android:src="@drawable/icon_delete"
|
||||
app:layout_constraintRight_toLeftOf="@id/note_bar_cancel"
|
||||
app:layout_constraintRight_toLeftOf="@id/note_bar_save"
|
||||
app:layout_constraintTop_toTopOf="@id/note_bar_save" />
|
||||
|
||||
<androidx.core.widget.NestedScrollView
|
||||
|
@ -36,26 +36,24 @@
|
||||
android:visible="false"
|
||||
android:icon="@drawable/ic_baseline_sim_card_download_24"
|
||||
android:title="备份数据" />
|
||||
<item
|
||||
android:id="@+id/personal_center_menu_open_auto_location"
|
||||
android:icon="@drawable/baseline_person_24"
|
||||
android:visible="true"
|
||||
android:title="开启10S自动定位" />
|
||||
<item
|
||||
android:id="@+id/personal_center_menu_rotate_over_look"
|
||||
android:icon="@drawable/baseline_person_24"
|
||||
android:visible="true"
|
||||
android:title="锁定地图旋转及视角" />
|
||||
<item
|
||||
android:id="@+id/personal_center_menu_version"
|
||||
android:icon="@drawable/ic_baseline_layers_24"
|
||||
android:title="版本:ONE_23QE4_V1.5.0_20230904_A" />
|
||||
android:title="版本:23QE4_V1.5.0_20230904_A" />
|
||||
</group>
|
||||
<group android:checkableBehavior="single">
|
||||
<item android:title="小标题">
|
||||
<menu>
|
||||
<item
|
||||
android:id="@+id/personal_center_menu_open_auto_location"
|
||||
android:icon="@drawable/baseline_person_24"
|
||||
android:visible="true"
|
||||
android:title="开启自动定位" />
|
||||
|
||||
<item
|
||||
android:id="@+id/personal_center_menu_close_auto_location"
|
||||
android:icon="@drawable/baseline_person_24"
|
||||
android:visible="true"
|
||||
android:title="关闭自动定位" />
|
||||
|
||||
<item
|
||||
android:id="@+id/personal_center_menu_open_all_layer"
|
||||
android:icon="@drawable/baseline_person_24"
|
||||
|
@ -28,7 +28,7 @@ class LineHandler(context: AppCompatActivity, mapView: NIMapView) : BaseHandler(
|
||||
//高亮线绘制线 样式
|
||||
val defaultLineStyle = Style.builder()
|
||||
.stippleColor(context.resources.getColor(R.color.draw_line_blue2_color))
|
||||
.strokeWidth(10f)
|
||||
.strokeWidth(5f)
|
||||
.fillColor(context.resources.getColor(R.color.teal_200))
|
||||
.fillAlpha(0.5f)
|
||||
.strokeColor(context.resources.getColor(R.color.teal_200))
|
||||
|
Loading…
x
Reference in New Issue
Block a user