vue2mapbox-gl

Vue >2 integration of mapbox.
2,231 19
Install
npm install vue2mapbox-gl
Latest Version:0.15.2
Vue:2 · 3
License:MIT
Last Updated:Nov 16, 2023
Links: GitHub  ·  npm
Maintainer: fedor.baart

vue2mapbox-gl

Build Status npm version

Vue components for mapbox-gl. Api similar to Vue2Leaflet.

Install

$ npm install --save vue2mapbox-gl

Usage

Import using umd, for example using an es6 import.

import Vue2MapboxGL from 'vue2mapbox-gl';

// You might want to import the relevant css, for example:
import 'mapbox-gl/dist/mapbox-gl.css';
// for the v-mapbox-geocoder
import '@mapbox/mapbox-gl-geocoder/dist/mapbox-gl-geocoder.css';

// Use the plugin
Vue.use(Vue2MapboxGL);

API

Here are some simple examples. You can find more examples if you run the storybook using npm run storybook.


<v-mapbox
  access-token="pk...."
  map-style="mapbox://styles/mapbox/satellite-streets-v10"
  :center="[52, 3]"
  :zoom="10"
  :pitch="60"
  :bearing="-132"
  :min-zoom="5"
  id="map"
  ref="map"
>
</v-mapbox>

Using the example above you can use the map reference available from $refs.map.map to access the mapbox map object. For example in the mounted method:

mounted() {
  let map = this.$refs.map.map
  map.on('load', () => {
  map.addLayer(style)
})

You can also add the other components, for example the controls.

<v-mapbox
  access-token="pk...."
  map-style="mapbox://styles/mapbox/satellite-streets-v10"
>
 <v-mapbox-navigation-control></v-mapbox-navigation-control>
</v-mapbox>

Or you can add a custom component as a layer

<v-mapbox
  access-token="pk...."
  map-style="mapbox://styles/mapbox/satellite-streets-v10"
>
 <custom-layer></custom-layer>
</v-mapbox>

In this approach you can implement a component with a method deferredMountedTo. This idea was taken from Vue2Leaflet. Another approach is to use the inject functionality of vue. This is a minimal example.

export default {
  name: 'custom-layer',
  render() {
    // you
    return this.$slots.default
  },
  methods: {
    deferredMountedTo(map) {
      console.log('CustomLayer got a map')
    }
  }
}

You can also use an inject: ['getMap'], to access the map in your component.

Styling

Mapbox adds a mapboxgl-map class to the main element. You can style that element so the element fits it's parent container.

.mapboxgl-map {
  width: 100%;
  height: 100%;
}

Development

Please feel free to submit pull requests or fork the repository. You can test the current codebase with npm run test and some examples are available in the storybook, which you can start by npm run storybook.

License

GPLv3 © Fedor Baart

Related Packages

vue-mapbox-ts-legacy

Highly reactive Mapbox Framework for Vue.js written in TypeScript

2,977
vue-mapbox-geocoder

Geocoder plugin for VueMapbox

14,554 13
@dullar/mercury

Advanced and highly reusable Mobile UI Components built on Vue2 & You can define...

8,553 6
vue3-mapbox-gl

一个基于Vue3+Typescript封装的Mapbox地图组件

4,219 3
vue-mgl

mapbox-gl vue components (map, layers, sources, controls)

1,691 8

Version History

Version Released Vue License
0.15.2 >=2.6.10 MIT
0.15.0 >=2.6.10 MIT
0.14.0 >=2.6.10 MIT
0.13.1 >=2.6.10 MIT
0.13.0 >=2.6.10 MIT
Pre-releases (5)
Version Released Vue License
0.6.1-beta.3 >=2.6.10 MIT
0.6.1-beta.2 >=2.6.10 MIT
0.6.1-beta.1 >=2.6.10 MIT
0.6.1-beta.0 >=2.6.10 MIT
0.6.0-beta.0 >=2.6.10 MIT