The uniapp and WeChat applets use inverse geocoding to analyze the user's detailed address location. By default, the user is located and the location cannot be modified.

1. The customer needs to display the location information when checking in. The default user location cannot be changed. The native method of uniAPP is to display the map and modify the user's location. Do not combine needs.

1. Directly copy the following code and name it qqmap-wx-jssdk.js

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;

2. Register and apply for an account in the Tencent map api, apply for a key, and the WeChat applet ID is required
insert image description here
3. Introduce the script in the project component file at the beginning

import QQMapWX from '../../../../static/qqmap-wx-jssdk.js'//js文件按照所放位置映入
	var qqmapsdk = new QQMapWX({
    
    
		key: '腾讯地图申请的key'
	})

insert image description here

3. Execute the method of obtaining location information, and execute this method in the life cycle mounted

		//获取用户位置信息
			f19() {
    
    
				let _this = this
				console.log(123)
				qqmapsdk.reverseGeocoder({
    
    
					success: (res) => {
    
    
						console.log(9999, res)
					
						console.log(res.result.location.lng + "," + res.result.location.lat)
						res.result.location.lat + "," + res.result.location.lng //所在坐标
						// console.log("success123",res)
					},

					fail: res => {
    
    
						console.log("fail123", res)
					},

				});

			},

4. Precautions (must see), I am using uniapp to write the WeChat applet project
1. In the manifest.json file in the uni project, you need to select in the H5 configuration item
insert image description here
2. The uni project will run on the browser to enable Error reporting, normal
3. When the project runs on the applet, the user's geographic location will be output, but it is normal that the location accuracy is not accurate. Published to the online mobile phone to view the accuracy is normal.
insert image description here
4. The personal test is effective, please leave a message if you have any questions.

Guess you like

Origin blog.csdn.net/weixin_56723577/article/details/128872584