- https://uniapp.dcloud.io/component/map
https://uniapp.dcloud.io/api/location/location">官网地址
https://uniapp.dcloud.io/component/map
https://uniapp.dcloud.io/api/location/location - https://ask.dcloud.net.cn/article/29">地图插件配置
https://ask.dcloud.net.cn/article/29 - https://www.html5plus.org/doc/zh_cn/maps.html">plus内置地图
https://www.html5plus.org/doc/zh_cn/maps.html
官网地址
https://uniapp.dcloud.io/component/map
https://uniapp.dcloud.io/api/location/location
地图插件配置
https://ask.dcloud.net.cn/article/29
plus内置地图
https://www.html5plus.org/doc/zh_cn/maps.html
#腾讯地图
- https://lbs.qq.com/
- 登录腾讯位置服务平台注册账号,新建应用创建密钥

勾选配置项后点击保存生成对应的密钥。
#腾讯地图sdk导入项目
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 EARTH_RADIUS = 6378136.49;var Utils = {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 {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 +")"} else if (rectangle && !region) {requestParam.boundary = "rectangle(" + rectangle + ")"} else {requestParam.boundary = "nearby(" + result.latitude + "," + result.longitude + "," + distance + "," + auto_extend +")"}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;wx.request(Utils.buildWxRequestConfig(options, {url: URL_SUGGESTION,data: requestParam}, "suggest"))};Utils.locationProcess(options, locationsuccess)} else {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;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}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};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};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;wx.request(Utils.buildWxRequestConfig(options, {url: URL_DISTANCE,data: requestParam}, 'calculateDistance'))};Utils.locationProcess(options, locationsuccess)}}};module.exports = QQMapWX;
#引入项目
const QQMapWX = require('@/common/js/qqmap-wx-jssdk.min.js');//这里的key值就是你申请的密钥this.qqmapsdk = new QQMapWX({key: this.key});
#测试demo
<template><view class="container"><view class="header-box"><view class="result-box"><view class="info list-item"><view class="badge"></view><view class="ellipsis">{{address}}</view></view><view class="info"><view class="badge orange"></view><view class="ellipsis"> {{current_long + "," + current_lat}}</view></view></view></view><mapid="maps":longitude="longitude":latitude="latitude":scale="16"show-location@regionchange="regionchange"@moveToLocation="fnMoveToLocation"><cover-image class="cover-image" src="../../static/images//location.png" /></map></view></template><script>const QQMapWX = require('@/common/js/qqmap-wx-jssdk.min.js');export default {data() {return {address: "正在获取地址...",longitude: 120.1887611219618,latitude: 30.19322157118055,current_long: 120.1887611219618,current_lat: 30.19322157118055,key: 'WL7BZ-TBAW3-7CB3K-YFHND-YTAJ3-5OF4F',mapCtx: null,location: false,qqmapsdk: null,mapObj: null}},onLoad() {this.qqmapsdk = new QQMapWX({key: this.key});this.currentLocation()},onReady() {// #ifdef APP-PLUSif (!this.mapCtx) {this.mapCtx = uni.createMapContext("maps");}this.mapObj = this.mapCtx.$getAppMap();this.mapObj.onstatuschanged = (e) => {// 地图发生变化的时候,获取中间点,也就是cover-image指定的位置if (this.longitude != 114.010857) {this.address = "正在获取地址...";this.mapCtx.getCenterLocation({type: 'gcj02',success: (res) => {this.current_long = res.latitude;this.current_lat = res.longitude;this.getAddress(res.longitude, res.latitude);}})}}//测试// #endif},methods: {// 地图发生变化的时候,获取中间点,也就是cover-image指定的位置regionchange(e) {console.log(e,'1');if (e.type == 'end' && (e.causedBy == 'scale' || e.causedBy == 'drag')) {this.address = "正在获取地址...";if (!this.mapCtx) {this.mapCtx = uni.createMapContext("maps");}this.mapCtx.getCenterLocation({type: 'gcj02',success: (res) => {console.log(res)this.latitude = res.latitude;this.longitude = res.longitude;this.getAddress(res.longitude, res.latitude);}})}},//根据经纬度获取地址信息getAddress: function(lng, lat) {this.qqmapsdk.reverseGeocoder({location: {latitude: lat,longitude: lng},success: (res) => {console.log(res)this.address = res.result.formatted_addresses.recommend},fail: (res) => {this.address = "获取位置信息失败"}})},//当前位置currentLocation() {const that = this;uni.getLocation({type: 'gcj02',success(res) {console.log(res);that.latitude = res.latitude;that.longitude = res.longitude;}})},//将地图中心移动到当前定位点fnMoveToLocation (e) {}}}</script><style>/* pages/location/location.wxss */page {height: 100%;}.container {width: 100%;height: 100%;}#maps {width: 100%;height: 100%;}.cover-image {height: 60upx;width: 60upx;position: fixed;top: 50%;left: 50%;margin-top: -30upx;margin-left: -30upx;}.header-box {width: 100%;padding-top: 8upx;box-sizing: border-box;border-radius: 24upx;}.result-box {width: 100%;padding: 12upx 30upx;box-sizing: border-box;color: #555;font-size: 28upx;display: flex;flex-direction: column;justify-content: space-between;background: #fff;border-radius: 24upx;}.list-item::after {left: 0;}.badge {height: 16upx;width: 16upx;border-radius: 8upx;background: #5677fc;margin-right: 20upx;flex-shrink: 0;}.orange {background: #ff7900 !important;}.info {display: flex;align-items: center;padding: 20upx 0;}.ellipsis {width: 100%;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;}.current-location {position: fixed;height: 76upx;width: 76upx;display: flex;align-items: center;justify-content: center;bottom: 80upx;right: 60upx;background: rgba(255, 255, 255, 0.94);border-radius: 38upx;}.current-img {width: 42upx;height: 42upx;}</style>
#ios配置项
"ios" : {
"urlschemewhitelist": [
"qqmap"
]
}
#高德地图
#高德地图开放平台
#申请ios平台与android平台的appkey值
#在应用中进行配置
#应用权限配置
#sdk申请
…
