• 高德地图的使用


    JS API 结合 Vue 使用

    高德地图 jsapi 下载、引入

    1. npm add @amap/amap-jsapi-loader
    2. import AMapLoader from '@amap/amap-jsapi-loader'

    使用2.0版本的loader需要在window对象下先配置 securityJsCode  JS API 安全密钥使用

    JS API 使用 script 标签同步加载增加代理服务器设置脚本,并将「您申请的安全密钥」替换为您的安全密钥;(注意您这个设置必须是在JS API 脚本加载之前进行设置,否则设置无效。)

    1. window._AMapSecurityConfig = {
    2. securityJsCode: '「您申请的安全密钥」'
    3. }
    4. 使用ts时,上面这里会显示类型错误,因此需要在类型文件中配置Window的类型
    5. interface Window {
    6. _AMapSecurityConfig: {
    7. securityJsCode: string
    8. }
    9. }

     页面地图初始化加载

    自定义地图-设置地图显示样式 自定义地图-地图

    1. AMapLoader.load({
    2. key: '', // 申请好的Web端开发者Key,首次调用 load 时必填
    3. version: '2.0' // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
    4. })
    5. .then((AMap) => {
    6. // 地图初始化
    7. // Map构造函数第一个传参的map为初始化地图的容器的id,第二个传参是配置对象
    8. const map = new AMap.Map('map', {
    9. viewMode:"3D", //是否为3D地图模式
    10. mapStyle: 'amap://styles/whitesmoke', //设置地图的显示样式
    11. zoom: 12 //设置地图的缩放级别
    12. })
    13. })
    14. .catch((e) => {
    15. console.error(e) //加载错误提示
    16. })

    根据后台返回的经纬度数组,自定义绘制行车路径,参考官方文档 - 路线规划

    使用插件 AMap.Driving-根据起点和终点规划自动行车路径

    1. AMapLoader.load({
    2. key: '', // 申请好的Web端开发者Key,首次调用 load 时必填
    3. version: '2.0' // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
    4. })
    5. .then((AMap) => {
    6. // 地图初始化
    7. const map = new AMap.Map('map', {
    8. // viewMode:"3D", //是否为3D地图模式
    9. mapStyle: 'amap://styles/whitesmoke', //设置地图的显示样式
    10. zoom: 12 //设置地图的缩放级别
    11. })
    12. // 使用插件 AMap.Driving
    13. AMap.plugin('AMap.Driving', function () {
    14. const driving = new AMap.Driving({
    15. map: map, // 配置参数map,意思是在那个地图中绘制行车路径
    16. showTraffic: false, // 关闭道路情况(设置是否显示实时路况信息)
    17. hideMarkers: true // 关闭沿途标记(设置隐藏路径规划的起始点图标 )
    18. })
    19. // logisticsInfo是后端返回的行车路径的数组
    20. if (logistics.value?.logisticsInfo && logistics.value.logisticsInfo.length >= 2) {
    21. const list = [...logistics.value.logisticsInfo]
    22. // 起点 start
    23. const start = list.shift()
    24. // 终点 end
    25. const end = list.pop()
    26. // 传入起点和终点的经纬度信息,获取对应的驾车路线规划
    27. driving.search(
    28. [start?.longitude, start?.latitude],
    29. [end?.longitude, end?.latitude],
    30. function () {
    31. // 未出错时,result即是对应的路线规划方案
    32. // 在这里绘制沿途运输位置
    33. }
    34. )
    35. }
    36. })
    37. })
    38. .catch((e) => {
    39. console.error(e) // 加载错误提示
    40. })

    使用插件 AMap.Driving-自定义绘制路径,也就是把路途的途径点告知地图让其渲染路径

     参考官方文档 途经点参数 路线规划-途经点

     

    1. // 途经点 opts 是一个对象,属性waypoints就是绘制途经点参数
    2. const opts = {
    3. // 途经点参数,最多支持传入16个途经点
    4. waypoints: list.map((item) => [item.longitude, item.latitude])
    5. }
    6. driving.search(
    7. [start?.longitude, start?.latitude],
    8. [end?.longitude, end?.latitude],
    9. opts,
    10. function () {
    11. }
    12. )

    实现业务:关闭途径标记( hideMarkers: true)并且实现自定义绘制起点-终点-和当前运输位置 ,其实就是绘制一个标记,参考官方实例 自定义图标-点标记

    让当前的运输位置显示在地图的正中间并且设置缩放比例,参考官方文档 setFitView-setZoom方法

    参考手册-地图 JS API

    1. // 创建一个标记点函数
    2. const getMarker = (point: Location, image: string, width = 25, height = 30) => {
    3. // 创建一个 Icon,这种方式可以设置图标的大小
    4. const Icon = new AMap.Icon({
    5. // 图标尺寸
    6. size: new AMap.Size(width, height),
    7. // 图标的取图地址
    8. image: image,
    9. // 图标所用图片大小
    10. imageSize: new AMap.Size(width, height)
    11. })
    12. // 将 icon 传入 marker
    13. const marker = new AMap.Marker({
    14. position: [point?.longitude, point?.latitude],
    15. // 将一张图片的地址设置为 icon
    16. icon: Icon,
    17. // 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点
    18. offset: new AMap.Pixel(-width / 2, -height)
    19. })
    20. return marker
    21. }
    22. const startMarker = getMarker(start!, startImg) // 起点icon标记
    23. const endMarker = getMarker(end!, endImg) // 终点icon标记
    24. // 往地图上增加标记
    25. map.add([startMarker, endMarker])
    26. driving.search(
    27. function () {
    28. // 绘制当前运输位置,后端返回 currentLocationInfo 就是当前的运输位置 标记
    29. const curr = logistics.value?.currentLocationInfo // 当前的运输位置经纬度
    30. const currMarker = getMarker(curr!, carImg, 33, 20) // 当前运输位置标记
    31. map.add([currMarker]) // 往地图上增加当前运输位置标记
    32. // 2s后定位当中间进行缩放
    33. setTimeout(() => {
    34. map.setFitView([currMarker]) // 定位到当前运输的位置
    35. map.setZoom(10) // 一定比例的缩放
    36. }, 2000)
    37. }
    38. )

     下面贴出完整绘制物流信息地图的代码

    1. import startImg from '@/assets/start.png'
    2. import endImg from '@/assets/end.png'
    3. import carImg from '@/assets/car.png'
    4. const initMap = () => {
    5. AMapLoader.load({
    6. key: '', // 申请好的Web端开发者Key,首次调用 load 时必填
    7. version: '2.0' // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
    8. })
    9. .then((AMap) => {
    10. // 地图初始化
    11. const map = new AMap.Map('map', {
    12. // viewMode:"3D", //是否为3D地图模式
    13. mapStyle: 'amap://styles/whitesmoke', //设置地图的显示样式
    14. zoom: 12 //设置地图的缩放级别
    15. })
    16. AMap.plugin('AMap.Driving', function () {
    17. const driving = new AMap.Driving({
    18. map: map,
    19. // panel: 'panel'
    20. showTraffic: false,
    21. hideMarkers: true
    22. })
    23. if (logistics.value?.logisticsInfo && logistics.value.logisticsInfo.length >= 2) {
    24. const list = [...logistics.value.logisticsInfo]
    25. // 创建标记函数
    26. const getMarker = (point: Location, image: string, width = 25, height = 30) => {
    27. // 创建一个 Icon,这种方式可以设置图标的大小
    28. const Icon = new AMap.Icon({
    29. // 图标尺寸
    30. size: new AMap.Size(width, height),
    31. // 图标的取图地址
    32. image: image,
    33. // 图标所用图片大小
    34. imageSize: new AMap.Size(width, height)
    35. })
    36. // 将 icon 传入 marker
    37. const marker = new AMap.Marker({
    38. position: [point?.longitude, point?.latitude],
    39. // 将一张图片的地址设置为 icon
    40. icon: Icon,
    41. // 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点
    42. offset: new AMap.Pixel(-width / 2, -height)
    43. })
    44. return marker
    45. }
    46. // 起点 start
    47. const start = list.shift()
    48. const startMarker = getMarker(start!, startImg)
    49. // 终点 end
    50. const end = list.pop()
    51. const endMarker = getMarker(end!, endImg)
    52. map.add([startMarker, endMarker])
    53. // 途经点 opts
    54. const opts = {
    55. // 途经点参数,最多支持传入16个途经点
    56. waypoints: list.map((item) => [item.longitude, item.latitude])
    57. }
    58. driving.search(
    59. [start?.longitude, start?.latitude],
    60. [end?.longitude, end?.latitude],
    61. opts,
    62. function () {
    63. // 未出错时,result即是对应的路线规划方案
    64. // 绘制运输位置
    65. const curr = logistics.value?.currentLocationInfo
    66. const currMarker = getMarker(curr!, carImg, 33, 20)
    67. map.add([currMarker])
    68. // 2s后定位当中间进行缩放
    69. setTimeout(() => {
    70. map.setFitView([currMarker])
    71. map.setZoom(10)
    72. }, 2000)
    73. }
    74. )
    75. }
    76. })
    77. })
    78. .catch((e) => {
    79. console.error(e) //加载错误提示
    80. })
    81. }
  • 相关阅读:
    游戏企业如何高质量出海?如何保证出海内容合规
    nodejs安装和环境配置-Windows
    windows下修改mysql的max_allowed_packet的值
    1.6 线程池原理与实战
    【Linux命令】用户和用户管理
    《优 化》
    C++Prime Plus(7)
    Docker镜像的打包与加载
    万卷书 - 书单整理 [01]
    Unittest-生成HTML测试报告
  • 原文地址:https://blog.csdn.net/luoxiaonuan_hi/article/details/131410228