From 9723f0435f2cc17c58acfbc6ee525014eb5d8a32 Mon Sep 17 00:00:00 2001 From: chen <2659004835@qq.com> Date: Fri, 15 Apr 2022 18:46:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BE=AE=E4=BF=A1qqmap-wx-js?= =?UTF-8?q?sdk.min.js=E5=9C=B0=E5=9B=BE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jsFile/map/qqmap-wx-jssdk.min.js | 891 +++++++++++++++++++++++++++++++ jsFile/tools.js | 92 ++++ 2 files changed, 983 insertions(+) create mode 100644 jsFile/map/qqmap-wx-jssdk.min.js diff --git a/jsFile/map/qqmap-wx-jssdk.min.js b/jsFile/map/qqmap-wx-jssdk.min.js new file mode 100644 index 0000000..4922185 --- /dev/null +++ b/jsFile/map/qqmap-wx-jssdk.min.js @@ -0,0 +1,891 @@ +var ERROR_CONF = { + KEY_ERR: 311, + KEY_ERR_MSG: 'key格式错误', + PARAM_ERR: 310, + PARAM_ERR_MSG: '请求参数信息有误', + SYSTEM_ERR: 600, + SYSTEM_ERR_MSG: '系统错误', + WX_ERR_CODE: 1000, + WX_OK_CODE: 200 +}; +var BASE_URL = 'https://apis.map.qq.com/ws/'; +var URL_SEARCH = BASE_URL + 'place/v1/search'; +var URL_SUGGESTION = BASE_URL + 'place/v1/suggestion'; +var URL_GET_GEOCODER = BASE_URL + 'geocoder/v1/'; +var URL_CITY_LIST = BASE_URL + 'district/v1/list'; +var URL_AREA_LIST = BASE_URL + 'district/v1/getchildren'; +var URL_DISTANCE = BASE_URL + 'distance/v1/'; +var URL_DIRECTION = BASE_URL + 'direction/v1/'; +var MODE = { + driving: 'driving', + transit: 'transit' +}; +var EARTH_RADIUS = 6378136.49; +var Utils = { + safeAdd(x, y) { + var lsw = (x & 0xffff) + (y & 0xffff); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xffff) + }, + bitRotateLeft(num, cnt) { + return (num << cnt) | (num >>> (32 - cnt)) + }, + md5cmn(q, a, b, x, s, t) { + return this.safeAdd(this.bitRotateLeft(this.safeAdd(this.safeAdd(a, q), this.safeAdd(x, t)), s), b) + }, + md5ff(a, b, c, d, x, s, t) { + return this.md5cmn((b & c) | (~b & d), a, b, x, s, t) + }, + md5gg(a, b, c, d, x, s, t) { + return this.md5cmn((b & d) | (c & ~d), a, b, x, s, t) + }, + md5hh(a, b, c, d, x, s, t) { + return this.md5cmn(b ^ c ^ d, a, b, x, s, t) + }, + md5ii(a, b, c, d, x, s, t) { + return this.md5cmn(c ^ (b | ~d), a, b, x, s, t) + }, + binlMD5(x, len) { + x[len >> 5] |= 0x80 << (len % 32); + x[((len + 64) >>> 9 << 4) + 14] = len; + var i; + var olda; + var oldb; + var oldc; + var oldd; + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + var d = 271733878; + for (i = 0; i < x.length; i += 16) { + olda = a; + oldb = b; + oldc = c; + oldd = d; + a = this.md5ff(a, b, c, d, x[i], 7, -680876936); + d = this.md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = this.md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = this.md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = this.md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = this.md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = this.md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = this.md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = this.md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = this.md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = this.md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = this.md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = this.md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = this.md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = this.md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = this.md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + a = this.md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = this.md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = this.md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = this.md5gg(b, c, d, a, x[i], 20, -373897302); + a = this.md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = this.md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = this.md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = this.md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = this.md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = this.md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = this.md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = this.md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = this.md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = this.md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = this.md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = this.md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + a = this.md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = this.md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = this.md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = this.md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = this.md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = this.md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = this.md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = this.md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = this.md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = this.md5hh(d, a, b, c, x[i], 11, -358537222); + c = this.md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = this.md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = this.md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = this.md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = this.md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = this.md5hh(b, c, d, a, x[i + 2], 23, -995338651); + a = this.md5ii(a, b, c, d, x[i], 6, -198630844); + d = this.md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = this.md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = this.md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = this.md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = this.md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = this.md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = this.md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = this.md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = this.md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = this.md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = this.md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = this.md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = this.md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = this.md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = this.md5ii(b, c, d, a, x[i + 9], 21, -343485551); + a = this.safeAdd(a, olda); + b = this.safeAdd(b, oldb); + c = this.safeAdd(c, oldc); + d = this.safeAdd(d, oldd) + } + return [a, b, c, d] + }, + binl2rstr(input) { + var i; + var output = ''; + var length32 = input.length * 32; + for (i = 0; i < length32; i += 8) { + output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff) + } + return output + }, + rstr2binl(input) { + var i; + var output = []; + output[(input.length >> 2) - 1] = undefined; + for (i = 0; i < output.length; i += 1) { + output[i] = 0 + } + var length8 = input.length * 8; + for (i = 0; i < length8; i += 8) { + output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32) + } + return output + }, + rstrMD5(s) { + return this.binl2rstr(this.binlMD5(this.rstr2binl(s), s.length * 8)) + }, + rstrHMACMD5(key, data) { + var i; + var bkey = this.rstr2binl(key); + var ipad = []; + var opad = []; + var hash; + ipad[15] = opad[15] = undefined; + if (bkey.length > 16) { + bkey = this.binlMD5(bkey, key.length * 8) + } + for (i = 0; i < 16; i += 1) { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5c5c5c5c + } + hash = this.binlMD5(ipad.concat(this.rstr2binl(data)), 512 + data.length * 8); + return this.binl2rstr(this.binlMD5(opad.concat(hash), 512 + 128)) + }, + rstr2hex(input) { + var hexTab = '0123456789abcdef'; + var output = ''; + var x; + var i; + for (i = 0; i < input.length; i += 1) { + x = input.charCodeAt(i); + output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f) + } + return output + }, + str2rstrUTF8(input) { + return unescape(encodeURIComponent(input)) + }, + rawMD5(s) { + return this.rstrMD5(this.str2rstrUTF8(s)) + }, + hexMD5(s) { + return this.rstr2hex(this.rawMD5(s)) + }, + rawHMACMD5(k, d) { + return this.rstrHMACMD5(this.str2rstrUTF8(k), str2rstrUTF8(d)) + }, + hexHMACMD5(k, d) { + return this.rstr2hex(this.rawHMACMD5(k, d)) + }, + md5(string, key, raw) { + if (!key) { + if (!raw) { + return this.hexMD5(string) + } + return this.rawMD5(string) + } + if (!raw) { + return this.hexHMACMD5(key, string) + } + return this.rawHMACMD5(key, string) + }, + getSig(requestParam, sk, feature, mode) { + var sig = null; + var requestArr = []; + Object.keys(requestParam).sort().forEach(function(key) { + requestArr.push(key + '=' + requestParam[key]) + }); + if (feature == 'search') { + sig = '/ws/place/v1/search?' + requestArr.join('&') + sk + } + if (feature == 'suggest') { + sig = '/ws/place/v1/suggestion?' + requestArr.join('&') + sk + } + if (feature == 'reverseGeocoder') { + sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk + } + if (feature == 'geocoder') { + sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk + } + if (feature == 'getCityList') { + sig = '/ws/district/v1/list?' + requestArr.join('&') + sk + } + if (feature == 'getDistrictByCityId') { + sig = '/ws/district/v1/getchildren?' + requestArr.join('&') + sk + } + if (feature == 'calculateDistance') { + sig = '/ws/distance/v1/?' + requestArr.join('&') + sk + } + if (feature == 'direction') { + sig = '/ws/direction/v1/' + mode + '?' + requestArr.join('&') + sk + } + sig = this.md5(sig); + return sig + }, + location2query(data) { + if (typeof data == 'string') { + return data + } + var query = ''; + for (var i = 0; i < data.length; i++) { + var d = data[i]; + if (!!query) { + query += ';' + } + if (d.location) { + query = query + d.location.lat + ',' + d.location.lng + } + if (d.latitude && d.longitude) { + query = query + d.latitude + ',' + d.longitude + } + } + return query + }, + rad(d) { + return d * Math.PI / 180.0 + }, + getEndLocation(location) { + var to = location.split(';'); + var endLocation = []; + for (var i = 0; i < to.length; i++) { + endLocation.push({ + lat: parseFloat(to[i].split(',')[0]), + lng: parseFloat(to[i].split(',')[1]) + }) + } + return endLocation + }, + getDistance(latFrom, lngFrom, latTo, lngTo) { + var radLatFrom = this.rad(latFrom); + var radLatTo = this.rad(latTo); + var a = radLatFrom - radLatTo; + var b = this.rad(lngFrom) - this.rad(lngTo); + var distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLatFrom) * Math.cos( + radLatTo) * Math.pow(Math.sin(b / 2), 2))); + distance = distance * EARTH_RADIUS; + distance = Math.round(distance * 10000) / 10000; + return parseFloat(distance.toFixed(0)) + }, + getWXLocation(success, fail, complete) { + wx.getLocation({ + type: 'gcj02', + success: success, + fail: fail, + complete: complete + }) + }, + getLocationParam(location) { + if (typeof location == 'string') { + var locationArr = location.split(','); + if (locationArr.length === 2) { + location = { + latitude: location.split(',')[0], + longitude: location.split(',')[1] + } + } else { + location = {} + } + } + return location + }, + polyfillParam(param) { + param.success = param.success || function() {}; + param.fail = param.fail || function() {}; + param.complete = param.complete || function() {} + }, + checkParamKeyEmpty(param, key) { + if (!param[key]) { + var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + key + '参数格式有误'); + param.fail(errconf); + param.complete(errconf); + return true + } + return false + }, + checkKeyword(param) { + return !this.checkParamKeyEmpty(param, 'keyword') + }, + checkLocation(param) { + var location = this.getLocationParam(param.location); + if (!location || !location.latitude || !location.longitude) { + var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + ' location参数格式有误'); + param.fail(errconf); + param.complete(errconf); + return false + } + return true + }, + buildErrorConfig(errCode, errMsg) { + return { + status: errCode, + message: errMsg + } + }, + handleData(param, data, feature) { + if (feature == 'search') { + var searchResult = data.data; + var searchSimplify = []; + for (var i = 0; i < searchResult.length; i++) { + searchSimplify.push({ + id: searchResult[i].id || null, + title: searchResult[i].title || null, + latitude: searchResult[i].location && searchResult[i].location.lat || null, + longitude: searchResult[i].location && searchResult[i].location.lng || null, + address: searchResult[i].address || null, + category: searchResult[i].category || null, + tel: searchResult[i].tel || null, + adcode: searchResult[i].ad_info && searchResult[i].ad_info.adcode || null, + city: searchResult[i].ad_info && searchResult[i].ad_info.city || null, + district: searchResult[i].ad_info && searchResult[i].ad_info.district || null, + province: searchResult[i].ad_info && searchResult[i].ad_info.province || null + }) + } + param.success(data, { + searchResult: searchResult, + searchSimplify: searchSimplify + }) + } else if (feature == 'suggest') { + var suggestResult = data.data; + var suggestSimplify = []; + for (var i = 0; i < suggestResult.length; i++) { + suggestSimplify.push({ + adcode: suggestResult[i].adcode || null, + address: suggestResult[i].address || null, + category: suggestResult[i].category || null, + city: suggestResult[i].city || null, + district: suggestResult[i].district || null, + id: suggestResult[i].id || null, + latitude: suggestResult[i].location && suggestResult[i].location.lat || null, + longitude: suggestResult[i].location && suggestResult[i].location.lng || null, + province: suggestResult[i].province || null, + title: suggestResult[i].title || null, + type: suggestResult[i].type || null + }) + } + param.success(data, { + suggestResult: suggestResult, + suggestSimplify: suggestSimplify + }) + } else if (feature == 'reverseGeocoder') { + var reverseGeocoderResult = data.result; + var reverseGeocoderSimplify = { + address: reverseGeocoderResult.address || null, + latitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lat || null, + longitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lng || null, + adcode: reverseGeocoderResult.ad_info && reverseGeocoderResult.ad_info.adcode || null, + city: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.city || + null, + district: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component + .district || null, + nation: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component + .nation || null, + province: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component + .province || null, + street: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component + .street || null, + street_number: reverseGeocoderResult.address_component && reverseGeocoderResult + .address_component.street_number || null, + recommend: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult + .formatted_addresses.recommend || null, + rough: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses + .rough || null + }; + if (reverseGeocoderResult.pois) { + var pois = reverseGeocoderResult.pois; + var poisSimplify = []; + for (var i = 0; i < pois.length; i++) { + poisSimplify.push({ + id: pois[i].id || null, + title: pois[i].title || null, + latitude: pois[i].location && pois[i].location.lat || null, + longitude: pois[i].location && pois[i].location.lng || null, + address: pois[i].address || null, + category: pois[i].category || null, + adcode: pois[i].ad_info && pois[i].ad_info.adcode || null, + city: pois[i].ad_info && pois[i].ad_info.city || null, + district: pois[i].ad_info && pois[i].ad_info.district || null, + province: pois[i].ad_info && pois[i].ad_info.province || null + }) + } + param.success(data, { + reverseGeocoderResult: reverseGeocoderResult, + reverseGeocoderSimplify: reverseGeocoderSimplify, + pois: pois, + poisSimplify: poisSimplify + }) + } else { + param.success(data, { + reverseGeocoderResult: reverseGeocoderResult, + reverseGeocoderSimplify: reverseGeocoderSimplify + }) + } + } else if (feature == 'geocoder') { + var geocoderResult = data.result; + var geocoderSimplify = { + title: geocoderResult.title || null, + latitude: geocoderResult.location && geocoderResult.location.lat || null, + longitude: geocoderResult.location && geocoderResult.location.lng || null, + adcode: geocoderResult.ad_info && geocoderResult.ad_info.adcode || null, + province: geocoderResult.address_components && geocoderResult.address_components.province || + null, + city: geocoderResult.address_components && geocoderResult.address_components.city || null, + district: geocoderResult.address_components && geocoderResult.address_components.district || + null, + street: geocoderResult.address_components && geocoderResult.address_components.street || null, + street_number: geocoderResult.address_components && geocoderResult.address_components + .street_number || null, + level: geocoderResult.level || null + }; + param.success(data, { + geocoderResult: geocoderResult, + geocoderSimplify: geocoderSimplify + }) + } else if (feature == 'getCityList') { + var provinceResult = data.result[0]; + var cityResult = data.result[1]; + var districtResult = data.result[2]; + param.success(data, { + provinceResult: provinceResult, + cityResult: cityResult, + districtResult: districtResult + }) + } else if (feature == 'getDistrictByCityId') { + var districtByCity = data.result[0]; + param.success(data, districtByCity) + } else if (feature == 'calculateDistance') { + var calculateDistanceResult = data.result.elements; + var distance = []; + for (var i = 0; i < calculateDistanceResult.length; i++) { + distance.push(calculateDistanceResult[i].distance) + } + param.success(data, { + calculateDistanceResult: calculateDistanceResult, + distance: distance + }) + } else if (feature == 'direction') { + var direction = data.result.routes; + param.success(data, direction) + } else { + param.success(data) + } + }, + buildWxRequestConfig(param, options, feature) { + var that = this; + options.header = { + "content-type": "application/json" + }; + options.method = 'GET'; + options.success = function(res) { + var data = res.data; + if (data.status === 0) { + that.handleData(param, data, feature) + } else { + param.fail(data) + } + }; + options.fail = function(res) { + res.statusCode = ERROR_CONF.WX_ERR_CODE; + param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)) + }; + options.complete = function(res) { + var statusCode = +res.statusCode; + switch (statusCode) { + case ERROR_CONF.WX_ERR_CODE: { + param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)); + break + } + case ERROR_CONF.WX_OK_CODE: { + var data = res.data; + if (data.status === 0) { + param.complete(data) + } else { + param.complete(that.buildErrorConfig(data.status, data.message)) + } + break + } + default: { + param.complete(that.buildErrorConfig(ERROR_CONF.SYSTEM_ERR, ERROR_CONF.SYSTEM_ERR_MSG)) + } + } + }; + return options + }, + locationProcess(param, locationsuccess, locationfail, locationcomplete) { + var that = this; + locationfail = locationfail || function(res) { + res.statusCode = ERROR_CONF.WX_ERR_CODE; + param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)) + }; + locationcomplete = locationcomplete || function(res) { + if (res.statusCode == ERROR_CONF.WX_ERR_CODE) { + param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)) + } + }; + if (!param.location) { + that.getWXLocation(locationsuccess, locationfail, locationcomplete) + } else if (that.checkLocation(param)) { + var location = Utils.getLocationParam(param.location); + locationsuccess(location) + } + } +}; +class QQMapWX { + constructor(options) { + if (!options.key) { + throw Error('key值不能为空') + } + this.key = options.key + }; + search(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + if (!Utils.checkKeyword(options)) { + return + } + var requestParam = { + keyword: options.keyword, + orderby: options.orderby || '_distance', + page_size: options.page_size || 10, + page_index: options.page_index || 1, + output: 'json', + key: that.key + }; + if (options.address_format) { + requestParam.address_format = options.address_format + } + if (options.filter) { + requestParam.filter = options.filter + } + var distance = options.distance || "1000"; + var auto_extend = options.auto_extend || 1; + var region = null; + var rectangle = null; + if (options.region) { + region = options.region + } + if (options.rectangle) { + rectangle = options.rectangle + } + var locationsuccess = function(result) { + if (region && !rectangle) { + requestParam.boundary = "region(" + region + "," + auto_extend + "," + result.latitude + "," + + result.longitude + ")"; + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'search') + } + } else if (rectangle && !region) { + requestParam.boundary = "rectangle(" + rectangle + ")"; + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'search') + } + } else { + requestParam.boundary = "nearby(" + result.latitude + "," + result.longitude + "," + distance + + "," + auto_extend + ")"; + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'search') + } + } + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_SEARCH, + data: requestParam + }, 'search')) + }; + Utils.locationProcess(options, locationsuccess) + }; + getSuggestion(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + if (!Utils.checkKeyword(options)) { + return + } + var requestParam = { + keyword: options.keyword, + region: options.region || '全国', + region_fix: options.region_fix || 0, + policy: options.policy || 0, + page_size: options.page_size || 10, + page_index: options.page_index || 1, + get_subpois: options.get_subpois || 0, + output: 'json', + key: that.key + }; + if (options.address_format) { + requestParam.address_format = options.address_format + } + if (options.filter) { + requestParam.filter = options.filter + } + if (options.location) { + var locationsuccess = function(result) { + requestParam.location = result.latitude + ',' + result.longitude; + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest') + } + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_SUGGESTION, + data: requestParam + }, "suggest")) + }; + Utils.locationProcess(options, locationsuccess) + } else { + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest') + } + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_SUGGESTION, + data: requestParam + }, "suggest")) + } + }; + reverseGeocoder(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + var requestParam = { + coord_type: options.coord_type || 5, + get_poi: options.get_poi || 0, + output: 'json', + key: that.key + }; + if (options.poi_options) { + requestParam.poi_options = options.poi_options + } + var locationsuccess = function(result) { + requestParam.location = result.latitude + ',' + result.longitude; + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'reverseGeocoder') + } + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_GET_GEOCODER, + data: requestParam + }, 'reverseGeocoder')) + }; + Utils.locationProcess(options, locationsuccess) + }; + geocoder(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + if (Utils.checkParamKeyEmpty(options, 'address')) { + return + } + var requestParam = { + address: options.address, + output: 'json', + key: that.key + }; + if (options.region) { + requestParam.region = options.region + } + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'geocoder') + } + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_GET_GEOCODER, + data: requestParam + }, 'geocoder')) + }; + getCityList(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + var requestParam = { + output: 'json', + key: that.key + }; + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'getCityList') + } + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_CITY_LIST, + data: requestParam + }, 'getCityList')) + }; + getDistrictByCityId(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + if (Utils.checkParamKeyEmpty(options, 'id')) { + return + } + var requestParam = { + id: options.id || '', + output: 'json', + key: that.key + }; + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'getDistrictByCityId') + } + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_AREA_LIST, + data: requestParam + }, 'getDistrictByCityId')) + }; + calculateDistance(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + if (Utils.checkParamKeyEmpty(options, 'to')) { + return + } + var requestParam = { + mode: options.mode || 'walking', + to: Utils.location2query(options.to), + output: 'json', + key: that.key + }; + if (options.from) { + options.location = options.from + } + if (requestParam.mode == 'straight') { + var locationsuccess = function(result) { + var locationTo = Utils.getEndLocation(requestParam.to); + var data = { + message: "query ok", + result: { + elements: [] + }, + status: 0 + }; + for (var i = 0; i < locationTo.length; i++) { + data.result.elements.push({ + distance: Utils.getDistance(result.latitude, result.longitude, locationTo[i] + .lat, locationTo[i].lng), + duration: 0, + from: { + lat: result.latitude, + lng: result.longitude + }, + to: { + lat: locationTo[i].lat, + lng: locationTo[i].lng + } + }) + } + var calculateResult = data.result.elements; + var distanceResult = []; + for (var i = 0; i < calculateResult.length; i++) { + distanceResult.push(calculateResult[i].distance) + } + return options.success(data, { + calculateResult: calculateResult, + distanceResult: distanceResult + }) + }; + Utils.locationProcess(options, locationsuccess) + } else { + var locationsuccess = function(result) { + requestParam.from = result.latitude + ',' + result.longitude; + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'calculateDistance') + } + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_DISTANCE, + data: requestParam + }, 'calculateDistance')) + }; + Utils.locationProcess(options, locationsuccess) + } + }; + direction(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + if (Utils.checkParamKeyEmpty(options, 'to')) { + return + } + var requestParam = { + output: 'json', + key: that.key + }; + if (typeof options.to == 'string') { + requestParam.to = options.to + } else { + requestParam.to = options.to.latitude + ',' + options.to.longitude + } + var SET_URL_DIRECTION = null; + options.mode = options.mode || MODE.driving; + SET_URL_DIRECTION = URL_DIRECTION + options.mode; + if (options.from) { + options.location = options.from + } + if (options.mode == MODE.driving) { + if (options.from_poi) { + requestParam.from_poi = options.from_poi + } + if (options.heading) { + requestParam.heading = options.heading + } + if (options.speed) { + requestParam.speed = options.speed + } + if (options.accuracy) { + requestParam.accuracy = options.accuracy + } + if (options.road_type) { + requestParam.road_type = options.road_type + } + if (options.to_poi) { + requestParam.to_poi = options.to_poi + } + if (options.from_track) { + requestParam.from_track = options.from_track + } + if (options.waypoints) { + requestParam.waypoints = options.waypoints + } + if (options.policy) { + requestParam.policy = options.policy + } + if (options.plate_number) { + requestParam.plate_number = options.plate_number + } + } + if (options.mode == MODE.transit) { + if (options.departure_time) { + requestParam.departure_time = options.departure_time + } + if (options.policy) { + requestParam.policy = options.policy + } + } + var locationsuccess = function(result) { + requestParam.from = result.latitude + ',' + result.longitude; + if (options.sig) { + requestParam.sig = Utils.getSig(requestParam, options.sig, 'direction', options.mode) + } + wx.request(Utils.buildWxRequestConfig(options, { + url: SET_URL_DIRECTION, + data: requestParam + }, 'direction')) + }; + Utils.locationProcess(options, locationsuccess) + } +}; +module.exports = QQMapWX; diff --git a/jsFile/tools.js b/jsFile/tools.js index eddba92..5ca8e74 100644 --- a/jsFile/tools.js +++ b/jsFile/tools.js @@ -44,6 +44,69 @@ const tools = { let xingq = ['周一','周二','周三','周四','周五','周六','周日'] }, + //将时间转换成几天前,几个月前,几小时前等 + timeago(datetime) { + if(datetime == undefined || datetime == ''){ + return + } + var timePublish = new Date(datetime.replace(/-/gi, '/')); + var timeNow = new Date(); + var minute = 1000 * 60; + var hour = minute * 60; + var day = hour * 24; + var month = day * 30; + var result = "0"; + var diffValue = timeNow - timePublish; + var diffMonth = diffValue / month; + var diffWeek = diffValue / (7 * day); + var diffDay = diffValue / day; + var diffHour = diffValue / hour; + var diffMinute = diffValue / minute; + + // console.log(datetime) + // console.log(timePublish) + // console.log(timeNow) + // console.log('diffValue:'+diffValue+' ' +'diffMonth:'+diffMonth+' ' +'diffWeek:'+diffWeek+' ' +'diffDay:'+diffDay+' ' +'diffHour:'+diffHour+' ' +'diffMinute:'+diffMinute); + + if (diffValue < 0) { + console.log('错误时间') + } + else if (diffDay > 1) { + var year = timePublish.getFullYear(); + var month = timePublish.getMonth() + 1; + var date = timePublish.getDate(); + var hours = timePublish.getHours(); + var minutes = timePublish.getMinutes(); + var seconds = timePublish.getSeconds(); + if(month<=9){month = '0'+month} + if(date<=9){date = '0'+date} + if(hours<=9){hours = '0'+hours} + if(minutes<=9){minutes = '0'+minutes} + if(seconds<=9){seconds = '0'+seconds} + // result = year+'-'+month+'-'+date+' '+hours+':'+minutes+':'+seconds + result = year+'-'+month+'-'+date; + + } + else if (diffMonth > 1) { + result = parseInt(diffMonth) + "月前"; + } + else if (diffWeek > 1) { + result = parseInt(diffWeek) + "周前"; + } + else if (diffDay > 1 ) { + result = parseInt(diffDay) + "天前"; + } + else if (diffHour > 1) { + result = parseInt(diffHour) + "小时前"; + } + else if (diffMinute > 1) { + result = parseInt(diffMinute) + "分钟前"; + } + else { + result = "刚刚"; + } + return result; + }, // 手机号验证 isPhone:function(phone){ // 手机号正则表达式 @@ -593,6 +656,21 @@ const tools = { } }) // #endif + + // #ifdef APP-PLUS || H5 + uni.openLocation({ + latitude: parseFloat(latitude), + longitude: parseFloat(longitude), + name:name, + address:address, + success: function () { + console.log('success'); + }, + fail:function(err){ + console.log(err) + } + }); + // #endif setTimeout(()=>{ this.flag = true; },2000) @@ -639,6 +717,20 @@ const tools = { } }) return imgArr; + }, + openLocation(latitude,longitude,name,address){ + uni.openLocation({ + latitude: parseFloat(latitude), + longitude: parseFloat(longitude), + name:name, + address:address, + success: function () { + console.log('success'); + }, + fail:function(err){ + console.log(err) + } + }); } }