• 百度地图API-初步使用(2)


    接上文百度地图API开发:

    百度地图API-地图初始化及初步使用_HM-hhxx!的博客-CSDN博客

    目录

    1.获取坐标值

    ​2.定位获取点

    3.地址的正反解析

    4.轨迹动画

    5.驾车线路规划

    6.交通流量图


    1.获取坐标值

    在百度地图API中,可以通过监听地图点击事件,获取点击位置的坐标值

    1. map.addEventListener('click', function (e) {
    2. alert('点击位置经纬度:' + e.latlng.lng + ',' + e.latlng.lat);
    3. });

    实现效果:

     2.定位获取点

    JavaScript API提供在Web端获取当前位置信息的方法,融合了浏览器定位、IP定位、安卓定位SDK辅助定位等多种手段,提供了获取当前准确位置、获取当前城市信息等功能。
    浏览器定位精度和性能依赖浏览器自身特性,IP定位的精度值为城市级别。
    对于安卓WebView页面的开发者,可以结合定位SDK进行辅助定位,使用方法参见定位SDK相关章节

    下面以获取浏览器定位和获取IP地址定位为例:

    获取浏览器定位:

    1. // 获取浏览器定位,https ,localhost,
    2. var geolocation = new BMapGL.Geolocation();
    3. geolocation.getCurrentPosition(function (r) {
    4. console.log(this.getStatus());
    5. console.log(r);
    6. if (this.getStatus() == BMAP_STATUS_SUCCESS) {
    7. console.log(r.point);
    8. map.centerAndZoom(r.point, 20);
    9. }
    10. });

    获取IP地址定位:

    1. // // 获取IP地址定位
    2. var myCity = new BMapGL.LocalCity();
    3. myCity.get(function (result) {
    4. console.log(result);
    5. console.log(result.name);
    6. map.centerAndZoom(result.name, 20);
    7. });

    3.地址的正反解析

    地址解析服务提供从地址转换到经纬度的服务,反之,逆地址解析则提供从经纬度坐标转换到地址的转换功能。

     1)获取天安门地址

    1. var addr = "天安门";
    2. // 创建地址解析实例
    3. var myGeo = new BMapGL.Geocoder();
    4. myGeo.getPoint(
    5. addr,
    6. function (point) {
    7. console.log(point);
    8. if (point) {
    9. map.centerAndZoom(point, 20);
    10. // 地图倾斜角度
    11. map.setTilt(50);
    12. map.addOverlay(new BMapGL.Marker(point, { title: addr }));
    13. } else {
    14. alert("您选择地址没有解析到结果!");
    15. }
    16. },
    17. "北京市"
    18. );

    实现效果:

     

    2)设置输入框根据输入的地名获取地址

    1. var input = document.querySelector("#input");
    2. input.focus();
    3. input.addEventListener("keyup", function (e) {
    4. // console.log(e.key);
    5. if (e.key === "Enter") {
    6. var myGeo = new BMapGL.Geocoder();
    7. myGeo.getPoint(
    8. input.value,
    9. function (point) {
    10. console.log(point);
    11. if (point) {
    12. map.centerAndZoom(point, 20);
    13. // 地图倾斜角度
    14. map.setTilt(50);
    15. map.addOverlay(new BMapGL.Marker(point, { title: addr }));
    16. } else {
    17. alert("您选择地址没有解析到结果!");
    18. }
    19. },
    20. "北京市"
    21. );
    22. }
    23. });

    实现效果:

     

    3)通过点击地图弹出地名

    1. // 通过鼠标点击地图位置,获取地址信息
    2. map.addEventListener("click", function (e) {
    3. var pt = e.point;
    4. // 实例化解析器
    5. var myGeo = new BMapGL.Geocoder();
    6. console.log(e);
    7. // 解析坐标点
    8. myGeo.getLocation(e.latlng, function (rs) {
    9. console.log(rs);
    10. console.log(rs.address);
    11. // 地图打开信息窗口
    12. var windowPoint = new BMapGL.Point(rs.point.lng,rs.point.lat);
    13. console.log(windowPoint);
    14. var infoWindow = new BMapGL.InfoWindow(rs.address, {
    15. width: 0,
    16. height: 0,
    17. title: "地址名称",
    18. });
    19. map.openInfoWindow(infoWindow, windowPoint);
    20. });
    21. });

     实现效果:

     

    4.轨迹动画

    JSAPI GL在视角动画的基础上,封装了轨迹动画开源库,可以实现在轨迹动态播放的同时,视角跟随移动。

    1. //设置轨迹点
    2. var path = [
    3. {
    4. lng: 116.41306428772361,
    5. lat: 39.92160971417119,
    6. },
    7. {
    8. lng: 116.41755514151865,
    9. lat: 39.92169928723568,
    10. },
    11. {
    12. lng: 116.41771030067392,
    13. lat: 39.918377991785995,
    14. },
    15. {
    16. lng: 116.41319048598406,
    17. lat: 39.91838693885525,
    18. },
    19. {
    20. lng: 116.41306428772361,
    21. lat: 39.92160971417119,
    22. },
    23. ];
    24. var points = [];
    25. path.forEach((item) => {
    26. points.push(new BMapGL.Point(item.lng, item.lat));
    27. });
    28. // 通过地图多个点生成折线
    29. var polyline = new BMapGL.Polyline(points, {
    30. strokeColor: "#ffaaaa",
    31. strokeWeight: 10,
    32. strokeOpacity: 0.8,
    33. });
    34. // 创建轨迹动画
    35. var trackAnimation = new BMapGLLib.TrackAnimation(map, polyline, {
    36. tilt: 50,
    37. duration: 10000,
    38. delay: 5000,
    39. overallView: true,
    40. });
    41. trackAnimation.start();

     实现效果:

    5.驾车线路规划

    百度地图JavaScript API GL提供了驾车、公交、步行三种出行方式的路线规划功能。开发者在使用线路规划的接口时,可以使用我们提供的默认展示效果。也可以通过监听事件回调,使用检索数据完成自己的需求。

    基础驾车路线规划服务:BMapGL.DrivingRoute

    公交路线规划:BMapGL.TransitRoute

    步行路线规划:BMapGL.WalkingRoute

    下面使用使用 BMapGL.DrivingRoute实现驾车路线规划:

    1. ​​ var addr = "广州塔";
    2. // 创建地址解析实例
    3. var myGeo = new BMapGL.Geocoder();
    4. myGeo.getPoint(
    5. addr,
    6. function (point) {
    7. console.log(point);
    8. let startPoint = point;
    9. if (point) {
    10. map.centerAndZoom(point, 20);
    11. // 地图倾斜角度
    12. map.setTilt(50);
    13. map.addOverlay(new BMapGL.Marker(point, { title: addr }));
    14. } else {
    15. alert("您选择地址没有解析到结果!");
    16. }
    17. // 查找终点位置体育西路
    18. var endAddr = "天河区体育西路地铁a口";
    19. myGeo.getPoint(
    20. endAddr,
    21. function (point) {
    22. console.log(point);
    23. if (point) {
    24. let endPoint = point;
    25. // 设置驾车路线
    26. var driving = new BMapGL.DrivingRoute(map, {
    27. renderOptions: {
    28. map: map,
    29. autoViewport: true,
    30. },
    31. onSearchComplete: function (results) {
    32. console.log(results);
    33. // 获取第一条路线
    34. var plan = results.getPlan(0);
    35. console.log(plan);
    36. console.log("路程:" + plan.getDistance());
    37. console.log("耗时:" + plan.getDuration());
    38. },
    39. });
    40. driving.search(startPoint, endPoint);
    41. }
    42. },
    43. "广州市"
    44. );
    45. },
    46. "广州市"
    47. );

    实现效果:

     

    6.交通流量图

    地图可以包含一个或多个图层,每个图层在每个级别都是由若干张图块组成的,它们覆盖了地球的整个表面。例如您所看到包括街道、兴趣点、学校、公园等内容的地图展现就是一个图层,另外交通流量的展现也是通过图层来实现的。下面主要介绍交通流量图层的使用。

    添加交通流量图层

    通过map.setTrafficOn方法可以向地图添加交通流量图层,示例代码如下:

    1. var map = new BMapGL.Map("all-map"); // 创建地图实例
    2. var point = new BMapGL.Point(116.404, 39.915); // 创建点坐标
    3. map.centerAndZoom(point, 15); // 初始化地图,设置中心点坐标和地图级别
    4. map.enableScrollWheelZoom(true); // 开启鼠标滚轮缩放
    5. map.setTrafficOn(); // 添加交通流量图层

    实现效果:

     

     也可使用setTrafficOff()移除交通流量图层:

     

    map.setTrafficOff(); // 移除交通流量图层

  • 相关阅读:
    云原生爱好者周刊:M1 芯片 Mac 可以成功运行 Linux
    Pandas滑动窗口函数rolling()的使用方法(入门够用)
    CSS盒子模型
    智慧公厕:革新性的公共厕所管理系统
    C#_键盘钩子
    02_单片机及开发板介绍
    【Apollo学习笔记】——规划模块TASK之PIECEWISE_JERK_NONLINEAR_SPEED_OPTIMIZER(二)
    JAVA大学生过程培养信息系统计算机毕业设计Mybatis+系统+数据库+调试部署
    记一次rabbitmq生产者和消费者高可用的封装
    企业安全生产隐患排查治理系统
  • 原文地址:https://blog.csdn.net/damadashen/article/details/126261818