diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt index a22b719..ed8f009 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt @@ -3,6 +3,7 @@ import android.graphics.Point import android.location.Location import android.os.Bundle +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -12,6 +13,7 @@ import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.AMapUtils +import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.HomeRecycleAdapter @@ -30,14 +32,15 @@ import kotlinx.android.synthetic.main.fragment_home.view.* import kotlinx.android.synthetic.main.include_base_title.view.* -class HomePageFragment : Fragment(), AMap.OnMyLocationChangeListener, AMap.OnCameraChangeListener, - AMap.OnMarkerClickListener, AMap.OnInfoWindowClickListener { +class HomePageFragment : Fragment(), AMap.OnMapLoadedListener, AMap.OnMyLocationChangeListener, + AMap.OnCameraChangeListener, AMap.OnMarkerClickListener, AMap.OnInfoWindowClickListener { private lateinit var homeView: View private lateinit var wellCountViewModel: WellCountViewModel private lateinit var workOrderViewModel: WorkOrderViewModel private lateinit var wellListViewModel: WellListViewModel private lateinit var aMap: AMap + private val kTag = "HomePageFragment" //定位点经纬度 private var location: LatLng? = null @@ -68,23 +71,33 @@ wellListViewModel.obtainAllWell() wellListViewModel.listModel.observe(viewLifecycleOwner, { if (it.code == 200) { - it.data?.rows?.forEach { location -> - if (location.latGaode.toString().isNotBlank() - && location.lngGaode.toString().isNotBlank() - ) { - allMarkerOptions.add( - MarkerOptions().position( - LatLng( - location.latGaode!!.toDouble(), - location.lngGaode!!.toDouble() - ) - ).title(location.wellTypeName).snippet(location.wellName) - ) + it.data?.rows?.forEach { well -> + val lat = well.latGaode.toString() + val lng = well.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + //返回true代表当前位置在大陆、港澳地区,反之不在 + if (CoordinateConverter.isAMapDataAvailable( + lat.toDouble(), lng.toDouble() + ) + ) { + allMarkerOptions.add( + MarkerOptions().position( + LatLng(lat.toDouble(), lng.toDouble()) + ).title(well.wellTypeName).snippet(well.wellName) + ) + } else { + Log.d(kTag, "${well.wellCode}闸井经纬度不在国内,异常经纬度 ===> [${lng},${lat}]") + } + } else { + Log.d(kTag, "${well.wellCode}闸井经纬度异常,异常经纬度 ===> [${lng},${lat}]") } } } }) + //地图初始化 + initMap(savedInstanceState) + //获取窨井监控数据 wellCountViewModel.resultModel.observe(viewLifecycleOwner, { homeView.unDeployedWellView.text = it["bfWell"] @@ -108,9 +121,6 @@ homeView.completedDataView.text = it["over"] }) - //地图初始化 - initMap(savedInstanceState) - //首页功能块 val homeRecycleAdapter = HomeRecycleAdapter(requireContext()) homeView.homeRecyclerView.layoutManager = GridLayoutManager(requireContext(), 3) @@ -133,17 +143,21 @@ aMap = homeView.mapView.map val uiSettings = aMap.uiSettings uiSettings.isMyLocationButtonEnabled = true//设置默认定位按钮是否显示 + uiSettings.isCompassEnabled = true uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 uiSettings.isRotateGesturesEnabled = false//不许地图随手势旋转角度 //显示定位小蓝点 val locationStyle = MyLocationStyle() - locationStyle.interval(5000) - //连续定位、蓝点不会移动到地图中心点,并且蓝点会跟随设备移动。 - locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER) + //连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动 + locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER) locationStyle.showMyLocation(true)//设置是否显示定位小蓝点 aMap.myLocationStyle = locationStyle aMap.isMyLocationEnabled = true + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 位置改变监听 aMap.addOnMyLocationChangeListener(this) // 地图缩放监听 aMap.addOnCameraChangeListener(this) @@ -153,6 +167,11 @@ aMap.addOnInfoWindowClickListener(this) } + override fun onMapLoaded() { + //地图加载成功之后显示聚合点数据 + initClustersMarkers() + } + override fun onMyLocationChange(p0: Location?) { if (p0 != null) { this.location = LatLng(p0.latitude, p0.longitude) @@ -165,6 +184,11 @@ //获取视野内的marker 根据聚合算法合成自定义的marker 显示视野内的marker override fun onCameraChangeFinish(p0: CameraPosition?) { + //地图缩放之后显示聚合点数据 + initClustersMarkers() + } + + private fun initClustersMarkers() { val proj = aMap.projection val dm = resources.displayMetrics var screenLocation: Point diff --git a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt index a22b719..ed8f009 100644 --- a/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/app/smartwell/view/fragment/HomePageFragment.kt @@ -3,6 +3,7 @@ import android.graphics.Point import android.location.Location import android.os.Bundle +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -12,6 +13,7 @@ import com.amap.api.maps.AMap import com.amap.api.maps.AMapOptions import com.amap.api.maps.AMapUtils +import com.amap.api.maps.CoordinateConverter import com.amap.api.maps.model.* import com.casic.app.smartwell.R import com.casic.app.smartwell.adapter.HomeRecycleAdapter @@ -30,14 +32,15 @@ import kotlinx.android.synthetic.main.fragment_home.view.* import kotlinx.android.synthetic.main.include_base_title.view.* -class HomePageFragment : Fragment(), AMap.OnMyLocationChangeListener, AMap.OnCameraChangeListener, - AMap.OnMarkerClickListener, AMap.OnInfoWindowClickListener { +class HomePageFragment : Fragment(), AMap.OnMapLoadedListener, AMap.OnMyLocationChangeListener, + AMap.OnCameraChangeListener, AMap.OnMarkerClickListener, AMap.OnInfoWindowClickListener { private lateinit var homeView: View private lateinit var wellCountViewModel: WellCountViewModel private lateinit var workOrderViewModel: WorkOrderViewModel private lateinit var wellListViewModel: WellListViewModel private lateinit var aMap: AMap + private val kTag = "HomePageFragment" //定位点经纬度 private var location: LatLng? = null @@ -68,23 +71,33 @@ wellListViewModel.obtainAllWell() wellListViewModel.listModel.observe(viewLifecycleOwner, { if (it.code == 200) { - it.data?.rows?.forEach { location -> - if (location.latGaode.toString().isNotBlank() - && location.lngGaode.toString().isNotBlank() - ) { - allMarkerOptions.add( - MarkerOptions().position( - LatLng( - location.latGaode!!.toDouble(), - location.lngGaode!!.toDouble() - ) - ).title(location.wellTypeName).snippet(location.wellName) - ) + it.data?.rows?.forEach { well -> + val lat = well.latGaode.toString() + val lng = well.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + //返回true代表当前位置在大陆、港澳地区,反之不在 + if (CoordinateConverter.isAMapDataAvailable( + lat.toDouble(), lng.toDouble() + ) + ) { + allMarkerOptions.add( + MarkerOptions().position( + LatLng(lat.toDouble(), lng.toDouble()) + ).title(well.wellTypeName).snippet(well.wellName) + ) + } else { + Log.d(kTag, "${well.wellCode}闸井经纬度不在国内,异常经纬度 ===> [${lng},${lat}]") + } + } else { + Log.d(kTag, "${well.wellCode}闸井经纬度异常,异常经纬度 ===> [${lng},${lat}]") } } } }) + //地图初始化 + initMap(savedInstanceState) + //获取窨井监控数据 wellCountViewModel.resultModel.observe(viewLifecycleOwner, { homeView.unDeployedWellView.text = it["bfWell"] @@ -108,9 +121,6 @@ homeView.completedDataView.text = it["over"] }) - //地图初始化 - initMap(savedInstanceState) - //首页功能块 val homeRecycleAdapter = HomeRecycleAdapter(requireContext()) homeView.homeRecyclerView.layoutManager = GridLayoutManager(requireContext(), 3) @@ -133,17 +143,21 @@ aMap = homeView.mapView.map val uiSettings = aMap.uiSettings uiSettings.isMyLocationButtonEnabled = true//设置默认定位按钮是否显示 + uiSettings.isCompassEnabled = true uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 uiSettings.isRotateGesturesEnabled = false//不许地图随手势旋转角度 //显示定位小蓝点 val locationStyle = MyLocationStyle() - locationStyle.interval(5000) - //连续定位、蓝点不会移动到地图中心点,并且蓝点会跟随设备移动。 - locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER) + //连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动 + locationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER) locationStyle.showMyLocation(true)//设置是否显示定位小蓝点 aMap.myLocationStyle = locationStyle aMap.isMyLocationEnabled = true + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 位置改变监听 aMap.addOnMyLocationChangeListener(this) // 地图缩放监听 aMap.addOnCameraChangeListener(this) @@ -153,6 +167,11 @@ aMap.addOnInfoWindowClickListener(this) } + override fun onMapLoaded() { + //地图加载成功之后显示聚合点数据 + initClustersMarkers() + } + override fun onMyLocationChange(p0: Location?) { if (p0 != null) { this.location = LatLng(p0.latitude, p0.longitude) @@ -165,6 +184,11 @@ //获取视野内的marker 根据聚合算法合成自定义的marker 显示视野内的marker override fun onCameraChangeFinish(p0: CameraPosition?) { + //地图缩放之后显示聚合点数据 + initClustersMarkers() + } + + private fun initClustersMarkers() { val proj = aMap.projection val dm = resources.displayMetrics var screenLocation: Point diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 62e42fd..37d50e5 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -37,7 +37,7 @@