vue实现mapBox地图的使用及通过H5获取位置信息并回显至mapBox地图中

/*
	1、下载mapbox
		npm install --save mapbox-gl 或 cnpm install --save mapbox-gl 
		
	2、修改语言为中文
    	2.1、下载语言包cnpm install --save mapbox-gl
   		2.2、安装语言包 cnpm install --save mapbox-gl @mapbox/mapbox-gl-language
*/
<template>

    <div>
        <div id="map"></div>
    </div>

</template>

<script type="text/ecmascript-6">

    //npm install --save mapbox-gl 或 cnpm install --save mapbox-gl 下载mapbox
    
    /*修改语言为中文
        1、下载语言包cnpm install --save mapbox-gl
        2、安装语言包 cnpm install --save mapbox-gl @mapbox/mapbox-gl-language
    */

    import mapboxgl from "mapbox-gl";//引入mapbox
    import MapboxLanguage  from '@mapbox/mapbox-gl-language';//引入语言包


    export default {
        name: 'mapboxgl',
        data(){
            return{
                lat:0,//纬度
                lag:0,//经度
            }
        },
        mounted () {
            this.locationFn().then(res=>{
                this.initmap()
            }).catch(err=>{
                alert('位置信息获取失败')
            });
        },

        methods: {
            initmap(){
                mapboxgl.accessToken = '';//需要修改为自己的token

                let map = new mapboxgl.Map({
                    container: 'map', // 绑定的组件的id
                    style: 'mapbox://styles/mapbox/outdoors-v10', //地图样式,可以使用官网预定义的样式,也可以自定义
                    center: [this.lag,this.lat], // 初始坐标系
                    zoom: 15,     // starting zoom 地图初始的拉伸比例
                    pitch: 0,  //地图的角度,不写默认是0,取值是0-60度,一般在3D中使用
                    bearing: 0, //地图的初始方向,值是北的逆时针度数,默认是0,即是正北
                    antialias: true, //抗锯齿,通过false关闭提升性能

                });


                let language = new MapboxLanguage({ defaultLanguage: "zh" });//地图加到显示为中文
                map.addControl(language);

                //地图的标点
                let marker = new mapboxgl.Marker()
                    .setLngLat([this.lag,this.lat])
                    .addTo(map);

                //3D地图
                /*map.on('load', function() {
                    //on设置监听,以及触发时的回调,这是加载时的触发的生成3d地图
                    var layers = map.getStyle().layers;

                    var labelLayerId;
                    for (var i = 0; i < layers.length; i++) {
                        if (layers[i].type === 'symbol' && layers[i].layout['text-field']) {
                            labelLayerId = layers[i].id;
                            break;
                        }
                    }

                    //在地图样式中添加一个Mapbox样式图层。(图层,layerid)
                    map.addLayer(
                        {
                            'id': '3d-buildings',
                            'source': 'composite',
                            'source-layer': 'building',
                            'filter': ['==', 'extrude', 'true'],
                            'type': 'fill-extrusion',
                            'minzoom': 15,
                            'paint': {
                                'fill-extrusion-color': '#aaa',
                                'fill-extrusion-height': [
                                    'interpolate',
                                    ['linear'],
                                    ['zoom'],
                                    15,
                                    0,
                                    15.05,
                                    ['get', 'height']
                                ],
                                'fill-extrusion-base': [
                                    'interpolate',
                                    ['linear'],
                                    ['zoom'],
                                    15,
                                    0,
                                    15.05,
                                    ['get', 'min_height']
                                ],
                                'fill-extrusion-opacity': 0.6
                            }
                        },
                        labelLayerId
                    );
                });*/

                //地图监听点击,触发回调
                map.on('click', function(e) {
                    console.log(e)
                });

            },

			//获取位置信息异步函数
            locationFn(){
                let that=this;
                return new Promise(function(res,err){
                    //获取位置信息失败的回调函数
                    function showError(error){

                        switch(error.code) {

                            case error.PERMISSION_DENIED:
                                alert("定位失败,用户拒绝请求地理定位");
                                err();
                                break;
                            case error.POSITION_UNAVAILABLE:
                                alert("定位失败,位置信息是不可用");
                                err();
                                break;
                            case error.TIMEOUT:
                                alert("定位失败,请求获取用户位置超时");
                                err();
                                break;
                            case error.UNKNOWN_ERROR:
                                alert("定位失败,定位系统失效");
                                err();
                                break;
                        }

                    }

                    //获取位置信息成功的回调函数
                    function showPosition(position){
                        that.lat = position.coords.latitude;
                        that.lag = position.coords.longitude;
                        res()
                    }

                    //获取位置信息
                    if (navigator.geolocation){
                        navigator.geolocation.getCurrentPosition(showPosition,showError,{enableHighAccuracy: true});
                    }else{
                        alert("浏览器不支持地理定位。");
                        err();
                    }
                })

            }
        }
    }
</script>

<style  scoped>
    @import url('https://api.tiles.mapbox.com/mapbox-gl-js/v0.44.2/mapbox-gl.css');
    #map{
        position: absolute;
        top: 0;
        bottom: 0;
        width: 100%;
    }
</style>


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值