diff --git a/app.json b/app.json index ff2f78b..2bb2a4e 100644 --- a/app.json +++ b/app.json @@ -1,5 +1,6 @@ { "pages": [ + "pages/cultureMap/cultureMap", "pages/index/index", "pages/order/order", "pages/venue/venue", diff --git a/images/marker_red.png b/images/marker_red.png new file mode 100644 index 0000000..8b4e20d Binary files /dev/null and b/images/marker_red.png differ diff --git a/libs/bmap-wx.js b/libs/bmap-wx.js new file mode 100644 index 0000000..c6ca337 --- /dev/null +++ b/libs/bmap-wx.js @@ -0,0 +1,452 @@ +/** + * @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; \ No newline at end of file diff --git a/pages/cultureMap/cultureMap.js b/pages/cultureMap/cultureMap.js new file mode 100644 index 0000000..7fc1d2a --- /dev/null +++ b/pages/cultureMap/cultureMap.js @@ -0,0 +1,59 @@ +// 引用百度地图微信小程序JSAPI模块 +var bmap = require('../../libs/bmap-wx.js'); +var app = getApp(); +Page({ + data: { + markers: [], + latitude: '', + longitude: '', + placeData: {}, + venueUrl: app.venueUrl, + }, + makertap: function(e) { + var that = this; + var id = e.markerId; + }, + onLoad: function() { + var self = this; + // 新建百度地图对象 + var BMap = new bmap.BMapWX({ + ak: 'qLbLh9KupfB8Ir72bkKogyvYi246rkKS' + }); + var fail = function(data) { + app.dialog.msg(data.msg); + }; + var success = function(code,data) { + wx.getLocation({ + altitude: 'false', + type: 'wgs84', + success: function (res) { + self.setData({ + longitude: res.longitude, + latitude: res.latitude + }) + } + }) + var arr = [] + for (var i = 0; i < data.data.length; i++) { + var obj = { + latitude: data.data[i].latitude, + longitude: data.data[i].longitude, + iconPath: '../../images/marker_red.png', + callout:{ + content:data.data[i].venueName + "\r\n地址:" + data.data[i].venuePosition + "\r\n电话:" + data.data[i].venueTelephone, + bgColor:"#fff", + padding:"5px", + borderRadius:"2px", + borderWidth:"1px", + borderColor:"#07c160", + } + } + arr.push(obj) + } + self.setData({ + markers: arr + }); + } + app.restAjax.get(app.restAjax.path('{venueUrl}/app/venuesmap/listrangevenuesinforelease', [self.data.venueUrl]),{},null,success,fail) + } +}) \ No newline at end of file diff --git a/pages/cultureMap/cultureMap.json b/pages/cultureMap/cultureMap.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/pages/cultureMap/cultureMap.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/cultureMap/cultureMap.wxml b/pages/cultureMap/cultureMap.wxml new file mode 100644 index 0000000..df31520 --- /dev/null +++ b/pages/cultureMap/cultureMap.wxml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/pages/cultureMap/cultureMap.wxss b/pages/cultureMap/cultureMap.wxss new file mode 100644 index 0000000..f52424a --- /dev/null +++ b/pages/cultureMap/cultureMap.wxss @@ -0,0 +1,12 @@ +.map_container{ + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} + +.map { + height: 100%; + width: 100%; +} \ No newline at end of file diff --git a/pages/heritage/heritage.js b/pages/heritage/heritage.js index 2e358bb..55cd130 100644 --- a/pages/heritage/heritage.js +++ b/pages/heritage/heritage.js @@ -25,6 +25,11 @@ Page({ url: '../friendCircle/friendCircle', }) }, + goCultureMap: function () { + wx.navigateTo({ + url: '../cultureMap/cultureMap', + }) + }, doGetLibraryList: function(page) { var self = this; app.dialog.loading('正在加载'); diff --git a/pages/heritage/heritage.wxml b/pages/heritage/heritage.wxml index 99632f4..b487c3d 100644 --- a/pages/heritage/heritage.wxml +++ b/pages/heritage/heritage.wxml @@ -11,6 +11,10 @@ 文化分享 + + + 文化地图 +