vue高德地图路线规划,高德地图vue开发

  vue高德地图路线规划,高德地图vue开发

  本文主要介绍了在Vue3管理后台项目中利用高德地图选点的实现。通过示例代码进行了非常详细的介绍,对大家的学习或工作有一定的参考价值。有需要的朋友就跟着下面的边肖学习吧。

  

目录

  前言获取地图关键字介绍地图JSAPI使用扩展初始化地图地图选择点组件

  

前言

  最近的管理后台项目中,有一个业务场景,添加了店铺的地址和经纬度。地址可以输入,但是经纬度不合适。用户最好在地图上搜索或者直接点击,获取该点的经纬度等详细信息。因为我们的app使用了高德地图,所以我在管理后台也使用了高德地图来实现上述业务需求。我们来看看具体的使用流程。

  

获取地图Key

  登录高德开放平台创建应用,添加密钥,选择Web端(JS API),生成密钥和安全密钥。

  

引入地图 JSAPI

  项目中使用官方推荐的JSAPILoader来加载地图。

  安装官方npm包@amap/amap-jsapi-loader,配置安全密钥(不安全方式)。其他配置方式是在这里设置脚本。

  从“@amap/amap-jsapi-loader”导入AMapLoader

  窗户。_AMapSecurityConfig={

  SecurityJsCode:您申请的安全密钥,

  };

  /脚本

  

初始化地图

  创建一个id为mapContainer的div元素,并调用initMap方法来初始化相关的地图插件脚本设置。

  const map=shallow ref(null);

  让AMapObj

  函数initMap() {

  AMapLoader.load({

  密钥:“您申请的密钥”,

  版本:“2.0”,

  }).然后(AMap={

  AMapObj=AMap

  map.value=新AMap。地图( map container );

  })

  }

  /脚本

  

地图选点

  该项目提供了两种方法:搜索和直接点击地图。

  搜索点选择:使用element-plus的autocomplete组件结合地图搜索服务实现下拉位置选择和点击点选择:使用地图点击事件获取位置的经纬度信息,然后使用地图反向地理编码api分析地址信息并选择位置,然后同步绘制标记,并将标记移动到地图中心并设置缩放比例。

  

组件化使用

  为了便于一整套逻辑的重用,我将上述所有流程封装到一个组件中,并通过v-model绑定所选位置的详细信息,以便于选择位置后将信息同步到父组件。

  贴出下面所有组件的代码。

  模板

  div class=地图包装

  div id=mapcontainer/div

  div class=搜索框

  El-自动完成

  v-model=keyword

  :fetch-suggestions= handle search

  :trigger-on-focus=false

  可清除的

  Placeholder=输入城市关键字搜索

  @select=handleSelect

  style=width: 300px

  /

  el输入

  v-model=location .经度

  Placeholder=单击地图选择经度

  maxlength=15

  只读的

  style= width:150 px;边距:0 5px

  /el-input

  el输入

  v-model=位置.纬度

  Placeholder=单击地图选择纬度

  maxlength=15

  只读的

  style=width: 150px

  /el-input

  /div

  /div

  /模板

  脚本设置

  从“@amap/amap-jsapi-loader”导入AMapLoader

  窗户。_AMapSecurityConfig={

  SecurityJsCode:您申请的安全密钥,

  };

  const props=defineProps({

  模型值:{

  类型:对象,

  默认(){

  return { };

  },

  },

  });

  const emit=define emits([ update:model value ]);

  const map=shallow ref(null);

  //位置

  常量位置=计算值({

  get() {

  返回props.modelValue

  },

  设置(值){

  emit(update:modelValue ,val);

  },

  });

  手表(位置,(值)={

  if (val .经度val .纬度值){

  draw marker();

  }

  }

  );

  const keyword=ref();

  let placeSearch,AMapObj,marker,geocoder

  函数initMap() {

  AMapLoader.load({

  密钥: ,//申请好的网端钥匙,首次调用负荷时必填

  版本:"2.0"

  }).然后(AMap={

  AMapObj=AMap

  map.value=新地图.地图(“地图容器”);

  //添加点击事件

  map.value.on(click ,onMapClick);

  if (location.value。经度){

  绘制标记();

  }

  AMap。插件(

  地图.工具栏,地图.比例尺,地图。地理定位,地图PlaceSearch , AMap .地理编码器],

  ()={

  //缩放条

  常量工具栏=新地图.ToolBar();

  //比例尺

  常量刻度=新地图.scale();

  //定位

  常数地理位置=新地图.地理定位({

  enablehigaccuracy:true,//是否使用高精度定位,默认:正确

  超时:10000,//超过10秒后停止定位,默认:5s

  位置: RT ,//定位按钮的停靠位置

  按钮偏移量:新地图.Pixel(10,20),//定位按钮与设置的停靠位置的偏移量,默认:像素(10,20)

  zoomto准确性:true,//定位成功后是否自动调整地图视野到定位点

  });

  地理编码器=新地图。地理编码器({

  城市: 全国,

  });

  map.value.addControl(地理定位);

  map.value.addControl(工具栏);

  地图。价值。添加控件(刻度);

  placeSearch=新地图。地点搜索({

  map: map.value,

  城市: ,

  页面大小:30,//单页显示结果条数

  pageIndex: 1,//页码

  citylimit: false,//是否强制限制在设置的城市内搜索

  autoFitView: true,

  });

  }

  );

  })

  }

  onMounted(()={

  init map();

  });

  //搜索地图

  函数handleSearch(queryString,cb) {

  placeSearch.search(queryString,(status,result)={

  if(结果类型的结果=== object 结果。poilist){

  常量列表=结果。poilist。pois

  list.forEach(item={

  项目。值=项目。姓名;

  项目。标签=项目。姓名;

  });

  cb(列表);

  } else {cb([])}

  });

  }

  //点击地图

  函数onMapClick(e) {

  const { lng,lat }=e . ln glat

  //逆地理编码

  geocoder.getAddress([lng,lat],(status,result)={

  if(状态===完成结果。info=== OK ){

  const { addressComponent,格式化地址}=结果。regeocode

  让{城市、省、区}=地址组件

  如果(!城市){

  //直辖市

  城市=省;

  }

  location.value={

  经度:液化天然气,

  纬度:纬度,

  地址:格式地址,

  区:[省、市、区],

  };

  }

  });

  }

  //点击搜索项

  函数句柄选择(项目){

  const { pname,cityname,adname,address,name }=item

  const { lng,lat }=项目.位置

  location.value={

  经度:液化天然气,

  纬度:纬度,

  地址,

  区域:[pname,cityname,adname],

  姓名,

  };

  map.value.setZoomAndCenter(16,[lng,lat]);

  }

  //绘制地点标记

  函数绘图标记(瓦尔){

  常数{经度,纬度}=location.value val

  如果(标记){

  马克笔。设置映射(空);

  }

  标记=新AMapObj .标记({

  位置:新AMapObj .英格拉特(经度,纬度),

  锚:"底部中间",

  });

  map.value.add(标记);

  map.value.setZoomAndCenter(16,[经度,纬度]);

  }

  /脚本

  样式lang=scss 范围。地图包装{

  位置:相对;

  宽度:100%;

  高度:400像素

  #mapcontainer {

  宽度:100%;

  身高:100%;

  }。搜索框{

  位置:绝对;

  top:10px;

  左:10px

  z指数:1;

  显示器:flex

  对齐-项目:居中;

  }

  }

  /风格

  

拓展

  如果系统适应了黑暗模式,你可以通过监控当前黑暗模式状态,在地图的光明主题和黑暗主题之间动态切换,从而实现地图黑暗模式的适应,这个就留给大家自己去探索了。

  以上就是本文关于使用高德地图选择实现Vue3管理后台项目的内容。关于Vue3高德地图选择的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: