百度地图API前端开发技术分析

第0基本信息

0.1百度地图资料

https://dafrok.github.io/vue-baidu-map/#/zh/index

0.2安装百度地图

npm install vue-baidu-map –save

0.3智城项目接入百度地图

在src/main.js里导入百度地图依赖包

import BaiduMap from 'vue-baidu-map'

第1百度地图开发

1.1在线车辆开发

1.1.1百度地图初始化

<baidu-map class="map" :center="{lng:129.500,lat:42.893}" :zoom="11">

  <bm-driving start="延吉市公安局出入境接待大厅"

  end="延吉朝阳川国际机场"

  @searchcomplete="handleSearchComplete"

  :panel="false"

  :autoViewport="true"></bm-driving>

  <bm-navigation anchor="BMAP_ANCHOR_TOP_RIGHT"></bm-navigation>

  <bml-lushu

    @stop="reset"

    :path="path"

    :icon="icon"

    :play="play"

    :speed="speed"

    :rotation="true">

  </bml-lushu>

</baidu-map>

参数说明:

属性名

类型

默认值

描述

play

Boolean

true

是否行进

path

Array[{lng, lat}]

[]

构成路线的坐标点数组

landmarkPois

Array[{lng, lat, html, pauseTime}]

[]

要在覆盖物移动过程中显示的特殊点

icon

Icon

覆盖物的图标

speed

Number

4000

覆盖物移动速度

autoView

Boolean

false

是否自动调整路线视野

rotation

Boolean

false

移动物体是否随路径旋转朝向

infoWindow

Boolean

true

是否开启移动物体上的信息窗体

content

String

信息窗体中的内容,无内容则不显示信息窗体

1.1.2百度地图路书事件写法

// 地图

getLogBusDriveList(){

    let form = {}

    form['startTime'] = this.afterVal;//'2020-12-14 8:26:00'

    form['endTime'] = this.dateVal;//'2020-12-14 8:27:00'

    getLogBusDriveList(form).then((res) => {

        if(res.data && res.data.code === 0){

            let list = res.data.data.page.list

            let busIds = [];

            let newBusIds = [];

            for(let i = 0; i < list.length; i++){

                busIds.push(list[i].busId);

                this.mapList[0].path[i].lng = list[i].factoryLongitude

                this.mapList[0].path[i].lat = list[i].factoryLatitude

            }

            //去重

            for(let j=0;j<busIds.length;j++){

                if(newBusIds.indexOf(busIds[j])<0){

                    newBusIds.push(busIds[j]);

                }

            }

                this.center.lng = list[0].factoryLongitude

                this.center.lat = list[0].factoryLatitude

                console.log(this.center)

          

        }

    });

},



1.2百度地图添加图层和事件

1.2.1添加图层

使用<div> <el-row><el-col>…</el-clo></el-row></div>方式来嵌入层,比如:

<div

    class="center-left"

    style="width: calc(22.5% - 30px);border: 1px solid #dcdcdc;padding: 10px;"

>

    <el-row :span="24">

        <el-col :span="24">

            <div style="margin: 5px">

                <el-image

                    v-if="carInfo.vehiclePhoto!=null&&carInfo.vehiclePhoto!=''"

                    :src="carInfo.vehiclePhoto"

                    style="width: 100%;height: 180px;"

                    fit="contain"

                ></el-image>

                <el-image

                    v-else

                    :src="require('../../assets/lenglianche.jpg')"

                    style="width: 100%;height: 180px;"

                    fit="contain"

                ></el-image>

            </div>

        </el-col>

    </el-row>

其中div建议使用相对宽度,图层所在位置可以设定相对位置,比如:
 

<div style="width:100%;height: 30px;margin:5px;border:1px solid #dcdcdc; background-color:#FFFFFF;">

如果是浮云图层使用如下:
 

<div style="float: left;line-height: 30px;width: 140px;margin-left: 5px">

    <span style="font-size: 14px;" v-if="sudustartTime!=''">{{sudustartTime}}</span>

    <span style="font-size: 14px;" v-else>{{startTime}}</span>

</div>

1.2.2让运行的目标在地图中间

<bml-marker-clusterer :averageCenter="true">

    <bm-marker

        v-for="(item,i) in pink"

        :position="{lat: item.lat, lng: item.lng}"

        :dragging="false"

        :key="i"

    >

        <bm-label

            :content="item.title"

            :labelStyle="{cursor:'pointer',fontFamily:'MicrosoftYaHei',color: '#0065B3', fontSize : '14px',padding:'5px 8px',borderColor:'#159fb3',backgroundColor:'rgb(227,227,227)',borderRadius:'5px'}"

            :offset="{width: -50, height: -35}"

        ></bm-label>

    </bm-marker>

</bml-marker-clusterer>

其中JS事件是:

syncCenterAndZoom (e) {

    const {lng, lat} = e.target.getCenter()

    this.center.lng = lng

    this.center.lat = lat

    this.zoom = e.target.getZoom()

},

1.2.3运动的小车调整方向

主要事件如下:

/*设置小车方向*/

getAngle(n, next) {

    //console.log("ssad",n)

    //console.log("ssad",next)

    var ret;

    var w1 = (n.lat / 180) * Math.PI;

    var j1 = (n.lng / 180) * Math.PI;



    var w2 = (next.lat / 180) * Math.PI;

    var j2 = (next.lng / 180) * Math.PI;



    ret =

        4 * Math.pow(Math.sin((w1 - w2) / 2), 2) -

        Math.pow(Math.sin((j1 - j2) / 2) * (Math.cos(w1) - Math.cos(w2)), 2);

    ret = Math.sqrt(ret);



    // var temp = Math.sin(Math.abs(j1 - j2) / 2) * (Math.cos(w1) + Math.cos(w2));

    var temp = Math.sin((j1 - j2) / 2) * (Math.cos(w1) + Math.cos(w2));

    //console.log(temp)

    ret = ret / temp;



    ret = (Math.atan(ret) / Math.PI) * 180;

    ret += 90;



    // 这里用如此臃肿的if..else是为了判定追踪单个点的具体情况,从而调整ret的值

    if (j1 - j2 < 0) {

        // console.log('j1<j2')

        if (w1 - w2 < 0) {

            // console.log('w1<w2')

            ret;

        } else {

            // console.log('w1>w2')

            ret = -ret + 180;

        }

    } else {

        // console.log('j1>j2')

        if (w1 - w2 < 0) {

            // console.log('w1<w2')

            ret = 180 + ret;

        } else {

            // console.log('w1>w2')

            ret = -ret;

        }

    }



    return ret;

},

1.2.4百度地图运行轨迹画线

主要事件如下:

dynamicLine() {

    this.hfjd = this.count; //进度条

    if (this.count == this.bPoints.length) return;

    this.driveline();

    var sudutime = 10000 - this.sudu * 1000 == 0 ? 500 : 10000 - this.sudu * 1000; //控制速度

    clearTimeout(this.timer1); //这不不能少

    this.timer1 = setTimeout(this.dynamicLine, sudutime);

},

1.2.5去掉百度地图的LOGO

思路:添加一个图层,用于覆盖地图LOGO

样式如下:

#seekeducationbaidumap {

    width: 100%;

    height: 530px;

    /*

      去除百度地图版权

      去除右上角[地图、卫星、三维]控件

      去除百度地图右上角平移缩放控件的市县区文字

      */



    .anchorBL,

        /*.anchorTR,*/

    .BMap_zlHolder,

        /*隐藏因为播放街景失败的"您未安装Flash Player播放器或者版本过低"提示图层导致无法继续点击地图*/

    [id^=PanoramaFlashWraperTANGRAM] {

        display: none;

        visibility: hidden;

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 开发一款地图导航应用需要掌握以下技术: 1. 地图引擎:使用地图引擎技术,如Google Maps API、OpenStreetMap等,可以实现地图的显示和操作。 2. 定位技术:使用GPS、Wi-Fi、蓝牙等技术来实现用户的位置定位。 3. 路径规划:使用算法,如Dijkstra算法、A*算法等,来实现从用户当前位置到目的地的最优路径规划。 4. 数据库技术:存储和维护地图数据,如道路信息、POI信息等。 5. 移动开发技术:使用移动开发技术,如Android、iOS、React Native等,来实现导航应用的界面设计和功能实现。 这些技术结合在一起,可以实现一款完整的地图导航应用。 ### 回答2: 开发一款地图导航应用需要以下技术: 首先,需要掌握地图数据的获取和处理技术。这包括获取地理数据源(如谷歌地图、百度地图等)、解析和处理地图数据,并将其转换为可供使用的格式(如矢量图、栅格图等)。 其次,需要了解地理信息系统(GIS)的技术。GIS技术包括地图投影、坐标系统转换、地图缩放、地理空间分析等,这些技术能够提供更精确和高效的地图导航功能。 还需要掌握全球定位系统(GPS)的技术。GPS技术可以获取用户的位置信息,并提供导航服务。需要了解GPS定位原理、GPS数据处理技术和GPS信号捕捉技术等。 另外,需要熟悉移动应用开发技术。地图导航应用通常是在移动设备上运行的,所以需要掌握移动应用开发技术,如Android开发(Java或Kotlin)、iOS开发(Objective-C或Swift)等。这些技术可以实现地图的显示、用户位置的定位与显示、导航路线的规划与显示等功能。 最后,需要掌握网络编程技术。地图导航应用通常需要获取实时的交通信息、路况信息等,这就需要通过网络进行数据的获取和传输。需要掌握网络通信协议(如HTTP)、数据传输格式(如JSON或XML)等技术。 总之,开发一款地图导航应用需要掌握地图数据处理技术、GIS技术、GPS技术、移动应用开发技术和网络编程技术等多个方面的技术知识。 ### 回答3: 开发一款地图导航app需要涉及多个技术方面,以下是一些主要的技术考虑: 1. 地图数据:需要获取地图数据并进行处理,可以使用地图API(如谷歌地图API百度地图API)来获取和显示地图数据。 2. 定位技术:为了实现导航功能,需要使用定位技术获取用户当前位置信息。可以使用GPS定位、基站定位或WIFI定位等技术。 3. 导航算法:导航app需要实现路径规划和导航指引等功能,因此需要使用一些导航算法,如Dijkstra算法、A*算法等来计算最短路径。 4. 数据存储:地图数据、用户信息、历史记录等需要进行存储和管理,可以使用数据库来存储这些数据。 5. 用户界面设计:一个好的用户界面设计能增加用户体验,因此需要考虑用户导航交互界面的设计和实现。 6. 移动端开发:地图导航app一般需要在移动设备上使用,可以使用移动端开发技术进行开发,如Android开发、iOS开发等。 7. 前端开发:如果是使用web技术进行开发,还需要考虑前端开发技术,如HTML、CSS、JavaScript等。 8. 后端开发:地图导航app需要与服务器进行数据交互,因此需要考虑后端开发技术,如Java、Python、Node.js等。 总之,开发一款地图导航app需要涉及多个技术方面,包括地图数据处理、定位技术、导航算法、数据存储、界面设计和移动端开发等。具体选择哪些技术取决于开发团队的技术栈和目标平台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值