| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- <template>
- <view>
- <map id="tencentMap" :style="[...mapStyle]" :show-compass="showCompass" :enable-traffic="enableTraffic"
- :longitude="longitude" :latitude="latitude" :markers="markers" :show-location="showLocation"
- @markertap="markertap"></map>
- </view>
- </template>
- <script>
- export default {
- props: {
- mapStyle: {
- type: Object,
- default: {
- width: '100%',
- height: '600rpx'
- }
- },
- showCompass: { // 是否显示指南针
- type: Boolean,
- default: true
- },
- enableTraffic: { // 是否开启实时路况
- type: Boolean,
- default: false
- },
- showLocation: { // 是否显示带有方向的当前定位点
- type: Boolean,
- default: true
- },
- },
- data() {
- return {
- longitude: '118.72495',
- latitude: '32.00834',
- markers: [],
- }
- },
- onReady() {
- let vm = this
- vm.map = uni.createMapContext('tencentMap', this)
- vm.getLocation()
- },
- onReady() {
- // wx请求获取位置权限
- this.getAuthorize().then(() => {
- // 同意后获取
- this.getLocationInfo();
- }).catch(() => {
- // 不同意给出弹框,再次确认
- this.openConfirm().then(() => {
- this.getLocationInfo();
- }).catch(() => {
- this.rejectGetLocation();
- });
- });
- },
- methods: {
- // 初次位置授权
- getAuthorize() {
- return new Promise((resolve, reject) => {
- uni.authorize({
- scope: "scope.userLocation",
- success: () => {
- resolve(); // 允许授权
- },
- fail: () => {
- reject(); // 拒绝授权
- },
- });
- });
- },
- // 确认授权后,获取用户位置
- getLocationInfo() {
- const that = this;
- uni.getLocation({
- type: "gcj02",
- success: function(res) {
- that.longitude = res.longitude;
- that.latitude = res.latitude;
- that.markers = [{
- id: 2,
- latitude: 32.00834,
- longitude: 118.72495,
- callout: {
- content: '奥林皮克体育中心',
- color: '#000',
- fontSize: 10,
- bgColor: '#fff',
- padding: 5,
- display: 'ALWAYS',
- textAlign: 'center'
- }
- }, ]
- }
- });
- },
- // 拒绝授权后,弹框提示是否手动打开位置授权
- openConfirm() {
- return new Promise((resolve, reject) => {
- uni.showModal({
- title: "请求授权当前位置",
- content: "我们需要获取地理位置信息,为您推荐附近的商家",
- success: (res) => {
- if (res.confirm) {
- uni.openSetting().then((res) => {
- if (res[1].authSetting["scope.userLocation"] === true) {
- resolve(); // 打开地图权限设置
- } else {
- reject();
- }
- });
- } else if (res.cancel) {
- reject();
- }
- },
- });
- });
- },
- // 彻底拒绝位置获取
- rejectGetLocation() {
- uni.showToast({
- title: "您拒绝了授权,无法获得周边信息",
- icon: "none",
- duration: 2000,
- });
- },
- // 地图标点 点击事件
- markertap(e) {
- let plugin = requirePlugin('routePlan');
- let key = '5ZKBZ-W3TCU-LSDVC-4XJLB-KQOYO-TVBQ6'; // 使用在腾讯位置服务申请的key
- let referer = 'test'; // 调用插件的app的名称
- let navigation = 1 // 值为1时,开启驾车导航功能;默认不开启此功能
- let endPoint = JSON.stringify({ // 终点
- 'name': '奥林皮克体育中心',
- 'latitude': 32.00834,
- 'longitude': 118.72495
- });
- wx.navigateTo({
- url: 'plugin://routePlan/index?key=' + key + '&referer=' + referer + '&endPoint=' + endPoint +
- '&navigation=' + navigation
- });
- }
- },
- }
- </script>
- <style>
- </style>
|