452 lines
15 KiB
JavaScript
452 lines
15 KiB
JavaScript
/**
|
||
* @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; |