首页 > 其他分享 >vue2调用高德地图api使用详细案例

vue2调用高德地图api使用详细案例

时间:2024-08-26 20:56:18浏览次数:15  
标签:status map api result vue2 var new 高德 AMap

  我是主要做java开发的,前台需要使用高德地图集成vue2进行页面展示,所以在第三个案例中,开始的经纬度和结束的经纬度都进行了变量定义且进行了格式优化,如需要后台调用参数,则只需要修改变量的值进行赋值,则可以正常进行开始点和结束点的路程规划以及调用,前台具体的行程信息(例如预计路程,时间,以及到某个路口需要怎么转弯等实际的导航内容)都放到了result中进行返回

页面展示组件


<div id="showMap"></div>//这个主要用于展示地图数据

按照关键字进行地名规划


响应速度没有经纬度快,使用体验不佳

<script>
import AMapLoader from "@amap/amap-jsapi-loader";

export default {
  data() {
    return {
      map: null,
    };
  },
  mounted() {
    this.initAMap();
  },
  unmounted() {
    this.map.destroy();
  },

  methods: {
    initAMap() {
      window._AMapSecurityConfig = {
        securityJsCode: "你的调用cod",
      };
      AMapLoader.load({
        key: "你申请的高德api秘钥",
        version: "2.0",
        plugins: ["AMap.Scale"],
      })
      .then((AMap) => {
          
        var map = new AMap.Map("showMap", {
          viewMode: "3D",
          zoom: 11,
          center: [116.397428, 39.90923],
        });
        AMap.plugin(
          ["AMap.ToolBar", "AMap.Driving", "AMap.Polyline", "AMap.Marker"],
          function() {
            var toolbar = new AMap.ToolBar();
            map.addControl(toolbar);
            var driving = new AMap.Driving({
              map: map,
            });
            driving.search([
              { keyword: '北京市地震局(公交站)', city: '北京' },//起点的关键字,必带城市搜索依据
              { keyword: '亦庄文化园(地铁站)', city: '北京' }//终点关键字
            ],
            function(status, result) {
              if (status === "complete") {
                console.log("绘制驾车路线完成", result);
              } else {
                console.log("获取驾车数据失败:" + result);
              }
            });
          }
        );
      });
    },
  },
};
</script>

按照经纬度进行查询



<script>
import AMapLoader from "@amap/amap-jsapi-loader";

export default {
  data() {
    return {
      map: null,
    };
  },
  mounted() {
    this.initAMap();
  },
  unmounted() {
    this.map.destroy();
  },


  methods: {

    initAMap() {
      window._AMapSecurityConfig = {
        securityJsCode: "你的cod",
      };
      AMapLoader.load({
        key: "你的key", // 申请好的Web端开发者Key,首次调用 load 时必填
        version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
        plugins: ["AMap.Scale"], //需要使用的的插件列表,如比例尺'AMap.Scale',支持添加多个如:['...','...']
      })
          .then((AMap) => {
            var map = new AMap.Map("showMap", {
              // 设置地图容器id
              viewMode: "3D", // 是否为3D地图模式
              zoom: 11, // 初始化地图级别
              center: [116.397428, 39.90923],//地图显示中心点坐标
            });
            AMap.plugin(
                ["AMap.ToolBar", "AMap.Driving", "AMap.Polyline", "AMap.Marker"],
                function() {
                  //异步同时加载多个插件
                  var toolbar = new AMap.ToolBar();
                  map.addControl(toolbar);
                  var driving = new AMap.Driving({
                    map: map,
                  }); //驾车路线规划
                  driving.search(
                      new AMap.LngLat(116.379028, 39.865042),//起点的路径
                      new AMap.LngLat(116.427281, 39.903719),//终点的路径
                      function(status, result) {
                        // result 即是对应的驾车导航信息,相关数据结构文档请参考  https://lbs.amap.com/api/javascript-api/reference/route-search#m_DrivingResult
                        if (status === "complete") {
                          console.log("绘制驾车路线完成", result);
                        } else {
                          console.log("获取驾车数据失败:" + result);
                        }
                      }
                  );
                }
            );
          })



    },

  },
};
</script>

总结:关键字和经纬度都差不多,修改的也就是起始和终点位置,我们去修改为高德给定的格式,即可实现查询数据


完善距离判断,时间判断,路径判断,通过经纬度实现逆向解析地名


以下红色圈子里的所有内容都实现api动态代理实现动态页面,且都经过了特定格式的解析.


<script>
import AMapLoader from "@amap/amap-jsapi-loader";
import StartIcon from "@/assets/导航起点.png"


export default {
  data() {

    return {
      map: null,
      driverTime: null,
      driverLong: null,
      startaddress:"",
      endaddress:"",
      // 开始的经纬度
      startLatitudeAndLongitude: "116.379028, 39.865042",
      // 结束的经纬度
      endLatitudeAndLongitude: "116.427281, 39.803719",
    };
  },
  mounted() {
    this.initAMap();
  },
  unmounted() {
    this.map.destroy();
  },


  methods: {
    initAMap() {
      window._AMapSecurityConfig = {
        securityJsCode: "你的code",
      };
      let self = this;
      AMapLoader.load({
        key: "你的key", // 申请好的Web端开发者Key,首次调用 load 时必填
        version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
        plugins: ["AMap.Scale","AMap.Geocoder"], //需要使用的的插件列表,如比例尺'AMap.Scale',支持添加多个如:['...','...']
      })
          .then((AMap) => {
            var map = new AMap.Map("showMap", {
              // 设置地图容器id
              viewMode: "3D", // 是否为3D地图模式
              zoom: 11, // 初始化地图级别
              center: [116.397428, 39.90923],//地图显示中心点坐标
            });
            var icon = new AMap.Icon({
              // 图标尺寸 ===> new AMap.Size(宽, 高)
              size: new AMap.Size(80, 50),
              // Icon图片
              image: StartIcon,
              // 根据所设置的大小拉伸或压缩图片 ===> new AMap.Size(宽, 高)
              imageSize: new AMap.Size(50, 50)
            });
            // 逆地址
            var geocoder = new AMap.Geocoder({
              city: "", //城市设为北京,默认:“全国”
            });
            //添加点标记
            var marker = new AMap.Marker({
              position:  [116.397428, 39.90923],
              // 在这个里面需要设置偏移度,值应和图标的大小一致,如不设置,则会出现定位点随着地图缩略的变化而变化
              offset: new AMap.Pixel(-50, -50),
              icon
            });
            map.add(marker); //添加到地图
            AMap.plugin(
                ["AMap.ToolBar", "AMap.Driving", "AMap.Polyline", "AMap.Marker"],
                function() {
                  //异步同时加载多个插件
                  var toolbar = new AMap.ToolBar();
                  map.addControl(toolbar);
                  var driving = new AMap.Driving({
                    map: map,
                  }); //驾车路线规划
                  // var在函数作用外,否则无法调用
                  var startTranse = self.startLatitudeAndLongitude.split(",");
                  var endTranse = self.endLatitudeAndLongitude.split(",");
                  driving.search(
                      // 因地址值用2214.111的经纬度,所以需要格式转换
                      new AMap.LngLat(parseFloat(startTranse[0]), parseFloat(startTranse[1])),
                      new AMap.LngLat(parseFloat(endTranse[0]), parseFloat(endTranse[1])),
                      function(status, result) {
                        if (status === "complete") {
                          console.log("绘制驾车路线完成", result);
                          // 在这一块需要设置加时时间和大概的路程多少公里,用四舍五入的方式计算
                          self.driverTime = Math.round(result.routes[0].time / 60);
                          self.driverLong = Math.round(result.routes[0].distance / 1000);

                          // 逆地理编码获取地址信息
                          var start = self.startLatitudeAndLongitude.split(",");
                          var end = self.endLatitudeAndLongitude.split(",");
                          // 寻找开始地址的方法
                          geocoder.getAddress(start, function(status, result) {
                            if (status === 'complete' && result.regeocode) {
                              self.startaddress = result.regeocode.formattedAddress;
                            } else {
                              console.log("获取开始地址失败");
                            }
                          });
                          // 寻找结束地址的方法
                          geocoder.getAddress(end, function(status, result) {
                            if (status === 'complete' && result.regeocode) {
                              self.endaddress = result.regeocode.formattedAddress;
                              console.log(result.regeocode + "end");
                            } else {
                              console.log("获取结束地址失败");
                            }
                          });
                        } else {
                          console.log("获取驾车数据失败:" + result);
                        }
                      }
                  );
                }
            );
          }
          )
    },
  },
};
</script>

原创不易,希望点个关注支持一下!

标签:status,map,api,result,vue2,var,new,高德,AMap
From: https://blog.csdn.net/2201_76122201/article/details/141534771

相关文章

  • 《黑神话:悟空》提示Steam_API.dll缺失?六种方案解决游戏启动障碍
    Steam_API.dll是一个与Steam平台相关的动态链接库(DLL)文件,通常与使用SteamAPI的游戏或应用程序的功能实现有关。这个DLL文件包含了一些Steam平台功能的辅助函数,例如成就系统、云存储、社交功能等,对于确保游戏或应用程序的正常运行非常重要。当Steam_API.dll文件缺失时,可能......
  • 在 C/C++ 中使用 MY_API 宏封装动态库:一种高效的跨平台接口实现方法
    目录1.背景介绍2.MY_API宏的定义3.使用MY_API宏封装动态库4.编译和使用动态库5.结论在现代软件开发中,封装动态库(DynamicLinkLibrary,DLL)以提供可复用的功能模块已经成为一种常见的实践。然而,在开发跨平台库时,由于不同操作系统对于动态库的导出和导入机制有......
  • 体育数据API纳米足球数据API:足球数据接口文档API示例①
    纳米体育数据的数据接口通过JSON拉流方式获取200多个国家的体育赛事实时数据或历史数据的编程接口,无请求次数限制,可按需购买,接口稳定高效;覆盖项目包括足球、篮球、网球、电子竞技、奥运等专题、数据内容。纳米数据API2.0版本包含http协议以及websocket协议,主要通过http获取数......
  • API网关的基本原理
    API网关使用API网关的决策通常是由多种因素驱动的,特别是在面临复杂的服务架构或特定的业务需求时。以下是一些具体情况,其中使用API网关尤其有益:场景1.微服务架构在微服务架构中,系统被分解成多个小型、独立的服务,每个服务执行特定的功能。API网关作为单一的入口点,可以简化......
  • Kubernetes API资源规范
    1.资源类型和资源对象1.1资源类型(ResourceTypes)1.1.1核心资源类型KubernetesAPIPrimitive用于描述在Kubernetes上运行应用程序的基本组件,即俗称的Kubernetes对象(Object)它们持久存储于APIServer上,用于描述集群的状态依据资源的主要功能作为分类标准,Kubernetes......
  • 在使用FastAPI处理数据输入的时候,对模型数据和路径参数的一些转换处理
    在开发Python的后端API平台的时候,为了兼容我SqlSugar开发的一些Winform端、BS端、UniApp端、WPF端等接入,由于部分是基于.net的处理,因此可能对于接入对象的属性为常见的Camel的驼峰命名规则,但是Python一般约定属性名称为小写,因此需要对这个模型进行兼容;另外默认FastAPI路由路径也是......
  • 根据销售订单创建交货单(BAPI_DELIVERYPROCESSING_EXEC)
    可以指定对应的仓库和销售订单创建交货单 创建交货单:BAPI_DELIVERYPROCESSING_EXEC交货单过账:WS_DELIVERY_UPDATE 创建交货单:functionZTEST1.*"----------------------------------------------------------------------*"*"本地接口:*"IMPORTING*"VALUE(IV_W......
  • Api中子类继承父类后,子类设置JsonIgnore失效的补救
    如publicclassPerson{publicstringName{get;set;}publicintAge{get;set;}}publicclassStudent:Person{publicstringGrade{get;set;}[Newtonsoft.Json.JsonIgnore]publicnewintAge{get;set;}}序列化Student,Age还是一......
  • 在NextChat中接入SiliconCloud API 体验不同的开源先进大语言模型
    NextChat介绍One-Clicktogetawell-designedcross-platformChatGPTwebUI,withGPT3,GPT4&GeminiProsupport.一键免费部署你的跨平台私人ChatGPT应用,支持GPT3,GPT4&GeminiPro模型。主要功能在1分钟内使用Vercel免费一键部署提供体积极小(~5MB)的跨......
  • fastapi 跨域请求
    问题描述在前后端开发中遇到一个问题,前端发送请求后,后端报'OPTIONS/mock/user/loginHTTP/1.1'405MethodNotAllowed,如下图:但用fastapi自带的swagger或postman测试又是可以的。 定位原因这是因为在跨域的情况下,在浏览器发起"复杂请求"时主动发起的。跨域共享标准规范......