mapbox-gl 初体验

948 阅读1分钟

准备工作

申请 accessToken

accessToken = ''
 search = 'https://api.mapbox.com/geocoding/v5/mapbox.places/{{searchValue}}.json?access_token=pk.eyJ1IjoibWluZ2p1IiwiYSI6ImNrY3llOWsyZDA4ejkydW8zdDVsaWp2aXgifQ.N5PsVkGAgakL2SH-7oWUrw'  // 搜索请求

安装第三方库

yarn add mapbox-gl
yarn add @mapbox/mapbox-gl-language  // 切换语言包

<script src="https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-directions/v4.0.2/mapbox-gl-directions.js"></script>
<link rel="stylesheet" href="https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-directions/v4.0.2/mapbox-gl-directions.css" type="text/css"/>  // yarn 安装引入报错

初始化

import React, {Component} from 'react'
import mapGl from 'mapbox-gl'
import MapboxLanguage from '@mapbox/mapbox-gl-language'

export class Map extends Component {
    accessToken = ''
    
    state = {
        center: [116, 39],  // 初始化坐标
        map: null,
    }
    
    fullScreen = () => {
        // 返回全屏控件实例 
        return new mapGl.FullscreenControl()
    }
    
    language = () => {
        return new MapboxLanguage({
            defaultLanguage: 'zh'  // 设置默认语言
        })
    }
    mapInit = () => {
        mapGl.accessToken = this.accessToken
        const map = new mapGl.Map({
            style: 'mapbox://styles/mapbox/streets-v10',  // 引入样式
            center: this.state.center,  // 地址中心经纬度
            container: 'map',  // 容器
            zoom: 13,  // 缩放比例
        })
        map.addControl(this.fullScreen())  // map.addControl, 添加控件实例到 map 上
        map.addControl(this.language())
        this.setState({map})  // 将 map 实例保存到 state 中
    }
    componentDidMount() {
        this.mapInit()
    }
    render() {
        return {
            <div id='map' className='map'></div>
        }
    }
}

还有样式文件, 我就没写了哈, 暂时只实现了导航, 搜索和定位的功能