diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java new file mode 100644 index 0000000..b3dae19 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java @@ -0,0 +1,271 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class WellListModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String staff; + private String tel; + private String ts; + private String valid; + private String watchData; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWatchData() { + return watchData; + } + + public void setWatchData(String watchData) { + this.watchData = watchData; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java new file mode 100644 index 0000000..b3dae19 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java @@ -0,0 +1,271 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class WellListModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String staff; + private String tel; + private String ts; + private String valid; + private String watchData; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWatchData() { + return watchData; + } + + public void setWatchData(String watchData) { + this.watchData = watchData; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index 2b682c2..b9b15b2 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -105,4 +105,10 @@ @Query("endTime") endTime: String, @Query("alarmType") alarmType: String ): String + + /** + * 获取获取闸井列表-不分页,地图用 + */ + @GET("/overview/wellList") + suspend fun getAllWell(@Header("token") token: String): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java new file mode 100644 index 0000000..b3dae19 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java @@ -0,0 +1,271 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class WellListModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String staff; + private String tel; + private String ts; + private String valid; + private String watchData; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWatchData() { + return watchData; + } + + public void setWatchData(String watchData) { + this.watchData = watchData; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index 2b682c2..b9b15b2 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -105,4 +105,10 @@ @Query("endTime") endTime: String, @Query("alarmType") alarmType: String ): String + + /** + * 获取获取闸井列表-不分页,地图用 + */ + @GET("/overview/wellList") + suspend fun getAllWell(@Header("token") token: String): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index a6d8099..09e390d 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -110,4 +110,8 @@ alarmType ) } + + suspend fun getAllWell(): String { + return api.getAllWell(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java new file mode 100644 index 0000000..b3dae19 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java @@ -0,0 +1,271 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class WellListModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String staff; + private String tel; + private String ts; + private String valid; + private String watchData; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWatchData() { + return watchData; + } + + public void setWatchData(String watchData) { + this.watchData = watchData; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index 2b682c2..b9b15b2 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -105,4 +105,10 @@ @Query("endTime") endTime: String, @Query("alarmType") alarmType: String ): String + + /** + * 获取获取闸井列表-不分页,地图用 + */ + @GET("/overview/wellList") + suspend fun getAllWell(@Header("token") token: String): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index a6d8099..09e390d 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -110,4 +110,8 @@ alarmType ) } + + suspend fun getAllWell(): String { + return api.getAllWell(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt index cb0c9e4..950b107 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt @@ -1,25 +1,173 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_all_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class AllWellActivity : KotlinBaseActivity() { +class AllWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_all_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_all_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java new file mode 100644 index 0000000..b3dae19 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java @@ -0,0 +1,271 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class WellListModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String staff; + private String tel; + private String ts; + private String valid; + private String watchData; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWatchData() { + return watchData; + } + + public void setWatchData(String watchData) { + this.watchData = watchData; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index 2b682c2..b9b15b2 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -105,4 +105,10 @@ @Query("endTime") endTime: String, @Query("alarmType") alarmType: String ): String + + /** + * 获取获取闸井列表-不分页,地图用 + */ + @GET("/overview/wellList") + suspend fun getAllWell(@Header("token") token: String): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index a6d8099..09e390d 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -110,4 +110,8 @@ alarmType ) } + + suspend fun getAllWell(): String { + return api.getAllWell(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt index cb0c9e4..950b107 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt @@ -1,25 +1,173 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_all_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class AllWellActivity : KotlinBaseActivity() { +class AllWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_all_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_all_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt index 6a43b9e..35e8c0d 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt @@ -1,25 +1,175 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_bf_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class BFWellActivity : KotlinBaseActivity() { +class BFWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_bf_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_bf_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "已布防闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + if (wellInfo.bfzt == "1") { + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java new file mode 100644 index 0000000..b3dae19 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java @@ -0,0 +1,271 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class WellListModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String staff; + private String tel; + private String ts; + private String valid; + private String watchData; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWatchData() { + return watchData; + } + + public void setWatchData(String watchData) { + this.watchData = watchData; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index 2b682c2..b9b15b2 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -105,4 +105,10 @@ @Query("endTime") endTime: String, @Query("alarmType") alarmType: String ): String + + /** + * 获取获取闸井列表-不分页,地图用 + */ + @GET("/overview/wellList") + suspend fun getAllWell(@Header("token") token: String): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index a6d8099..09e390d 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -110,4 +110,8 @@ alarmType ) } + + suspend fun getAllWell(): String { + return api.getAllWell(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt index cb0c9e4..950b107 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt @@ -1,25 +1,173 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_all_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class AllWellActivity : KotlinBaseActivity() { +class AllWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_all_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_all_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt index 6a43b9e..35e8c0d 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt @@ -1,25 +1,175 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_bf_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class BFWellActivity : KotlinBaseActivity() { +class BFWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_bf_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_bf_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "已布防闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + if (wellInfo.bfzt == "1") { + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt index bc72674..c34e35e 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt @@ -1,25 +1,179 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_bf_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class CFWellActivity : KotlinBaseActivity() { +class CFWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_cf_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_cf_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "已撤防闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + if (wellInfo.bfzt == "0") { + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + if (wellInfoModels.size == 0) { + "所有点位已布防".show(this) + } + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java new file mode 100644 index 0000000..b3dae19 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java @@ -0,0 +1,271 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class WellListModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String staff; + private String tel; + private String ts; + private String valid; + private String watchData; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWatchData() { + return watchData; + } + + public void setWatchData(String watchData) { + this.watchData = watchData; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index 2b682c2..b9b15b2 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -105,4 +105,10 @@ @Query("endTime") endTime: String, @Query("alarmType") alarmType: String ): String + + /** + * 获取获取闸井列表-不分页,地图用 + */ + @GET("/overview/wellList") + suspend fun getAllWell(@Header("token") token: String): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index a6d8099..09e390d 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -110,4 +110,8 @@ alarmType ) } + + suspend fun getAllWell(): String { + return api.getAllWell(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt index cb0c9e4..950b107 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt @@ -1,25 +1,173 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_all_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class AllWellActivity : KotlinBaseActivity() { +class AllWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_all_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_all_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt index 6a43b9e..35e8c0d 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt @@ -1,25 +1,175 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_bf_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class BFWellActivity : KotlinBaseActivity() { +class BFWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_bf_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_bf_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "已布防闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + if (wellInfo.bfzt == "1") { + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt index bc72674..c34e35e 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt @@ -1,25 +1,179 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_bf_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class CFWellActivity : KotlinBaseActivity() { +class CFWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_cf_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_cf_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "已撤防闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + if (wellInfo.bfzt == "0") { + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + if (wellInfoModels.size == 0) { + "所有点位已布防".show(this) + } + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 6ed56a4..4fb2740 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -5,6 +5,7 @@ import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage import com.casic.smart.town.sanxi.model.WellInfoModel +import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -19,6 +20,7 @@ private val gson by lazy { Gson() } val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() + val allWellResult = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -64,4 +66,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun getAllWell() = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getAllWell() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + allWellResult.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java new file mode 100644 index 0000000..b3dae19 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java @@ -0,0 +1,271 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class WellListModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String staff; + private String tel; + private String ts; + private String valid; + private String watchData; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWatchData() { + return watchData; + } + + public void setWatchData(String watchData) { + this.watchData = watchData; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index 2b682c2..b9b15b2 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -105,4 +105,10 @@ @Query("endTime") endTime: String, @Query("alarmType") alarmType: String ): String + + /** + * 获取获取闸井列表-不分页,地图用 + */ + @GET("/overview/wellList") + suspend fun getAllWell(@Header("token") token: String): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index a6d8099..09e390d 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -110,4 +110,8 @@ alarmType ) } + + suspend fun getAllWell(): String { + return api.getAllWell(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt index cb0c9e4..950b107 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt @@ -1,25 +1,173 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_all_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class AllWellActivity : KotlinBaseActivity() { +class AllWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_all_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_all_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt index 6a43b9e..35e8c0d 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt @@ -1,25 +1,175 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_bf_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class BFWellActivity : KotlinBaseActivity() { +class BFWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_bf_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_bf_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "已布防闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + if (wellInfo.bfzt == "1") { + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt index bc72674..c34e35e 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt @@ -1,25 +1,179 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_bf_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class CFWellActivity : KotlinBaseActivity() { +class CFWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_cf_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_cf_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "已撤防闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + if (wellInfo.bfzt == "0") { + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + if (wellInfoModels.size == 0) { + "所有点位已布防".show(this) + } + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 6ed56a4..4fb2740 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -5,6 +5,7 @@ import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage import com.casic.smart.town.sanxi.model.WellInfoModel +import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -19,6 +20,7 @@ private val gson by lazy { Gson() } val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() + val allWellResult = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -64,4 +66,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun getAllWell() = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getAllWell() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + allWellResult.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_all_well.xml b/app/src/main/res/layout/activity_all_well.xml index 77d9ef6..85b3c9a 100644 --- a/app/src/main/res/layout/activity_all_well.xml +++ b/app/src/main/res/layout/activity_all_well.xml @@ -1,6 +1,19 @@ - + android:layout_height="match_parent" + android:background="@color/mainBackColor" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java new file mode 100644 index 0000000..b3dae19 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java @@ -0,0 +1,271 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class WellListModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String staff; + private String tel; + private String ts; + private String valid; + private String watchData; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWatchData() { + return watchData; + } + + public void setWatchData(String watchData) { + this.watchData = watchData; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index 2b682c2..b9b15b2 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -105,4 +105,10 @@ @Query("endTime") endTime: String, @Query("alarmType") alarmType: String ): String + + /** + * 获取获取闸井列表-不分页,地图用 + */ + @GET("/overview/wellList") + suspend fun getAllWell(@Header("token") token: String): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index a6d8099..09e390d 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -110,4 +110,8 @@ alarmType ) } + + suspend fun getAllWell(): String { + return api.getAllWell(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt index cb0c9e4..950b107 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt @@ -1,25 +1,173 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_all_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class AllWellActivity : KotlinBaseActivity() { +class AllWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_all_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_all_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt index 6a43b9e..35e8c0d 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt @@ -1,25 +1,175 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_bf_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class BFWellActivity : KotlinBaseActivity() { +class BFWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_bf_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_bf_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "已布防闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + if (wellInfo.bfzt == "1") { + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt index bc72674..c34e35e 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt @@ -1,25 +1,179 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_bf_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class CFWellActivity : KotlinBaseActivity() { +class CFWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_cf_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_cf_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "已撤防闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + if (wellInfo.bfzt == "0") { + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + if (wellInfoModels.size == 0) { + "所有点位已布防".show(this) + } + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 6ed56a4..4fb2740 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -5,6 +5,7 @@ import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage import com.casic.smart.town.sanxi.model.WellInfoModel +import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -19,6 +20,7 @@ private val gson by lazy { Gson() } val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() + val allWellResult = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -64,4 +66,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun getAllWell() = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getAllWell() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + allWellResult.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_all_well.xml b/app/src/main/res/layout/activity_all_well.xml index 77d9ef6..85b3c9a 100644 --- a/app/src/main/res/layout/activity_all_well.xml +++ b/app/src/main/res/layout/activity_all_well.xml @@ -1,6 +1,19 @@ - + android:layout_height="match_parent" + android:background="@color/mainBackColor" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_bf_well.xml b/app/src/main/res/layout/activity_bf_well.xml index 77d9ef6..85b3c9a 100644 --- a/app/src/main/res/layout/activity_bf_well.xml +++ b/app/src/main/res/layout/activity_bf_well.xml @@ -1,6 +1,19 @@ - + android:layout_height="match_parent" + android:background="@color/mainBackColor" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java new file mode 100644 index 0000000..b3dae19 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java @@ -0,0 +1,271 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class WellListModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String staff; + private String tel; + private String ts; + private String valid; + private String watchData; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWatchData() { + return watchData; + } + + public void setWatchData(String watchData) { + this.watchData = watchData; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index 2b682c2..b9b15b2 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -105,4 +105,10 @@ @Query("endTime") endTime: String, @Query("alarmType") alarmType: String ): String + + /** + * 获取获取闸井列表-不分页,地图用 + */ + @GET("/overview/wellList") + suspend fun getAllWell(@Header("token") token: String): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index a6d8099..09e390d 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -110,4 +110,8 @@ alarmType ) } + + suspend fun getAllWell(): String { + return api.getAllWell(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt index cb0c9e4..950b107 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt @@ -1,25 +1,173 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_all_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class AllWellActivity : KotlinBaseActivity() { +class AllWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_all_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_all_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt index 6a43b9e..35e8c0d 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt @@ -1,25 +1,175 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_bf_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class BFWellActivity : KotlinBaseActivity() { +class BFWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_bf_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_bf_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "已布防闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + if (wellInfo.bfzt == "1") { + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt index bc72674..c34e35e 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt @@ -1,25 +1,179 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_bf_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class CFWellActivity : KotlinBaseActivity() { +class CFWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_cf_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_cf_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "已撤防闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + if (wellInfo.bfzt == "0") { + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + if (wellInfoModels.size == 0) { + "所有点位已布防".show(this) + } + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 6ed56a4..4fb2740 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -5,6 +5,7 @@ import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage import com.casic.smart.town.sanxi.model.WellInfoModel +import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -19,6 +20,7 @@ private val gson by lazy { Gson() } val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() + val allWellResult = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -64,4 +66,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun getAllWell() = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getAllWell() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + allWellResult.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_all_well.xml b/app/src/main/res/layout/activity_all_well.xml index 77d9ef6..85b3c9a 100644 --- a/app/src/main/res/layout/activity_all_well.xml +++ b/app/src/main/res/layout/activity_all_well.xml @@ -1,6 +1,19 @@ - + android:layout_height="match_parent" + android:background="@color/mainBackColor" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_bf_well.xml b/app/src/main/res/layout/activity_bf_well.xml index 77d9ef6..85b3c9a 100644 --- a/app/src/main/res/layout/activity_bf_well.xml +++ b/app/src/main/res/layout/activity_bf_well.xml @@ -1,6 +1,19 @@ - + android:layout_height="match_parent" + android:background="@color/mainBackColor" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_cf_well.xml b/app/src/main/res/layout/activity_cf_well.xml index 77d9ef6..85b3c9a 100644 --- a/app/src/main/res/layout/activity_cf_well.xml +++ b/app/src/main/res/layout/activity_cf_well.xml @@ -1,6 +1,19 @@ - + android:layout_height="match_parent" + android:background="@color/mainBackColor" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java new file mode 100644 index 0000000..b3dae19 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/WellListModel.java @@ -0,0 +1,271 @@ +package com.casic.smart.town.sanxi.model; + +import java.util.List; + +public class WellListModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String area; + private String bfzt; + private String bfztName; + private String coordinateX; + private String coordinateY; + private String deep; + private String deptName; + private String deptid; + private String id; + private String latBaidu; + private String latGaode; + private String lngBaidu; + private String lngGaode; + private String notes; + private String photos; + private String position; + private String staff; + private String tel; + private String ts; + private String valid; + private String watchData; + private String wellCode; + private String wellName; + private String wellType; + private String wellTypeName; + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getBfzt() { + return bfzt; + } + + public void setBfzt(String bfzt) { + this.bfzt = bfzt; + } + + public String getBfztName() { + return bfztName; + } + + public void setBfztName(String bfztName) { + this.bfztName = bfztName; + } + + public String getCoordinateX() { + return coordinateX; + } + + public void setCoordinateX(String coordinateX) { + this.coordinateX = coordinateX; + } + + public String getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(String coordinateY) { + this.coordinateY = coordinateY; + } + + public String getDeep() { + return deep; + } + + public void setDeep(String deep) { + this.deep = deep; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptid() { + return deptid; + } + + public void setDeptid(String deptid) { + this.deptid = deptid; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLatBaidu() { + return latBaidu; + } + + public void setLatBaidu(String latBaidu) { + this.latBaidu = latBaidu; + } + + public String getLatGaode() { + return latGaode; + } + + public void setLatGaode(String latGaode) { + this.latGaode = latGaode; + } + + public String getLngBaidu() { + return lngBaidu; + } + + public void setLngBaidu(String lngBaidu) { + this.lngBaidu = lngBaidu; + } + + public String getLngGaode() { + return lngGaode; + } + + public void setLngGaode(String lngGaode) { + this.lngGaode = lngGaode; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getPhotos() { + return photos; + } + + public void setPhotos(String photos) { + this.photos = photos; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getStaff() { + return staff; + } + + public void setStaff(String staff) { + this.staff = staff; + } + + public String getTel() { + return tel; + } + + public void setTel(String tel) { + this.tel = tel; + } + + public String getTs() { + return ts; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public String getValid() { + return valid; + } + + public void setValid(String valid) { + this.valid = valid; + } + + public String getWatchData() { + return watchData; + } + + public void setWatchData(String watchData) { + this.watchData = watchData; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getWellName() { + return wellName; + } + + public void setWellName(String wellName) { + this.wellName = wellName; + } + + public String getWellType() { + return wellType; + } + + public void setWellType(String wellType) { + this.wellType = wellType; + } + + public String getWellTypeName() { + return wellTypeName; + } + + public void setWellTypeName(String wellTypeName) { + this.wellTypeName = wellTypeName; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt index 2b682c2..b9b15b2 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt @@ -105,4 +105,10 @@ @Query("endTime") endTime: String, @Query("alarmType") alarmType: String ): String + + /** + * 获取获取闸井列表-不分页,地图用 + */ + @GET("/overview/wellList") + suspend fun getAllWell(@Header("token") token: String): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt index a6d8099..09e390d 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt @@ -110,4 +110,8 @@ alarmType ) } + + suspend fun getAllWell(): String { + return api.getAllWell(AuthenticationHelper.token!!) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt index cb0c9e4..950b107 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt @@ -1,25 +1,173 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_all_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class AllWellActivity : KotlinBaseActivity() { +class AllWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_all_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_all_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt index 6a43b9e..35e8c0d 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt @@ -1,25 +1,175 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_bf_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class BFWellActivity : KotlinBaseActivity() { +class BFWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_bf_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_bf_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "已布防闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + if (wellInfo.bfzt == "1") { + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt index bc72674..c34e35e 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt @@ -1,25 +1,179 @@ package com.casic.smart.town.sanxi.view +import android.graphics.Point +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.amap.api.maps.AMap +import com.amap.api.maps.AMapOptions +import com.amap.api.maps.CameraUpdateFactory +import com.amap.api.maps.model.BitmapDescriptorFactory +import com.amap.api.maps.model.CameraPosition +import com.amap.api.maps.model.LatLng +import com.amap.api.maps.model.MarkerOptions import com.casic.smart.town.sanxi.R -import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.casic.smart.town.sanxi.model.WellListModel +import com.casic.smart.town.sanxi.util.LoadingDialogHub +import com.casic.smart.town.sanxi.vm.WellViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import com.pengxh.kt.lite.vm.LoadState +import kotlinx.android.synthetic.main.activity_bf_well.* +import kotlinx.android.synthetic.main.include_base_title.* -class CFWellActivity : KotlinBaseActivity() { +class CFWellActivity : AppCompatActivity(), AMap.OnMapLoadedListener, + AMap.OnCameraChangeListener { - override fun initLayoutView(): Int = R.layout.activity_cf_well + private lateinit var wellViewModel: WellViewModel + private lateinit var aMap: AMap - override fun observeRequestState() { + /** + * 所有的marker + */ + private var allMarkerOptions: MutableList = ArrayList() + + /** + * 视野内的marker + */ + private var markerOptionsInView: MutableList = ArrayList() + + /** + * 所有Well列表信息集合 + * */ + private var wellInfoModels: MutableList = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_cf_well) + + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this)) + titleView.text = "已撤防闸井分布" + leftBackView.setOnClickListener { finish() } + + setMapConfig(savedInstanceState) + + wellViewModel = ViewModelProvider(this)[WellViewModel::class.java] + wellViewModel.loadState.observe(this, { + when (it) { + LoadState.Loading -> LoadingDialogHub.show(this, "数据加载中...") + else -> LoadingDialogHub.dismiss() + } + }) + wellViewModel.getAllWell() + wellViewModel.allWellResult.observe(this, { + if (it.code == 200) { + val latitudeList: MutableList = ArrayList() + val longitudeList: MutableList = ArrayList() + + it.data.forEach { wellInfo -> + val lat = wellInfo.latGaode.toString() + val lng = wellInfo.lngGaode.toString() + if (lat.isNotBlank() && lng.isNotBlank()) { + val latitude = lat.toDouble() + val longitude = lng.toDouble() + + //有的数据经纬度是反的 + val latLng = if (latitude > longitude) { + LatLng(longitude, latitude) + } else { + LatLng(latitude, longitude) + } + + //缓存所有井详情,点击Marker时候需要 + if (wellInfo.bfzt == "0") { + wellInfoModels.add(wellInfo) + //分别缓存经、纬度 + latitudeList.add(latitude) + longitudeList.add(longitude) + //将所有设备信息转化缓存为Marker点 + allMarkerOptions.add( + MarkerOptions() + .position(latLng) + .title(wellInfo.wellTypeName) + .snippet(wellInfo.wellCode) + ) + + + //移动到指定经纬度 + val cameraPosition = CameraPosition(latLng, 15f, 0f, 0f) + val cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition) + aMap.animateCamera(cameraUpdate, 2000, null) + } + } + } + } + }) + } + + private fun setMapConfig(savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + aMap = mapView.map + aMap.mapType = AMap.MAP_TYPE_NORMAL + val uiSettings = aMap.uiSettings + uiSettings.isCompassEnabled = true + uiSettings.zoomPosition = AMapOptions.ZOOM_POSITION_RIGHT_CENTER + uiSettings.isTiltGesturesEnabled = false//不许地图随手势倾斜角度 + + // 地图加载成功监听 + aMap.addOnMapLoadedListener(this) + // 地图缩放监听 + aMap.addOnCameraChangeListener(this) + } + + override fun onMapLoaded() { + initClustersMarkers() + } + + override fun onCameraChange(p0: CameraPosition?) { } - override fun setupTopBarLayout() { - + override fun onCameraChangeFinish(p0: CameraPosition?) { + initClustersMarkers() } - override fun initData() { - + private fun initClustersMarkers() { + val proj = aMap.projection + val dm = resources.displayMetrics + var screenLocation: Point + markerOptionsInView.clear() + // 获取在当前视野内的marker + allMarkerOptions.forEach { + screenLocation = proj.toScreenLocation(it.position) + if (screenLocation.x >= 0 && screenLocation.y >= 0 && screenLocation.x <= dm.widthPixels && screenLocation.y <= dm.heightPixels) { + it.icon(BitmapDescriptorFactory.fromBitmap(BitmapDescriptorFactory.fromResource(R.mipmap.map_pin).bitmap)) + markerOptionsInView.add(it) + } + } + markerOptionsInView.forEach { + aMap.addMarker(it) + } } - override fun initEvent() { + /***以下是地图生命周期管理************************************************************************/ + override fun onResume() { + super.onResume() + mapView.onResume() + if (wellInfoModels.size == 0) { + "所有点位已布防".show(this) + } + } + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onDestroy() { + super.onDestroy() + mapView.onDestroy() } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt index 6ed56a4..4fb2740 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt @@ -5,6 +5,7 @@ import com.casic.smart.town.sanxi.extensions.separateResponseCode import com.casic.smart.town.sanxi.extensions.toErrorMessage import com.casic.smart.town.sanxi.model.WellInfoModel +import com.casic.smart.town.sanxi.model.WellListModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -19,6 +20,7 @@ private val gson by lazy { Gson() } val countResultModel = MutableLiveData>() val wellResultModel = MutableLiveData() + val allWellResult = MutableLiveData() fun countWellByState() = launch({ val response = RetrofitServiceManager.countWellByState() @@ -64,4 +66,22 @@ loadState.value = LoadState.Fail it.printStackTrace() }) + + fun getAllWell() = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.getAllWell() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + loadState.value = LoadState.Success + allWellResult.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + loadState.value = LoadState.Fail + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + loadState.value = LoadState.Fail + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_all_well.xml b/app/src/main/res/layout/activity_all_well.xml index 77d9ef6..85b3c9a 100644 --- a/app/src/main/res/layout/activity_all_well.xml +++ b/app/src/main/res/layout/activity_all_well.xml @@ -1,6 +1,19 @@ - + android:layout_height="match_parent" + android:background="@color/mainBackColor" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_bf_well.xml b/app/src/main/res/layout/activity_bf_well.xml index 77d9ef6..85b3c9a 100644 --- a/app/src/main/res/layout/activity_bf_well.xml +++ b/app/src/main/res/layout/activity_bf_well.xml @@ -1,6 +1,19 @@ - + android:layout_height="match_parent" + android:background="@color/mainBackColor" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_cf_well.xml b/app/src/main/res/layout/activity_cf_well.xml index 77d9ef6..85b3c9a 100644 --- a/app/src/main/res/layout/activity_cf_well.xml +++ b/app/src/main/res/layout/activity_cf_well.xml @@ -1,6 +1,19 @@ - + android:layout_height="match_parent" + android:background="@color/mainBackColor" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 3b4876a..8d53328 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -36,5 +36,5 @@ 56dp - 230dp + 255dp \ No newline at end of file