[清扫车]保存贴边数据到数据库中
This commit is contained in:
@@ -18,7 +18,7 @@ android {
|
||||
|
||||
javaCompileOptions {
|
||||
annotationProcessorOptions {
|
||||
arguments = [AROUTER_MODULE_NAME: project.getName()]
|
||||
arguments = [AROUTER_MODULE_NAME: project.getName(),"room.schemaLocation": "$projectDir/schemas".toString()]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -53,6 +53,8 @@ dependencies {
|
||||
implementation rootProject.ext.dependencies.rxandroid
|
||||
implementation rootProject.ext.dependencies.androidxrecyclerview
|
||||
implementation rootProject.ext.dependencies.androidxcardview
|
||||
implementation rootProject.ext.dependencies.androidxroomruntime
|
||||
annotationProcessor rootProject.ext.dependencies.androidxroomcompiler
|
||||
|
||||
implementation project(":OCH:mogo-och-common-module")
|
||||
compileOnly project(":libraries:mogo-map")
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
package com.mogo.och.sweeper.bean
|
||||
|
||||
data class WeltDataBean(
|
||||
var locLon: Double,//经度
|
||||
var locLat: Double,//纬度
|
||||
var weltDistance: Double,//贴边距离
|
||||
var cleanMode: Int,//清扫模式
|
||||
var cleanDirection: Int,//清扫方向
|
||||
var cleanIntensity: Int,//作业强度
|
||||
)
|
||||
@@ -9,7 +9,8 @@ class SweeperConst {
|
||||
companion object {
|
||||
|
||||
private const val BASE_URL_OCH_DEV = "http://tech-dev.zhidaohulian.com"
|
||||
private const val BASE_URL_OCH_QA = "https://tech-qa.zhidaohulian.com"
|
||||
//private const val BASE_URL_OCH_QA = "https://tech-qa.zhidaohulian.com"
|
||||
private const val BASE_URL_OCH_QA = "http://sweep-dev.svc.zhidaoauto.com"
|
||||
private const val BASE_URL_OCH_RELEASE = "https://tech.zhidaohulian.com"
|
||||
|
||||
@JvmStatic
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.mogo.och.sweeper.database;
|
||||
|
||||
import com.mogo.commons.AbsMogoApplication;
|
||||
import com.mogo.och.sweeper.database.bean.WeltDataBean;
|
||||
import com.mogo.och.sweeper.database.dao.WeltDataDao;
|
||||
|
||||
import androidx.room.Database;
|
||||
import androidx.room.Room;
|
||||
import androidx.room.RoomDatabase;
|
||||
|
||||
//注解Database告诉系统这是Room数据库对象
|
||||
//entities指定该数据库有哪些表,多张表就逗号分隔
|
||||
//version指定数据库版本号,升级时需要用到
|
||||
//数据库继承自RoomDatabase
|
||||
@Database(entities = {WeltDataBean.class}, version = 1)
|
||||
public abstract class MyDataBase extends RoomDatabase {
|
||||
private static final String DATABASE_NAME = "weltData_db";
|
||||
|
||||
//结合单例模式完成数据库实例创建
|
||||
public static MyDataBase getInstance() {
|
||||
return SingleTon.instance;
|
||||
}
|
||||
|
||||
private static class SingleTon {
|
||||
private static final MyDataBase instance =
|
||||
Room.databaseBuilder(AbsMogoApplication.getApp().getApplicationContext(), MyDataBase.class, DATABASE_NAME).build();
|
||||
}
|
||||
public abstract WeltDataDao getWeltDataDao();
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
package com.mogo.och.sweeper.database.bean;
|
||||
|
||||
import androidx.room.ColumnInfo;
|
||||
import androidx.room.Entity;
|
||||
import androidx.room.Index;
|
||||
import androidx.room.PrimaryKey;
|
||||
|
||||
@Entity(tableName = WeltDataBean.WeltDataTable, indices = {@Index(value = "id", unique = true)})
|
||||
public class WeltDataBean {
|
||||
|
||||
public static final String WeltDataTable = "welt_data_table";
|
||||
//ColumnInfo用于指定该字段存储在表中的名字,并指定类型
|
||||
|
||||
@PrimaryKey(autoGenerate = true)
|
||||
|
||||
@ColumnInfo(name = "id", typeAffinity = ColumnInfo.INTEGER)
|
||||
|
||||
private int id;
|
||||
|
||||
@ColumnInfo(name = "subTaskId", typeAffinity = ColumnInfo.INTEGER)//子任务id
|
||||
|
||||
private int subTaskId;
|
||||
|
||||
@ColumnInfo(name = "locLon", typeAffinity = ColumnInfo.REAL)
|
||||
|
||||
private double locLon;//自车RTK定位经度
|
||||
|
||||
@ColumnInfo(name = "locLat", typeAffinity = ColumnInfo.REAL)
|
||||
|
||||
private double locLat;//自车RTK定位纬度
|
||||
|
||||
@ColumnInfo(name = "weltDistance", typeAffinity = ColumnInfo.REAL)
|
||||
|
||||
private double weltDistance;//贴边距离
|
||||
|
||||
@ColumnInfo(name = "cleanMode", typeAffinity = ColumnInfo.INTEGER)
|
||||
|
||||
private int cleanMode;//清扫作业模式 1–纯扫 2--洗扫, 3--纯洗, 4--纯吸
|
||||
|
||||
@ColumnInfo(name = "cleanDirection", typeAffinity = ColumnInfo.INTEGER)
|
||||
|
||||
private int cleanDirection;//清扫方向 1--两侧, 2--左侧, 3--右侧
|
||||
|
||||
@ColumnInfo(name = "cleanIntensity", typeAffinity = ColumnInfo.INTEGER)
|
||||
|
||||
private int cleanIntensity;//清扫强度 1--两侧, 2--左侧, 3--右侧
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public int getSubTaskId() {
|
||||
return subTaskId;
|
||||
}
|
||||
|
||||
public void setSubTaskId(int subTaskId) {
|
||||
this.subTaskId = subTaskId;
|
||||
}
|
||||
|
||||
public double getLocLon() {
|
||||
return locLon;
|
||||
}
|
||||
|
||||
public void setLocLon(double locLon) {
|
||||
this.locLon = locLon;
|
||||
}
|
||||
|
||||
public double getLocLat() {
|
||||
return locLat;
|
||||
}
|
||||
|
||||
public void setLocLat(double locLat) {
|
||||
this.locLat = locLat;
|
||||
}
|
||||
|
||||
public double getWeltDistance() {
|
||||
return weltDistance;
|
||||
}
|
||||
|
||||
public void setWeltDistance(double weltDistance) {
|
||||
this.weltDistance = weltDistance;
|
||||
}
|
||||
|
||||
public int getCleanMode() {
|
||||
return cleanMode;
|
||||
}
|
||||
|
||||
public void setCleanMode(int cleanMode) {
|
||||
this.cleanMode = cleanMode;
|
||||
}
|
||||
|
||||
public int getCleanDirection() {
|
||||
return cleanDirection;
|
||||
}
|
||||
|
||||
public void setCleanDirection(int cleanDirection) {
|
||||
this.cleanDirection = cleanDirection;
|
||||
}
|
||||
|
||||
public int getCleanIntensity() {
|
||||
return cleanIntensity;
|
||||
}
|
||||
|
||||
public void setCleanIntensity(int cleanIntensity) {
|
||||
this.cleanIntensity = cleanIntensity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "WeltDataBean{" +
|
||||
"id=" + id +
|
||||
", subTaskId='" + subTaskId + '\'' +
|
||||
", locLon=" + locLon +
|
||||
", locLat=" + locLat +
|
||||
", weltDistance=" + weltDistance +
|
||||
", cleanMode=" + cleanMode +
|
||||
", cleanDirection=" + cleanDirection +
|
||||
", cleanIntensity=" + cleanIntensity +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.mogo.och.sweeper.database.dao;
|
||||
|
||||
import com.mogo.och.sweeper.database.bean.WeltDataBean;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import androidx.room.Dao;
|
||||
import androidx.room.Insert;
|
||||
import androidx.room.OnConflictStrategy;
|
||||
import androidx.room.Query;
|
||||
|
||||
import static com.mogo.och.sweeper.database.bean.WeltDataBean.WeltDataTable;
|
||||
|
||||
@Dao
|
||||
public interface WeltDataDao {
|
||||
//插入数据
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
void insert(WeltDataBean fileInfo);
|
||||
|
||||
//删除所有数据
|
||||
@Query("DELETE FROM " + WeltDataTable)
|
||||
int deleteAllWeltData();
|
||||
|
||||
//查询所有数据
|
||||
@Query("SELECT * FROM " + WeltDataTable)
|
||||
List<WeltDataBean> loadAllWeltDataInfo();
|
||||
}
|
||||
@@ -1,12 +1,14 @@
|
||||
package com.mogo.och.sweeper.fragment;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.os.Looper;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import com.amap.api.maps.model.LatLng;
|
||||
import com.mogo.commons.AbsMogoApplication;
|
||||
import com.mogo.commons.mvp.IView;
|
||||
import com.mogo.commons.mvp.MvpFragment;
|
||||
@@ -18,6 +20,7 @@ import com.mogo.eagle.core.function.call.hmi.CallerHmiManager;
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager;
|
||||
import com.mogo.eagle.core.function.view.MapBizView;
|
||||
import com.mogo.eagle.core.utilcode.mogo.view.OnPreventFastClickListener;
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
|
||||
import com.mogo.map.listener.IMogoMapListener;
|
||||
import com.mogo.map.listener.MogoMapListenerHandler;
|
||||
import com.mogo.map.marker.IMogoMarkerManager;
|
||||
@@ -26,7 +29,7 @@ import com.mogo.map.uicontroller.VisualAngleMode;
|
||||
import com.mogo.och.common.module.map.AmapNaviToDestinationModel;
|
||||
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil;
|
||||
import com.mogo.och.sweeper.R;
|
||||
import com.mogo.och.sweeper.bean.WeltDataBean;
|
||||
import com.mogo.och.sweeper.database.bean.WeltDataBean;
|
||||
import com.mogo.och.sweeper.callback.IWeltMapSwitchToSmallCallback;
|
||||
import com.mogo.och.sweeper.view.SweeperTrafficDataView;
|
||||
import com.mogo.och.sweeper.view.WeltSmallMapView;
|
||||
@@ -332,6 +335,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
|
||||
refreshNavi();
|
||||
} else if (id == R.id.sweeper_switch_to_big) {
|
||||
showOrHideOverMapViewFragment(true);
|
||||
setWeltData();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -339,6 +343,7 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
|
||||
|
||||
/**
|
||||
* 设置作业任务全览图隐藏或者显示
|
||||
*
|
||||
* @param isShow
|
||||
*/
|
||||
public void showOrHideOverMapViewFragment(boolean isShow) {
|
||||
@@ -376,19 +381,85 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
|
||||
showOrHideOverMapViewFragment(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置贴边数据到地图
|
||||
*
|
||||
* @param weltDataBeans
|
||||
*/
|
||||
public void setWeltDataToMap(List<WeltDataBean> weltDataBeans) {
|
||||
if (mMapWeltView != null) {
|
||||
mMapWeltView.setWeltData(weltDataBeans);
|
||||
runOnUIThread(() -> {
|
||||
mMapWeltView.drawablePolyline();
|
||||
});
|
||||
}
|
||||
if (mWeltMapOverViewFragment != null && mWeltMapOverViewFragment.isVisible()) {
|
||||
mWeltMapOverViewFragment.setWeltData(weltDataBeans);
|
||||
runOnUIThread(() -> {
|
||||
mWeltMapOverViewFragment.drawablePolyline();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加起点和终点
|
||||
*/
|
||||
public void addStartAndEndMarker(LatLng startPoint, LatLng endPoint) {
|
||||
if (mMapWeltView != null) {
|
||||
mMapWeltView.addStartAndEndMarker(startPoint, endPoint);
|
||||
}
|
||||
if (mWeltMapOverViewFragment != null && mWeltMapOverViewFragment.isVisible()) {
|
||||
mWeltMapOverViewFragment.addStartAndEndMarker(startPoint, endPoint);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除marker标记和任务路线数据
|
||||
*/
|
||||
public void clearAllMarkerAndPolyline() {
|
||||
if (mMapWeltView != null) {
|
||||
mMapWeltView.clearAllMarkerAndPolyline();
|
||||
}
|
||||
if (mWeltMapOverViewFragment != null) {
|
||||
mWeltMapOverViewFragment.clearAllMarkerAndPolyline();
|
||||
}
|
||||
}
|
||||
|
||||
private void runOnUIThread(Runnable executor) {
|
||||
if (executor == null) {
|
||||
return;
|
||||
}
|
||||
if (Looper.myLooper() != Looper.getMainLooper()) {
|
||||
UiThreadHandler.post(executor);
|
||||
} else {
|
||||
executor.run();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* mock 贴边假数据
|
||||
*/
|
||||
private void setWeltData() {
|
||||
List<WeltDataBean> weltDataBean = new ArrayList<>();
|
||||
weltDataBean.add(new WeltDataBean(116.38851540542558, 39.97419244219622, -10, 1, 1, 1));
|
||||
weltDataBean.add(new WeltDataBean(116.38777443467706, 39.96694323029558, 8, 1, 1, 1));
|
||||
weltDataBean.add(new WeltDataBean(116.39311478161825, 39.967085313029074, 16, 1, 1, 1));
|
||||
weltDataBean.add(new WeltDataBean(116.40963237692603, 39.975055860562826, 30, 1, 1, 1));
|
||||
weltDataBean.add(new WeltDataBean(116.41146331146084, 39.97513910337909, -9999.0, 1, 1, 1));
|
||||
weltDataBean.add(new WeltDataBean(116.40748849300006, 39.96752223478818, -10000.0, 1, 1, 1));
|
||||
weltDataBean.add(new WeltDataBean(116.42670283855335, 39.97526250389533, 1000, 1, 1, 1));
|
||||
mMapWeltView.setWeltData(weltDataBean);
|
||||
mMapWeltView.drawablePolyline();
|
||||
weltDataBean.add(getWeltDataBean(116.38851540542558, 39.97419244219622, -10.0));
|
||||
weltDataBean.add(getWeltDataBean(116.38777443467706, 39.96694323029558, 8.0));
|
||||
weltDataBean.add(getWeltDataBean(116.39311478161825, 39.967085313029074, 16.0));
|
||||
weltDataBean.add(getWeltDataBean(116.40963237692603, 39.975055860562826, 30.0));
|
||||
weltDataBean.add(getWeltDataBean(116.41146331146084, 39.97513910337909, -9999.0));
|
||||
weltDataBean.add(getWeltDataBean(116.40748849300006, 39.96752223478818, -10000.0));
|
||||
weltDataBean.add(getWeltDataBean(116.42670283855335, 39.97526250389533, 1000.0));
|
||||
setWeltDataToMap(weltDataBean);
|
||||
addStartAndEndMarker(CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(AbsMogoApplication.getApp(),116.38851540542558,39.97419244219622),
|
||||
CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(AbsMogoApplication.getApp(),116.42670283855335,39.97526250389533));
|
||||
}
|
||||
|
||||
private WeltDataBean getWeltDataBean(Double locLon, Double locLat, Double weltDistance) {
|
||||
//把wgs坐标系坐标转换成gcj坐标
|
||||
LatLng latLng= CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(AbsMogoApplication.getApp(),locLon,locLat);
|
||||
WeltDataBean weltDataBean = new WeltDataBean();
|
||||
weltDataBean.setLocLon(latLng.longitude);
|
||||
weltDataBean.setLocLat(latLng.latitude);
|
||||
weltDataBean.setWeltDistance(weltDistance);
|
||||
return weltDataBean;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@ package com.mogo.och.sweeper.fragment
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.annotation.MainThread
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import chassis.ChassisStatesOuterClass
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
@@ -186,7 +188,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@UiThread
|
||||
fun onSweeperFutianCleanSystemState(cleanSystemState: ChassisStatesOuterClass.SweeperFuTianTaskSystemStates) {
|
||||
this.mCleanSystemState = cleanSystemState
|
||||
sweeper_cl_work_mode.setSweeperFutianCleanSystemState(mSubTaskType, cleanSystemState)
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.mogo.och.sweeper.fragment
|
||||
|
||||
import android.os.Bundle
|
||||
import com.amap.api.maps.model.LatLng
|
||||
import com.mogo.commons.mvp.BaseFragment
|
||||
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil
|
||||
import com.mogo.och.sweeper.R
|
||||
import com.mogo.och.sweeper.bean.WeltDataBean
|
||||
import com.mogo.och.sweeper.callback.IWeltMapSwitchToSmallCallback
|
||||
import com.mogo.och.sweeper.database.bean.WeltDataBean
|
||||
import kotlinx.android.synthetic.main.fragment_welt_map_overview.*
|
||||
import kotlinx.android.synthetic.main.sweeper_welt_map_overview.*
|
||||
|
||||
@@ -26,7 +26,6 @@ class WeltMapOverViewFragment(var mIWeltMapSwitchToSmallCallBack: IWeltMapSwitch
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
setWeltData()
|
||||
setLegendData()
|
||||
sweeperSwitchToSmall.setOnClickListener {
|
||||
mIWeltMapSwitchToSmallCallBack?.onWeltMapSwitchToSmall()
|
||||
@@ -57,29 +56,29 @@ class WeltMapOverViewFragment(var mIWeltMapSwitchToSmallCallBack: IWeltMapSwitch
|
||||
super.onDestroy()
|
||||
weltMapOverView.onDestroy()
|
||||
}
|
||||
|
||||
/**
|
||||
* mock 贴边假数据
|
||||
* 设置任务路线数据
|
||||
*/
|
||||
private fun setWeltData() {
|
||||
val weltDataBean: MutableList<WeltDataBean> = ArrayList()
|
||||
weltDataBean.add(WeltDataBean(116.38851540542558, 39.97419244219622, -10.0, 1, 1, 1))
|
||||
weltDataBean.add(WeltDataBean(116.38777443467706, 39.96694323029558, 8.0, 1, 1, 1))
|
||||
weltDataBean.add(WeltDataBean(116.39311478161825, 39.967085313029074, 16.0, 1, 1, 1))
|
||||
weltDataBean.add(WeltDataBean(116.40963237692603, 39.975055860562826, 30.0, 1, 1, 1))
|
||||
weltDataBean.add(WeltDataBean(116.41146331146084, 39.97513910337909, -9999.0, 1, 1, 1))
|
||||
weltDataBean.add(WeltDataBean(116.40748849300006, 39.96752223478818, -10000.0, 1, 1, 1))
|
||||
weltDataBean.add(WeltDataBean(116.42670283855335, 39.97526250389533, 1000.0, 1, 1, 1))
|
||||
weltMapOverView.setWeltData(weltDataBean)
|
||||
weltMapOverView.drawablePolyline()
|
||||
weltMapOverView.addStartAndEndMarker(
|
||||
CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(context, 116.38851540542558, 39.97419244219622),
|
||||
CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(
|
||||
context, 116.42670283855335, 39.97526250389533
|
||||
)
|
||||
)
|
||||
fun setWeltData(weltDatas:MutableList<WeltDataBean>) {
|
||||
weltMapOverView.setWeltData(weltDatas)
|
||||
}
|
||||
|
||||
/**
|
||||
* 绘制任务路线数据
|
||||
*/
|
||||
fun drawablePolyline(){
|
||||
weltMapOverView.drawablePolyline()
|
||||
}
|
||||
/**
|
||||
* 添加起点和终点marker
|
||||
*/
|
||||
fun addStartAndEndMarker(startPoint: LatLng, endPoint: LatLng){
|
||||
weltMapOverView.drawStartAndEndMarker(startPoint,endPoint)
|
||||
}
|
||||
|
||||
fun clearAllMarkerAndPolyline(){
|
||||
weltMapOverView.clearAllMarkerAndPolyline()
|
||||
}
|
||||
/**
|
||||
* 设置图例数据
|
||||
*/
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.mogo.och.sweeper.presenter;
|
||||
|
||||
import android.os.Looper;
|
||||
|
||||
import com.amap.api.maps.model.LatLng;
|
||||
import com.amap.api.navi.model.NaviLatLng;
|
||||
import com.mogo.commons.AbsMogoApplication;
|
||||
import com.mogo.commons.mvp.Presenter;
|
||||
@@ -17,6 +18,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
|
||||
import com.mogo.och.common.module.manager.OCHAdasAbilityManager;
|
||||
import com.mogo.och.common.module.map.AmapNaviToDestinationModel;
|
||||
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil;
|
||||
import com.mogo.och.sweeper.bean.SweeperMainTaskBean;
|
||||
import com.mogo.och.sweeper.bean.SweeperSubTaskBean;
|
||||
import com.mogo.och.sweeper.bean.SweeperSubTaskDetailBean;
|
||||
@@ -25,6 +27,8 @@ import com.mogo.och.sweeper.callback.ISweeperControllerStatusCallback;
|
||||
import com.mogo.och.sweeper.callback.ISweeperTaskCallback;
|
||||
import com.mogo.och.sweeper.constant.SubTaskTypeEnum;
|
||||
import com.mogo.och.sweeper.constant.TaskStatusEnum;
|
||||
import com.mogo.och.sweeper.database.MyDataBase;
|
||||
import com.mogo.och.sweeper.database.bean.WeltDataBean;
|
||||
import com.mogo.och.sweeper.fragment.SweeperFragment;
|
||||
import com.mogo.och.sweeper.model.SweeperTaskModel;
|
||||
import com.mogo.och.sweeper.util.SweeperFutianCmdUtil;
|
||||
@@ -59,10 +63,15 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
private int mSubTaskId = 0;
|
||||
//当前是否最后一个子任务
|
||||
private boolean mIsLastSubtask = false;
|
||||
// 底盘数据回调时间间隔
|
||||
// 清扫模式回调时间间隔
|
||||
private static final long VEHICLE_STATE_INTERVAL_MILLIS = 500L;
|
||||
// 当前时间戳
|
||||
private long mCurrentTimeMillis;
|
||||
// 清扫模式当前时间戳
|
||||
private long mVehicleStateCurrentTimeMillis;
|
||||
|
||||
// 贴边数据回调时间间隔
|
||||
private static final long WELT_DATA_INTERVAL_MILLIS = 2000L;
|
||||
// 贴边数据当前时间戳
|
||||
private long mWeltDataCurrentTimeMillis;
|
||||
|
||||
public SweeperPresenter(SweeperFragment view) {
|
||||
super(view);
|
||||
@@ -172,6 +181,10 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 当前子任务id
|
||||
* @param mSubTaskId
|
||||
*/
|
||||
public void setSubTaskId(int mSubTaskId) {
|
||||
this.mSubTaskId = mSubTaskId;
|
||||
SweeperTaskModel.getInstance().setSubTaskId(mSubTaskId);
|
||||
@@ -235,11 +248,14 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
|
||||
@Override
|
||||
public void onSweeperFutianCleanSystemState(@NonNull ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState) {
|
||||
long current = System.currentTimeMillis();
|
||||
if (current - mCurrentTimeMillis <= VEHICLE_STATE_INTERVAL_MILLIS) {
|
||||
if (cleanSystemState==null){
|
||||
return;
|
||||
}
|
||||
mCurrentTimeMillis = current;
|
||||
long current = System.currentTimeMillis();
|
||||
if (current - mVehicleStateCurrentTimeMillis <= VEHICLE_STATE_INTERVAL_MILLIS) {
|
||||
return;
|
||||
}
|
||||
mVehicleStateCurrentTimeMillis = current;
|
||||
boolean clean_open_requirement = cleanSystemState.getSecuMotWorkSts();
|
||||
// 洗扫
|
||||
boolean clean_mode_wash_sweep = cleanSystemState.getSecuModWashSweepSts();
|
||||
@@ -286,13 +302,46 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
|
||||
.append(clean_intensity_strong);
|
||||
|
||||
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianCleanSystemState:"+stringBuilder);
|
||||
runOnUIThread(() -> mView.onSweeperFutianCleanSystemState(cleanSystemState));
|
||||
mView.onSweeperFutianCleanSystemState(cleanSystemState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSweeperFutianTaskIndexData(@NonNull RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex roboSweeperTaskIndex) {
|
||||
|
||||
|
||||
long current = System.currentTimeMillis();
|
||||
if (current - mWeltDataCurrentTimeMillis <= WELT_DATA_INTERVAL_MILLIS) {
|
||||
return;
|
||||
}
|
||||
mWeltDataCurrentTimeMillis = current;
|
||||
if (roboSweeperTaskIndex==null){
|
||||
return;
|
||||
}
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
stringBuilder.append("清扫模式:")
|
||||
.append(roboSweeperTaskIndex.getCleanMode())
|
||||
.append("清扫方向:")
|
||||
.append(roboSweeperTaskIndex.getCleanDirection())
|
||||
.append("清扫强度:")
|
||||
.append(roboSweeperTaskIndex.getCleanIntensity())
|
||||
.append("贴边距离:")
|
||||
.append(roboSweeperTaskIndex.getDistToRefEdgePoint())
|
||||
.append("经度:")
|
||||
.append(roboSweeperTaskIndex.getLocLon())
|
||||
.append("纬度:")
|
||||
.append(roboSweeperTaskIndex.getLocLat());
|
||||
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianTaskIndexData:"+stringBuilder);
|
||||
//保存贴边数据到数据库中
|
||||
WeltDataBean weltDataBean=new WeltDataBean();
|
||||
//把wgs坐标系坐标转换成gcj坐标
|
||||
LatLng latLng=CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(AbsMogoApplication.getApp(),roboSweeperTaskIndex.getLocLon(),roboSweeperTaskIndex.getLocLat());
|
||||
weltDataBean.setLocLon(latLng.longitude);
|
||||
weltDataBean.setLocLat(latLng.latitude);
|
||||
weltDataBean.setWeltDistance(roboSweeperTaskIndex.getDistToRefEdgePoint());
|
||||
weltDataBean.setCleanMode(roboSweeperTaskIndex.getCleanMode());
|
||||
weltDataBean.setCleanDirection(roboSweeperTaskIndex.getCleanDirection());
|
||||
weltDataBean.setCleanIntensity(roboSweeperTaskIndex.getCleanIntensity());
|
||||
weltDataBean.setSubTaskId(mSubTaskId);
|
||||
MyDataBase.getInstance().getWeltDataDao().insert(weltDataBean);
|
||||
mView.setWeltDataToMap(MyDataBase.getInstance().getWeltDataDao().loadAllWeltDataInfo());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -15,9 +15,8 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Liste
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil
|
||||
import com.mogo.och.sweeper.R
|
||||
import com.mogo.och.sweeper.bean.WeltDataBean
|
||||
import com.mogo.och.sweeper.database.bean.WeltDataBean
|
||||
import kotlinx.android.synthetic.main.sweeper_welt_map_overview.view.*
|
||||
|
||||
/**
|
||||
@@ -31,8 +30,10 @@ class WeltMapOverView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
|
||||
private var mPolyline: Polyline? = null
|
||||
private var colorList: MutableList<Int> = mutableListOf()
|
||||
private val mLineMarkers: MutableList<Marker?> = mutableListOf()
|
||||
|
||||
//清扫车任务地图
|
||||
private val TAG = "WeltMapOverView"
|
||||
|
||||
constructor(context: Context) : super(context) {}
|
||||
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
|
||||
initView(context)
|
||||
@@ -49,6 +50,7 @@ class WeltMapOverView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
|
||||
CallerChassisLocationGCJ02ListenerManager.addListener(TAG, this)
|
||||
setLegendData()
|
||||
}
|
||||
|
||||
private fun initAMapView() {
|
||||
mAMap = sweeperTextureMapView.map
|
||||
// 地图文字标注
|
||||
@@ -62,7 +64,7 @@ class WeltMapOverView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
|
||||
// 设置 锚点 图标
|
||||
mCarMarker = mAMap?.addMarker(
|
||||
MarkerOptions()
|
||||
.icon(BitmapDescriptorFactory.fromResource(R.drawable.sweeper_car_small))
|
||||
.icon(BitmapDescriptorFactory.fromResource(R.drawable.sweeper_car_big))
|
||||
.anchor(0.5f, 0.5f)
|
||||
)
|
||||
// 设置地图的样式
|
||||
@@ -99,6 +101,7 @@ class WeltMapOverView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) {
|
||||
mogoLocation?.let { gnssInfo ->
|
||||
val currentLatLng = LatLng(gnssInfo.latitude, gnssInfo.longitude)
|
||||
@@ -118,6 +121,7 @@ class WeltMapOverView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据贴边数据绘制任务路线
|
||||
*/
|
||||
@@ -140,9 +144,9 @@ class WeltMapOverView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加起点和终点的marker
|
||||
* 绘制起点和终点的marker
|
||||
*/
|
||||
fun addStartAndEndMarker(startPoint: LatLng, endPoint: LatLng) {
|
||||
fun drawStartAndEndMarker(startPoint: LatLng, endPoint: LatLng) {
|
||||
val startMarker = mAMap?.addMarker(MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.start_maker_icon)))
|
||||
startMarker?.position = startPoint
|
||||
mLineMarkers.add(startMarker)
|
||||
@@ -152,32 +156,26 @@ class WeltMapOverView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除maker
|
||||
* 清除所有标记和路线
|
||||
*/
|
||||
private fun clearMarkers() {
|
||||
public fun clearAllMarkerAndPolyline() {
|
||||
mPolyline?.remove()
|
||||
for (i in mLineMarkers.indices) {
|
||||
mLineMarkers[i]?.isVisible = false
|
||||
mLineMarkers[i]?.remove()
|
||||
}
|
||||
mLineMarkers.clear()
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除任务路线
|
||||
*/
|
||||
fun clearPolyline() {
|
||||
mPolyline?.remove()
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置贴边数据
|
||||
*/
|
||||
fun setWeltData(weltData: MutableList<WeltDataBean>) {
|
||||
this.mWeltData = weltData
|
||||
for (i in mWeltData.indices) {
|
||||
mCoordinatesLatLng.add(CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(context, mWeltData[i].locLon, mWeltData[i].locLat))
|
||||
mCoordinatesLatLng.add(LatLng(mWeltData[i].locLat, mWeltData[i].locLon))
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置图例数据
|
||||
*/
|
||||
|
||||
@@ -16,7 +16,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil
|
||||
import com.mogo.och.sweeper.R
|
||||
import com.mogo.och.sweeper.bean.WeltDataBean
|
||||
import com.mogo.och.sweeper.database.bean.WeltDataBean
|
||||
import kotlinx.android.synthetic.main.sweeper_welt_small_map_view.view.*
|
||||
|
||||
/**
|
||||
@@ -104,7 +104,7 @@ class WeltSmallMapView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
|
||||
uiSettings?.setLogoBottomMargin(-150) //设置Logo下边界距离屏幕底部的边距,设置为负值即可
|
||||
mAMap?.setOnMapLoadedListener(AMap.OnMapLoadedListener {
|
||||
d(SceneConstant.M_SWEEPER + TAG, "WeltView---onMapLoaded")
|
||||
//mAMap?.setPointToCenter(mAMapNaviView?.width?.div(2) ?: 0, mAMapNaviView?.height?.div(2) ?: 0)
|
||||
mAMap?.setPointToCenter(sweeperSmallTextureMapView.width / 2, sweeperSmallTextureMapView.height / 2)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -145,7 +145,6 @@ class WeltSmallMapView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
|
||||
polylineOptions.colorValues(colorList)
|
||||
// 绘制线
|
||||
mPolyline = mAMap?.addPolyline(polylineOptions)
|
||||
addStartAndEndMarker(mCoordinatesLatLng[0], mCoordinatesLatLng[mCoordinatesLatLng.size - 1])
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -153,7 +152,7 @@ class WeltSmallMapView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
|
||||
/**
|
||||
* 添加起点和终点的marker
|
||||
*/
|
||||
private fun addStartAndEndMarker(startPoint: LatLng, endPoint: LatLng) {
|
||||
fun addStartAndEndMarker(startPoint: LatLng, endPoint: LatLng) {
|
||||
val startMarker = mAMap?.addMarker(MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.start_maker_icon)))
|
||||
startMarker?.position = startPoint
|
||||
mLineMarkers.add(startMarker)
|
||||
@@ -163,23 +162,16 @@ class WeltSmallMapView : ConstraintLayout, IMoGoChassisLocationGCJ02Listener {
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除数据
|
||||
* 清除所有标记和路线
|
||||
*/
|
||||
private fun clearMarkers() {
|
||||
fun clearAllMarkerAndPolyline() {
|
||||
mPolyline?.remove()
|
||||
for (i in mLineMarkers.indices) {
|
||||
mLineMarkers[i]?.isVisible = false
|
||||
mLineMarkers[i]?.remove()
|
||||
}
|
||||
mLineMarkers.clear()
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除任务路线
|
||||
*/
|
||||
fun clearPolyline() {
|
||||
mPolyline?.remove()
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置贴边数据
|
||||
*/
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 44 KiB |
Reference in New Issue
Block a user