diff --git a/app/src/main/java/com/navinfo/outdoor/api/Constant.java b/app/src/main/java/com/navinfo/outdoor/api/Constant.java
index 9beb920..005a7e3 100644
--- a/app/src/main/java/com/navinfo/outdoor/api/Constant.java
+++ b/app/src/main/java/com/navinfo/outdoor/api/Constant.java
@@ -150,6 +150,9 @@ public class Constant {
     public static final int CAPACITY_EVALUATION=59;//能力测试的返回
     public static final int CHARGING_STATION_DISABLE=60;//能力测试的返回
     public static final int EVENT_WHAT_UPLOAD_PROGRESS=61;// 数据上传的进度progress
+    public static final int EVENT_WHAT_CHANGE_SLIDING_STATE=62;// 改变抽屉的状态
+    public static final int EVENT_WHAT_START_DRAW_LINE=63;// 开始绘制参考线
+    public static final int EVENT_WHAT_FINISH_DRAW_LINE=64;// 完成绘制参考线
     public static final String INTENT_POI_VIDEO_TYPE = "poi_video_type";
     public static int NUMBER = 200; //任务个数
     public static int LIMIT_TYPE = -1; //权限类型,普通任务-0,专属任务-1
diff --git a/app/src/main/java/com/navinfo/outdoor/base/BaseDrawerFragment.java b/app/src/main/java/com/navinfo/outdoor/base/BaseDrawerFragment.java
index d1da9e5..7a15e8f 100644
--- a/app/src/main/java/com/navinfo/outdoor/base/BaseDrawerFragment.java
+++ b/app/src/main/java/com/navinfo/outdoor/base/BaseDrawerFragment.java
@@ -175,4 +175,14 @@ public abstract class BaseDrawerFragment extends BaseFragment {
         }
     }
 
+    /**
+     * 隐藏抽屉界面
+     * */
+    public void changeSlidingLayout(int isVisible, SlidingUpPanelLayout.PanelState panelState) {
+        Message msg = Message.obtain();
+        msg.what = Constant.EVENT_WHAT_CHANGE_SLIDING_STATE;
+        msg.arg1 = isVisible;
+        msg.obj = panelState;
+        EventBus.getDefault().post(msg);
+    }
 }
diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java
index 140e8ef..2a27aed 100644
--- a/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java
+++ b/app/src/main/java/com/navinfo/outdoor/fragment/PoiVideoFragment.java
@@ -63,6 +63,7 @@ import com.navinfo.outdoor.util.TimestampUtil;
 import com.navinfo.outdoor.util.ToastUtils;
 import com.navinfo.outdoor.util.UploadUtils;
 import com.navinfo.outdoor.util.ZipUtils;
+import com.sothree.slidinguppanel.SlidingUpPanelLayout;
 import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor;
 import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
 import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
@@ -96,6 +97,7 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick
     private StringBuilder poiVideoBuilder;
     private LatLng rearLatLng;
     private boolean booleanExtra = true;
+    private TextView tvDrawLine; // 绘制辅助线
 
     public static PoiVideoFragment newInstance(Bundle bundle) {
         PoiVideoFragment fragment = new PoiVideoFragment();
@@ -233,7 +235,7 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick
             @Override
             public boolean onLongClick(View v) {
                 DialogSettings.style = DialogSettings.STYLE.STYLE_IOS;
-                MessageDialog.show((AppCompatActivity) Objects.requireNonNull(getContext()), "提示", "是否删除", "确定", "取消").setOkButton(new OnDialogButtonClickListener() {
+                MessageDialog.show((AppCompatActivity) requireActivity(), "提示", "是否删除", "确定", "取消").setOkButton(new OnDialogButtonClickListener() {
                     @Override
                     public boolean onClick(BaseDialog baseDialog, View v) {
                         poiVideoBuilder.append(TimestampUtil.time()).append(",").append("点击了长按删除图片的 按钮,");
@@ -251,6 +253,8 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick
         });
         btnRoadSave = findViewById(R.id.btn_poi_video_save);
         btnRoadSave.setOnClickListener(this);
+        tvDrawLine = findViewById(R.id.tv_draw_line_poi_video);
+        tvDrawLine.setOnClickListener(this::onClick);
         Button btnPoiVideoUpload = findViewById(R.id.btn_poi_video_upload);
         btnPoiVideoUpload.setOnClickListener(this);
         //添加数据
@@ -400,7 +404,7 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick
                 }
                 ivPoiVideoPicture.setImageDrawable(null);
                 fmPoiVideoPic.setTag(null);
-            } else {
+            }  else {
                 boolean isImageLoad = false;
                 for (int i = 0; i < fileListByUUID.size(); i++) {
                     File videoFile = fileListByUUID.get(i);
@@ -415,6 +419,13 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick
                 fmPoiVideoPic.setTag(fileListByUUID);
             }
             initPoiVideoSharePre();
+        } else if (data.what == Constant.EVENT_WHAT_FINISH_DRAW_LINE) {
+            // 显示原有抽屉画面
+            changeSlidingLayout(View.VISIBLE, SlidingUpPanelLayout.PanelState.COLLAPSED);
+            if (data.arg1 == 1) {
+                List<LatLng> drawPoints = (List<LatLng>) data.obj;
+                showPoiEntity.setDrawLine(GeometryTools.getLineString(drawPoints));
+            }
         }
     }
 
@@ -509,9 +520,23 @@ public class PoiVideoFragment extends BaseDrawerFragment implements View.OnClick
                     Constant.isPresent = false;
                 }
                 break;
+            case R.id.tv_draw_line_poi_video:
+                // 开始绘制辅助线,隐藏当前界面,展示地图,用户点击绘制线
+                changeSlidingLayout(View.GONE, SlidingUpPanelLayout.PanelState.HIDDEN);
+                startDrawLine();
+                break;
         }
     }
 
+    /**
+     * 开始绘制参考线
+     * */
+    private void startDrawLine() {
+        Message drawMsg = Message.obtain();
+        drawMsg.what = Constant.EVENT_WHAT_START_DRAW_LINE;
+        EventBus.getDefault().post(drawMsg);
+    }
+
     public void initPoiSaveLocal(boolean isLocal) {
         XXPermissions.with(getContext())
                 .permission(Permission.MANAGE_EXTERNAL_STORAGE)
diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/RoadFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/RoadFragment.java
index ee683b5..6574e4a 100644
--- a/app/src/main/java/com/navinfo/outdoor/fragment/RoadFragment.java
+++ b/app/src/main/java/com/navinfo/outdoor/fragment/RoadFragment.java
@@ -67,6 +67,7 @@ import com.navinfo.outdoor.util.AWMp4ParserHelper;
 import com.navinfo.outdoor.util.Geohash;
 import com.navinfo.outdoor.util.GeometryTools;
 import com.navinfo.outdoor.util.ZipUtils;
+import com.sothree.slidinguppanel.SlidingUpPanelLayout;
 import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptor;
 import com.tencent.tencentmap.mapsdk.maps.model.BitmapDescriptorFactory;
 import com.tencent.tencentmap.mapsdk.maps.model.LatLng;
@@ -105,6 +106,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
     private RadioGroup rgRoadStatus; // 道路状态的radioGroup
     private EditText edtCheckedOther;
     private int existence = 0; // 是否存在
+    private TextView tvDrawLine; // 绘制辅助线
 
     public static RoadFragment newInstance(Bundle bundle) {
         RoadFragment fragment = new RoadFragment();
@@ -150,18 +152,18 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
         if (showPoiEntity != null) {
             if (showPoiEntity.getTaskStatus() == 5) {
                 DialogSettings.style = DialogSettings.STYLE.STYLE_IOS;
-                MessageDialog.show((AppCompatActivity) Objects.requireNonNull(getActivity()), "提示", "当前在任务作业中,是否退出", "确定", "取消").setOnOkButtonClickListener(new OnDialogButtonClickListener() {
+                MessageDialog.show((AppCompatActivity) requireActivity(), "提示", "当前在任务作业中,是否退出", "确定", "取消").setOnOkButtonClickListener(new OnDialogButtonClickListener() {
                     @Override
                     public boolean onClick(BaseDialog baseDialog, View v) {
                         roadBuilder.append(TimestampUtil.time()).append(",").append("点击了返回当前页面的 确定 按钮,");
                         initEndReceiveTask(HttpInterface.UNRECEIVED_POLYGON_TASK, showPoiEntity);
-                        Objects.requireNonNull(getActivity()).getSupportFragmentManager().popBackStack();
+                        requireActivity().getSupportFragmentManager().popBackStack();
                         return false;
                     }
                 });
             } else if (showPoiEntity.getTaskStatus() == 0 || showPoiEntity.getTaskStatus() == 1) {
                 DialogSettings.style = DialogSettings.STYLE.STYLE_IOS;
-                MessageDialog.show((AppCompatActivity) Objects.requireNonNull(getActivity()), "提示", "当前在任务作业中,是否退出", "确定", "取消").setOnOkButtonClickListener(new OnDialogButtonClickListener() {
+                MessageDialog.show((AppCompatActivity) requireActivity(), "提示", "当前在任务作业中,是否退出", "确定", "取消").setOnOkButtonClickListener(new OnDialogButtonClickListener() {
                     @Override
                     public boolean onClick(BaseDialog baseDialog, View v) {
                         roadBuilder.append(TimestampUtil.time()).append(",").append("点击了返回当前页面的 确定 按钮,");
@@ -187,7 +189,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
                             obtain1.obj = isSliding;
                             EventBus.getDefault().post(obtain1);
                         }
-                        Objects.requireNonNull(getActivity()).getSupportFragmentManager().popBackStack();
+                        requireActivity().getSupportFragmentManager().popBackStack();
                         return false;
                     }
                 });
@@ -206,7 +208,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
                     obtain1.obj = isSliding;
                     EventBus.getDefault().post(obtain1);
                 }
-                Objects.requireNonNull(getActivity()).getSupportFragmentManager().popBackStack();
+                requireActivity().getSupportFragmentManager().popBackStack();
             }
         }
     }
@@ -264,7 +266,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
             @Override
             public boolean onLongClick(View v) {
                 DialogSettings.style = DialogSettings.STYLE.STYLE_IOS;
-                MessageDialog.show((AppCompatActivity) Objects.requireNonNull(getContext()), "提示", "是否删除", "确定", "取消").setOkButton(new OnDialogButtonClickListener() {
+                MessageDialog.show((AppCompatActivity) requireContext(), "提示", "是否删除", "确定", "取消").setOkButton(new OnDialogButtonClickListener() {
                     @Override
                     public boolean onClick(BaseDialog baseDialog, View v) {
                         roadBuilder.append(TimestampUtil.time()).append(",").append("点击长按删除 确定按钮,");
@@ -282,6 +284,8 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
         });
         btnRoadSave = findViewById(R.id.btn_road_save);
         btnRoadSave.setOnClickListener(this);
+        tvDrawLine = findViewById(R.id.tv_draw_line_road);
+        tvDrawLine.setOnClickListener(this::onClick);
         Button roadUpload = findViewById(R.id.road_upload);
         roadUpload.setOnClickListener(this);
         //数据展示
@@ -291,7 +295,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
     @Override
     protected void initData() {
         super.initData();
-        SharedPreferences sharedPreferences = Objects.requireNonNull(getActivity()).getSharedPreferences(Constant.MESSAGE_TYPE, Context.MODE_PRIVATE);
+        SharedPreferences sharedPreferences = requireActivity().getSharedPreferences(Constant.MESSAGE_TYPE, Context.MODE_PRIVATE);
         SharedPreferences.Editor sharedEdit = sharedPreferences.edit();
         @SuppressLint("SimpleDateFormat")
         DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
@@ -392,7 +396,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
                             || fileListByUUID.get(i).getPath().endsWith(".jpg")|| fileListByUUID.get(i).getPath().endsWith(".jpeg")) {
                         if (fileListByUUID.get(i).exists() && !isImageLoad) {
                             // 使用glide加载视频的第一帧
-                            Glide.with(Objects.requireNonNull(getActivity())).load(fileListByUUID.get(i)).into(ivRoadPicture);
+                            Glide.with(requireActivity()).load(fileListByUUID.get(i)).into(ivRoadPicture);
                             isImageLoad = true;
                         }
                     }
@@ -488,6 +492,13 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
                 fmRoadPic.setTag(fileListByUUID);
             }
             initRoadSharePre();
+        } else if (data.what == Constant.EVENT_WHAT_FINISH_DRAW_LINE) {
+            // 显示原有抽屉画面
+            changeSlidingLayout(View.VISIBLE, SlidingUpPanelLayout.PanelState.COLLAPSED);
+            if (data.arg1 == 1) {
+                List<LatLng> drawPoints = (List<LatLng>) data.obj;
+                showPoiEntity.setDrawLine(GeometryTools.getLineString(drawPoints));
+            }
         }
     }
 
@@ -601,10 +612,24 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
                     Constant.isPresent = false;
                 }
 
+                break;
+            case R.id.tv_draw_line_road:
+                // 开始绘制辅助线,隐藏当前界面,展示地图,用户点击绘制线
+                changeSlidingLayout(View.GONE, SlidingUpPanelLayout.PanelState.HIDDEN);
+                startDrawLine();
                 break;
         }
     }
 
+    /**
+     * 开始绘制参考线
+     * */
+    private void startDrawLine() {
+        Message drawMsg = Message.obtain();
+        drawMsg.what = Constant.EVENT_WHAT_START_DRAW_LINE;
+        EventBus.getDefault().post(drawMsg);
+    }
+
     public void initPoiSaveLocal(boolean isLocal) {
         XXPermissions.with(getContext())
                 .permission(Permission.MANAGE_EXTERNAL_STORAGE)
@@ -627,7 +652,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
                                 @Override
                                 public void run() {
                                     InsertAndUpdateUtils.getInstance().insertOrUpdate(getContext(), poiEntity);
-                                    Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() {
+                                    requireActivity().runOnUiThread(new Runnable() {
                                         @Override
                                         public void run() {
                                             if (isLocal) {
@@ -649,7 +674,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
                         if (never) {
                             ToastUtils.Message(getActivity(), "被永久拒绝授权,请手动授予权限");
                             // 如果是被永久拒绝就跳转到应用权限系统设置页面
-                            XXPermissions.startPermissionActivity(Objects.requireNonNull(getActivity()), permissions);
+                            XXPermissions.startPermissionActivity(requireActivity(), permissions);
                         }
                     }
                 });
@@ -826,7 +851,7 @@ public class RoadFragment extends BaseDrawerFragment implements View.OnClickList
         //表示文件名,系统将会在/dada/dada/包名/shared_prefs目录下生成
         //一个以该参数命名的.xml文件。第二个mode表示创建的模式,通过查看
         //方法注释得知,建议以0或者MODE_PRIVATE为默认值。
-        SharedPreferences poi = Objects.requireNonNull(getActivity()).getSharedPreferences(Constant.DATA_FILE, 0);
+        SharedPreferences poi = requireActivity().getSharedPreferences(Constant.DATA_FILE, 0);
         //获取Editor对象
         SharedPreferences.Editor edit = poi.edit();
         //根据要保存的数据的类型,调用对应的put方法,
diff --git a/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java b/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java
index 92b0f2f..ccc7526 100644
--- a/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java
+++ b/app/src/main/java/com/navinfo/outdoor/fragment/TreasureFragment.java
@@ -111,6 +111,7 @@ import com.tencent.tencentmap.mapsdk.maps.model.Polygon;
 import com.tencent.tencentmap.mapsdk.maps.model.PolygonOptions;
 import com.tencent.tencentmap.mapsdk.maps.model.Polyline;
 import com.tencent.tencentmap.mapsdk.maps.model.PolylineOptions;
+import com.tencent.tencentmap.mapsdk.maps.model.TencentMapGestureListener;
 
 import org.locationtech.jts.geom.Coordinate;
 import org.locationtech.jts.geom.Geometry;
@@ -130,6 +131,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.function.Consumer;
 import java.util.function.Predicate;
 
 /**
@@ -183,6 +185,8 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen
     private TencentMarkerUtils tencentMarkerUtils;
     private ImageView imgAutoMatchRoad; // 自动匹配道路
     private ImageView ivNaviDistance; // 按距离自动导航
+    private List<Marker> drawLineMarkerList = new ArrayList<>();
+    private Polyline drawLinePolyline;
 
     public static TreasureFragment newInstance(Bundle bundle) {
         TreasureFragment fragment = new TreasureFragment();
@@ -387,73 +391,6 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen
             }
         });
 
-        // 内部测试功能
-        ImageView imgViewSettingHook = findViewById(R.id.image_view);
-        imgViewSettingHook.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                View layer = findViewById(R.id.layer_visiable_setting);
-                if (layer.isShown()) {
-                    return;
-                }
-                settingHookClickCount++;
-                if(lastClickTime > 0){
-                    long secondClickTime = System.currentTimeMillis();//距离上次开机时间
-                    long dtime = secondClickTime - lastClickTime;
-                    if(dtime <800){
-                        if (settingHookClickCount>8) {
-                            Toast.makeText(getContext(), "打开设置功能", Toast.LENGTH_SHORT).show();
-                            layer.setVisibility(View.VISIBLE);
-                        } else {
-                            if (settingHookClickCount>3) {
-                                Toast.makeText(getContext(), "再点击"+(9-settingHookClickCount)+"下打开设置功能", Toast.LENGTH_SHORT).show();
-                            }
-                        }
-                    } else{
-                        lastClickTime = 0;
-                        settingHookClickCount = 1;
-                    }
-                }
-                lastClickTime = System.currentTimeMillis();
-            }
-        });
-//        Spinner spnBaseLocation = findViewById(R.id.spn_main_location);
-//        Spinner spnRefrenceLocation = findViewById(R.id.spn_reference_location);
-//        ArrayAdapter arrayAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_spinner_dropdown_item, android.R.id.text1, new String[]{"腾讯", "GPS"});
-//        spnBaseLocation.setAdapter(arrayAdapter);
-//        spnRefrenceLocation.setAdapter(arrayAdapter);
-//        spnRefrenceLocation.setSelection(1);
-//        spnBaseLocation.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
-//            @Override
-//            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
-//                if (i == 0) {
-//                    LocationLifeCycle.getInstance().setMainLocationFrom(LocationLifeCycle.LOCATION_FROM.TENCENT);
-//                } else if (i==1) {
-//                    LocationLifeCycle.getInstance().setMainLocationFrom(LocationLifeCycle.LOCATION_FROM.ORIGIN);
-//                }
-//            }
-//
-//            @Override
-//            public void onNothingSelected(AdapterView<?> adapterView) {
-//
-//            }
-//        });
-//
-//        spnRefrenceLocation.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
-//            @Override
-//            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
-//                if (i == 0) {
-//                    LocationLifeCycle.getInstance().setReferenceLocationFrom(LocationLifeCycle.LOCATION_FROM.TENCENT);
-//                } else if (i==1) {
-//                    LocationLifeCycle.getInstance().setReferenceLocationFrom(LocationLifeCycle.LOCATION_FROM.ORIGIN);
-//                }
-//            }
-//
-//            @Override
-//            public void onNothingSelected(AdapterView<?> adapterView) {
-//
-//            }
-//        });
     }
 
     /**
@@ -1132,6 +1069,116 @@ public class TreasureFragment extends BaseFragment implements View.OnClickListen
                     tvTenantGaps.setText("信号强度:强");
                 }
             }
+        } else if (data.what == Constant.EVENT_WHAT_CHANGE_SLIDING_STATE) { // 改变滑动窗口的状态
+            if (sliding_layout!=null) {
+                if (data.arg1 == View.GONE || data.arg1 == View.INVISIBLE) {
+                    sliding_layout.setPanelHeight(0);
+                } else {
+                    int[] deviceInfo = DensityUtil.getDeviceInfo(getActivity());
+                    sliding_layout.setPanelHeight(deviceInfo[1] / 2);
+                }
+                sliding_layout.setPanelState((SlidingUpPanelLayout.PanelState) data.obj);
+            }
+        } else if (data.what == Constant.EVENT_WHAT_START_DRAW_LINE) { // 开始绘制参考线
+            // 界面显示绘制结束按钮
+            TextView drawFinish = findViewById(R.id.tv_draw_line_finish);
+            TextView drawCancel = findViewById(R.id.tv_draw_line_cancel);
+            drawFinish.setVisibility(View.VISIBLE);
+            drawCancel.setVisibility(View.VISIBLE);
+            drawFinish.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View view) {
+                    // 检查当前线型的点位数据,如果小于2个点,无法完成
+                    if (drawLinePolyline.getPoints()==null||drawLinePolyline.getPoints().size()<2) {
+                        // 绘制的线不存在
+                        ToastUtils.Message(getActivity(), "绘制的线不存在!");
+                        return;
+                    }
+                    Message drawLineFinishMsg = Message.obtain();
+                    drawLineFinishMsg.what = Constant.EVENT_WHAT_FINISH_DRAW_LINE;
+                    drawLineFinishMsg.obj = drawLinePolyline.getPoints();
+                    drawLineFinishMsg.arg1=1; // arg1为1代表存在绘制的辅助线,为0代表用户点击取消,不需要辅助线
+                    EventBus.getDefault().post(drawLineFinishMsg);
+
+                    drawFinish.setVisibility(View.GONE);
+                    drawCancel.setVisibility(View.GONE);
+                    tencentMap.setOnMapClickListener(null);
+                    if (drawLineMarkerList!=null&&!drawLineMarkerList.isEmpty()) {
+                        drawLineMarkerList.stream().forEach(new Consumer<Marker>() {
+                            @Override
+                            public void accept(Marker marker) {
+                                marker.remove();
+                            }
+                        });
+                        drawLineMarkerList.clear();
+                    }
+
+                    if (drawLinePolyline!=null) {
+                        drawLinePolyline.remove();
+                    }
+                }
+            });
+            drawCancel.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View view) {
+                    Message drawLineFinishMsg = Message.obtain();
+                    drawLineFinishMsg.what = Constant.EVENT_WHAT_FINISH_DRAW_LINE;
+                    drawLineFinishMsg.arg1=0;// arg1为1代表存在绘制的辅助线,为0代表用户点击取消,不需要辅助线
+                    EventBus.getDefault().post(drawLineFinishMsg);
+
+                    drawFinish.setVisibility(View.GONE);
+                    drawCancel.setVisibility(View.GONE);
+                    tencentMap.setOnMapClickListener(null);
+                    if (drawLineMarkerList!=null&&!drawLineMarkerList.isEmpty()) {
+                        drawLineMarkerList.stream().forEach(new Consumer<Marker>() {
+                            @Override
+                            public void accept(Marker marker) {
+                                marker.remove();
+                            }
+                        });
+                        drawLineMarkerList.clear();
+                    }
+
+                    if (drawLinePolyline!=null) {
+                        drawLinePolyline.remove();
+                    }
+                }
+            });
+            if (drawLineMarkerList!=null&&!drawLineMarkerList.isEmpty()) {
+                drawLineMarkerList.stream().forEach(new Consumer<Marker>() {
+                    @Override
+                    public void accept(Marker marker) {
+                        marker.remove();
+                    }
+                });
+                drawLineMarkerList.clear();
+            }
+
+            if (drawLinePolyline!=null) {
+                drawLinePolyline.remove();
+            }
+            PolylineOptions drawLineOptions = new PolylineOptions() // 用户绘制参考线的线数据
+                    // 折线设置圆形线头
+                    .lineCap(true)
+                    // 折线的颜色为绿色
+                    .color(0xff00ff00)
+                    .borderColor(0xff00ff00)
+                    // 折线宽度为25像素
+                    .width(12)
+                    // 描边颜色的宽度,线宽还是 25 像素,不过填充的部分宽度为 `width` - 2 * `borderWidth`
+                    .borderWidth(5);
+            drawLinePolyline = tencentMap.addPolyline(drawLineOptions);
+            if (tencentMap!=null) {
+                tencentMap.setOnMapClickListener(new TencentMap.OnMapClickListener() {
+                    @Override
+                    public void onMapClick(LatLng latLng) {
+                        drawLinePolyline.appendPoint(latLng);
+                        drawLineMarkerList.add(tencentMap.addMarker(new MarkerOptions(latLng).icon(
+                                BitmapDescriptorFactory.fromResource(R.drawable.green_point)
+                        )));
+                    }
+                });
+            }
         }
     }
 
diff --git a/app/src/main/res/drawable-xhdpi/green_point.png b/app/src/main/res/drawable-xhdpi/green_point.png
new file mode 100644
index 0000000..e70c6f9
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/green_point.png differ
diff --git a/app/src/main/res/layout/fragment_road.xml b/app/src/main/res/layout/fragment_road.xml
index 389b82f..7e8006e 100644
--- a/app/src/main/res/layout/fragment_road.xml
+++ b/app/src/main/res/layout/fragment_road.xml
@@ -38,6 +38,20 @@
                 app:layout_constraintLeft_toLeftOf="parent"
                 app:layout_constraintTop_toTopOf="parent" />
 
+            <TextView
+                android:id="@+id/tv_draw_line_road"
+                style="@style/user_style"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="5dp"
+                android:gravity="center"
+                app:layout_constraintLeft_toRightOf="@id/tv_message"
+                app:layout_constraintTop_toTopOf="@id/tv_message"
+                app:layout_constraintBottom_toBottomOf="@id/tv_message"
+                android:text="绘制辅助线"
+                android:textColor="@color/white"
+                android:textSize="15sp" />
+
             <LinearLayout
                 android:id="@+id/ll_name"
                 android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/poi_video_fragment.xml b/app/src/main/res/layout/poi_video_fragment.xml
index 6dd7558..957522f 100644
--- a/app/src/main/res/layout/poi_video_fragment.xml
+++ b/app/src/main/res/layout/poi_video_fragment.xml
@@ -43,6 +43,20 @@
                     app:layout_constraintLeft_toLeftOf="parent"
                     app:layout_constraintTop_toTopOf="parent" />
 
+                <TextView
+                    android:id="@+id/tv_draw_line_poi_video"
+                    style="@style/user_style"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="5dp"
+                    android:gravity="center"
+                    app:layout_constraintLeft_toRightOf="@id/tv_message"
+                    app:layout_constraintTop_toTopOf="@id/tv_message"
+                    app:layout_constraintBottom_toBottomOf="@id/tv_message"
+                    android:text="绘制辅助线"
+                    android:textColor="@color/white"
+                    android:textSize="15sp" />
+
                 <LinearLayout
                     android:id="@+id/ll_name"
                     android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/treasure_fragment.xml b/app/src/main/res/layout/treasure_fragment.xml
index 5ef9794..d457562 100644
--- a/app/src/main/res/layout/treasure_fragment.xml
+++ b/app/src/main/res/layout/treasure_fragment.xml
@@ -174,33 +174,36 @@
                 app:layout_constraintLeft_toLeftOf="@id/iv_refrish"
                 app:layout_constraintTop_toBottomOf="@id/iv_refrish" />
 
-            <ImageView
-                android:id="@+id/image_view"
-                android:layout_width="60dp"
-                android:layout_height="50dp"
-                android:background="@android:color/transparent"
-                app:layout_constraintHeight_default="percent"
-                app:layout_constraintHeight_percent="0.4"
-                app:layout_constraintRight_toRightOf="parent"
-                app:layout_constraintBottom_toBottomOf="parent"
-                app:layout_constraintWidth_default="percent"
-                app:layout_constraintWidth_percent="0.4" />
-            
+
             <LinearLayout
                 android:id="@+id/layer_visiable_setting"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:orientation="vertical"
-                app:layout_constraintRight_toRightOf="@id/cb_map_type"
-                app:layout_constraintBottom_toTopOf="@id/cb_map_type">
-<!--                <Spinner-->
-<!--                    android:id="@+id/spn_main_location"-->
-<!--                    android:layout_width="wrap_content"-->
-<!--                    android:layout_height="wrap_content"></Spinner>-->
-<!--                <Spinner-->
-<!--                    android:id="@+id/spn_reference_location"-->
-<!--                    android:layout_width="wrap_content"-->
-<!--                    android:layout_height="wrap_content"></Spinner>-->
+                android:layout_margin="@dimen/default_widget_padding"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintBottom_toBottomOf="parent">
+                <TextView
+                    android:id="@+id/tv_draw_line_finish"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:background="@drawable/selector_default_btn_round_corner_bg"
+                    android:textColor="@color/selector_default_btn_text_color"
+                    android:textSize="24sp"
+                    android:visibility="gone"
+                    android:padding="@dimen/default_widget_padding"
+                    android:text="完成"></TextView>
+                <TextView
+                    android:id="@+id/tv_draw_line_cancel"
+                    android:layout_marginTop="@dimen/default_widget_padding"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:background="@drawable/selector_default_btn_round_corner_bg"
+                    android:textColor="@color/selector_default_btn_text_color"
+                    android:textSize="24sp"
+                    android:visibility="gone"
+                    android:padding="@dimen/default_widget_padding"
+                    android:text="取消"></TextView>
             </LinearLayout>
         </androidx.constraintlayout.widget.ConstraintLayout>