欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  互联网

微信小程序开发:微信小程序里面集成百度地图的步骤

程序员文章站 2022-03-04 21:27:28
在微信小程序开发过程中,有时候会用到微信小程序之外的功能,一般情况下微信小程序是使用腾讯自己的生态,一般都是腾讯大礼包,但是不排除极个别的情况。那么本篇博文就来分享一下微信小程序集成接入百度地图的功能,个人觉得百度地图比腾讯地图要好用一点,因人而异,本案例是根据工作实际需求来介绍的,仅供参考学习。首先要知道,百度地图已经支持微信小程序的对接API,也提供了SDK等内容,极大方便了微信小程序的多元化开发需求。具体的操作步骤如下所示。1、打开百度地图开放平台官网,然后找到百度地图的“开发文档”模块,然后...

在微信小程序开发过程中,有时候会用到微信小程序之外的功能,一般情况下微信小程序是使用腾讯自己的生态,一般都是腾讯大礼包,但是不排除极个别的情况。那么本篇博文就来分享一下微信小程序集成接入百度地图的功能,个人觉得百度地图比腾讯地图要好用一点,因人而异,本案例是根据工作实际需求来介绍的,仅供参考学习。

首先要知道,百度地图已经支持微信小程序的对接API,也提供了SDK等内容,极大方便了微信小程序的多元化开发需求。具体的操作步骤如下所示。

1、打开百度地图开放平台官网,然后找到百度地图的“开发文档”模块,然后找到“微信小程序JavaScript API”部分,然后点击进入,可以查看集成教程,以及下载demo等;

微信小程序开发:微信小程序里面集成百度地图的步骤

微信小程序开发:微信小程序里面集成百度地图的步骤

微信小程序开发:微信小程序里面集成百度地图的步骤

微信小程序开发:微信小程序里面集成百度地图的步骤

2、打开控制台,注册登录百度地图开发平台的账号,然后进行应用注册,申请应用的APP ID等注册信息(注意:APP ID在微信小程序集成百度地图的地方需要用到);

微信小程序开发:微信小程序里面集成百度地图的步骤

微信小程序开发:微信小程序里面集成百度地图的步骤

微信小程序开发:微信小程序里面集成百度地图的步骤

微信小程序开发:微信小程序里面集成百度地图的步骤

3、在相关下载里面下载下来demo,把相关文件导入到项目中去;

微信小程序开发:微信小程序里面集成百度地图的步骤

4、然后在project.config.json文件里面找到填写“appid”的位置,把在百度地图里面申请创建的应用APP ID复制进去,然后点击保存,运行项目,查看是否运行成功,如果运行成功那么就大功告成;

微信小程序开发:微信小程序里面集成百度地图的步骤

微信小程序开发:微信小程序里面集成百度地图的步骤

附录:

附带百度地图的代码,如下所示:

1、bmap-wx.js文件源码:

/**

* @file 微信小程序JSAPI

* @author 崔健 cuijian03@baidu.com 2017.01.10

* @update 邓淑芳 623996689@qq.com 2019.07.03

*/

/**

* 百度地图微信小程序API类

*

* @class

*/

class BMapWX {

    /**

     * 百度地图微信小程序API类

     *

     * @constructor

     */

    constructor(param) {

      this.ak = param["ak"];

    }

    /**

     * 使用微信接口进行定位

     *

     * @param {string} type 坐标类型

     * @param {Function} success 成功执行

     * @param {Function} fail 失败执行

     * @param {Function} complete 完成后执行

     */

    getWXLocation(type, success, fail, complete) {

      type = type || 'gcj02',

      success = success || function () { };

      fail = fail || function () { };

      complete = complete || function () { };

      wx.getLocation({

        type: type,

        success: success,

        fail: fail,

        complete: complete

      });

    }  

    /**

     * POI周边检索

     *

     * @param {Object} param 检索配置

     * 参数对象结构可以参考

     * http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi

     */

    search(param) {

      var that = this;

      param = param || {};

      let searchparam = {

        query: param["query"] || '生活服务$美食&酒店',

        scope: param["scope"] || 1,

        filter: param["filter"] || '',

        coord_type: param["coord_type"] || 2,

        page_size: param["page_size"] || 10,

        page_num: param["page_num"] || 0,

        output: param["output"] || 'json',

        ak: that.ak,

        sn: param["sn"] || '',

        timestamp: param["timestamp"] || '',

        radius: param["radius"] || 2000,

        ret_coordtype: 'gcj02ll'

      };

      let otherparam = {

        iconPath: param["iconPath"],

        iconTapPath: param["iconTapPath"],

        width: param["width"],

        height: param["height"],

        alpha: param["alpha"] || 1,

        success: param["success"] || function () { },

        fail: param["fail"] || function () { }

      };

      let type = 'gcj02';

      let locationsuccess = function (result) {

        searchparam["location"] = result["latitude"] + ',' + result["longitude"];

        wx.request({

          url: 'https://api.map.baidu.com/place/v2/search',

          data: searchparam,

          header: {

            "content-type": "application/json"

          },

          method: 'GET',

          success(data) {

            let res = data["data"];

            if (res["status"] === 0) {

              let poiArr = res["results"];

              // outputRes 包含两个对象,

              // originalData为百度接口返回的原始数据

              // wxMarkerData为小程序规范的marker格式

              let outputRes = {};

              outputRes["originalData"] = res;

              outputRes["wxMarkerData"] = [];

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

                outputRes["wxMarkerData"][i] = {

                  id: i,

                  latitude: poiArr[i]["location"]["lat"],

                  longitude: poiArr[i]["location"]["lng"],

                  title: poiArr[i]["name"],

                  iconPath: otherparam["iconPath"],

                  iconTapPath: otherparam["iconTapPath"],

                  address: poiArr[i]["address"],

                  telephone: poiArr[i]["telephone"],

                  alpha: otherparam["alpha"],

                  width: otherparam["width"],

                  height: otherparam["height"]

                }

              }

              otherparam.success(outputRes);

            } else {

              otherparam.fail({

                errMsg: res["message"],

                statusCode: res["status"]

              });

            }

          },

          fail(data) {

            otherparam.fail(data);

          }

        });

      }

      let locationfail = function (result) {

        otherparam.fail(result);

      };

      let locationcomplete = function (result) {

      };

      if (!param["location"]) {

        that.getWXLocation(type, locationsuccess, locationfail, locationcomplete);

      } else {

        let longitude = param.location.split(',')[1];

        let latitude = param.location.split(',')[0];

        let errMsg = 'input location';

        let res = {

          errMsg: errMsg,

          latitude: latitude,

          longitude: longitude

        };

        locationsuccess(res);

      }

    }

    /**

     * sug模糊检索

     *

     * @param {Object} param 检索配置

     * 参数对象结构可以参考

     * http://lbsyun.baidu.com/index.php?title=webapi/place-suggestion-api

     */

    suggestion(param) {

      var that = this;

      param = param || {};

      let suggestionparam = {

        query: param["query"] || '',

        region: param["region"] || '全国',

        city_limit: param["city_limit"] || false,

        output: param["output"] || 'json',

        ak: that.ak,

        sn: param["sn"] || '',

        timestamp: param["timestamp"] || '',

        ret_coordtype: 'gcj02ll'

      };

      let otherparam = {

        success: param["success"] || function () { },

        fail: param["fail"] || function () { }

      };

      wx.request({

        url: 'https://api.map.baidu.com/place/v2/suggestion',

        data: suggestionparam,

        header: {

          "content-type": "application/json"

        },

        method: 'GET',

        success(data) {

          let res = data["data"];

          if (res["status"] === 0) {

            otherparam.success(res);

          } else {

            otherparam.fail({

              errMsg: res["message"],

              statusCode: res["status"]

            });

          }

        },

        fail(data) {

          otherparam.fail(data);

        }

      });

    }

      /**

     * rgc检索(逆地理编码:经纬度->地点描述)

     *

     * @param {Object} param 检索配置

     * 参数对象结构可以参考

     * https://lbs.baidu.com/index.php?title=webapi/guide/webservice-geocoding-abroad

     */

    regeocoding (param) {

      var that = this;

      param = param || {};

      let regeocodingparam = {

        coordtype: param["coordtype"] || 'gcj02ll',         

        ret_coordtype: 'gcj02ll',                          

        radius: param["radius"] || 1000,                    

        ak: that.ak,                                        

        sn: param["sn"] || '',                              

        output: param["output"] || 'json',                 

        callback: param["callback"] || function () { },     

        extensions_poi: param["extensions_poi"] || 1,      

        extensions_road: param["extensions_road"] || false,

        extensions_town: param["extensions_town"] || false,

        language: param["language"] || 'zh-CN',             

        language_auto: param["language_auto"] || 0        

      };

      let otherparam = {

        iconPath: param["iconPath"],

        iconTapPath: param["iconTapPath"],

        width: param["width"],

        height: param["height"],

        alpha: param["alpha"] || 1,

        success: param["success"] || function () { },

        fail: param["fail"] || function () { }

      };

      let type = 'gcj02';

      let locationsuccess = function (result) {

        regeocodingparam["location"] = result["latitude"] + ',' + result["longitude"];

        wx.request({

          url: 'https://api.map.baidu.com/reverse_geocoding/v3',

          data: regeocodingparam,

          header: {

            "content-type": "application/json"

          },

          method: 'GET',

          success(data) {

            let res = data["data"];

            if (res["status"] === 0) {

              let poiObj = res["result"];

              // outputRes 包含两个对象:

              // originalData为百度接口返回的原始数据

              // wxMarkerData为小程序规范的marker格式

              let outputRes = {};

              outputRes["originalData"] = res;

              outputRes["wxMarkerData"] = [];

              outputRes["wxMarkerData"][0] = {

                id: 0,

                latitude: result["latitude"],

                longitude: result["longitude"],

                address: poiObj["formatted_address"],

                iconPath: otherparam["iconPath"],

                iconTapPath: otherparam["iconTapPath"],

                desc: poiObj["sematic_description"],

                business: poiObj["business"],

                alpha: otherparam["alpha"],

                width: otherparam["width"],

                height: otherparam["height"]

              }

              otherparam.success(outputRes);

            } else {

              otherparam.fail({

                errMsg: res["message"],

                statusCode: res["status"]

              });

            }

          },

          fail(data) {

            otherparam.fail(data);

          }

        });

      };

      let locationfail = function (result) {

        otherparam.fail(result);

      }

      let locationcomplete = function (result) {

      };

      if (!param["location"]) {

        that.getWXLocation(type, locationsuccess, locationfail, locationcomplete);

      } else {

        let longitude = param.location.split(',')[1];

        let latitude = param.location.split(',')[0];

        let errMsg = 'input location';

        let res = {

          errMsg: errMsg,

          latitude: latitude,

          longitude: longitude

        };

        locationsuccess(res);

      }

    }

      /**

     * gc检索(地理编码:地点->经纬度)

     * @param {Object} param 检索配置

     * 参数对象结构可以参考

     * https://lbs.baidu.com/index.php?title=webapi/guide/webservice-geocoding

     */

    geocoding(param) {

      var that = this;

      param = param || {};

      let geocodingparam = {

        address: param["address"] || '',                    

        city: param["city"] || '',                          

        ret_coordtype: param["coordtype"] || 'gcj02ll',     

        ak: that.ak,                                        

        sn: param["sn"] || '',                              

        output: param["output"] || 'json',                  

        callback: param["callback"] || function () { }

      };

      let otherparam = {

        iconPath: param["iconPath"],

        iconTapPath: param["iconTapPath"],

        width: param["width"],

        height: param["height"],

        alpha: param["alpha"] || 1,

        success: param["success"] || function () { },

        fail: param["fail"] || function () { }

      };

      if (param["address"]) {

        wx.request({

          url: 'https://api.map.baidu.com/geocoding/v3',

          data: geocodingparam,

          header: {

            "content-type": "application/json"

          },

          method: 'GET',

          success(data) {

            let res = data["data"];

            if (res["status"] === 0){

              let poiObj = res["result"];

              // outputRes 包含两个对象:

              // originalData为百度接口返回的原始数据

              // wxMarkerData为小程序规范的marker格式

              let outputRes = res;

              outputRes["originalData"] = res;

              outputRes["wxMarkerData"] = [];

              outputRes["wxMarkerData"][0] = {

                id: 0,

                latitude: poiObj["location"]["lat"],

                longitude: poiObj["location"]["lng"],

                iconPath: otherparam["iconPath"],

                iconTapPath: otherparam["iconTapPath"],

                alpha: otherparam["alpha"],

                width: otherparam["width"],

                height: otherparam["height"]

              }

              otherparam.success(outputRes);

            } else {

              otherparam.fail({

                errMsg: res["message"],

                statusCode: res["status"]

              });

            }

          },

          fail(data) {

            otherparam.fail(data);

          }

        });

      } else {

        let errMsg = 'input address!';

        let res = {

          errMsg: errMsg

        };

        otherparam.fail(res);

      }

    }

  

    /**

     * 天气检索

     * @param {Object} param 检索配置

     */

    weather(param) {

      var that = this;

      param = param || {};

      let weatherparam = {

        coord_type: param["coord_type"] || 'gcj02',

        output: param["output"] || 'json',

        ak: that.ak,

        sn: param["sn"] || '',

        timestamp: param["timestamp"] || ''

      };

      let otherparam = {

        success: param["success"] || function () { },

        fail: param["fail"] || function () { }

      };

      let type = 'gcj02';

      let locationsuccess = function (result) {

        weatherparam["location"] = result["longitude"] + ',' + result["latitude"];

        wx.request({

          url: 'https://api.map.baidu.com/telematics/v3/weather',

          data: weatherparam,

          header: {

            "content-type": "application/json"

          },

          method: 'GET',

          success(data) {

            let res = data["data"];

            if (res["error"] === 0 && res["status"] === 'success') {

              let weatherArr = res["results"];

              // outputRes 包含两个对象,

              // originalData为百度接口返回的原始数据

              // wxMarkerData为小程序规范的marker格式

              let outputRes = {};

              outputRes["originalData"] = res;

              outputRes["currentWeather"] = [];

              outputRes["currentWeather"][0] = {

                currentCity: weatherArr[0]["currentCity"],

                pm25: weatherArr[0]["pm25"],

                date: weatherArr[0]["weather_data"][0]["date"],

                temperature: weatherArr[0]["weather_data"][0]["temperature"],

                weatherDesc: weatherArr[0]["weather_data"][0]["weather"],

                wind: weatherArr[0]["weather_data"][0]["wind"]

              };

              otherparam.success(outputRes);

            } else {

              otherparam.fail({

                errMsg: res["message"],

                statusCode: res["status"]

              });

            }

          },

          fail(data) {

            otherparam.fail(data);

          }

        });

      }

      let locationfail = function (result) {

        otherparam.fail(result);

      }

      let locationcomplete = function (result) {

      }

      if (!param["location"]) {

        that.getWXLocation(type, locationsuccess, locationfail, locationcomplete);

      } else {

        let longitude = param.location.split(',')[0];

        let latitude = param.location.split(',')[1];

        let errMsg = 'input location';

        let res = {

          errMsg: errMsg,

          latitude: latitude,

          longitude: longitude

        };

        locationsuccess(res);

      }

    }

  }

  module.exports.BMapWX = BMapWX;

 

以上就是本章全部内容,欢迎关注三掌柜的微信公众号“iOS开发by三掌柜”,三掌柜的新浪微博“三掌柜666”,欢迎关注!

三掌柜的微信公众号:

微信小程序开发:微信小程序里面集成百度地图的步骤

三掌柜的新浪微博:

微信小程序开发:微信小程序里面集成百度地图的步骤

 

本文地址:https://blog.csdn.net/CC1991_/article/details/107630421