Vue에서 MapboxGL을 보다 우아하게 사용하는 방법
5599 단어 javascripttypescriptvuegis
mapbox-gl을 보다 우아하게 사용하려면
MapVue
이라는 패키지가 있습니다.MapVue는 포괄적인 MapboxGL 구성 요소 라이브러리입니다. Vue 프로젝트에 쉽고 즐겁게 MapVue를 적용할 수 있습니다. 다양한 데이터 소스와 레이어를 컴포넌트 형태로 가져오고, MVVM에 의해 맵의 레이어와 소스의 props를 업데이트합니다.
어떻게 작동합니까?
MapVue는 본질적으로 MapboxGL의 일부 클래스를 래핑하고 감시 클래스의 일부 변수 속성을 통해 구성 요소화를 구현합니다.
예를 들어,
v-fill-layer
구성 요소는 실제로 FillLayer
클래스를 래핑합니다.25 components
im MapVue가 있으며 거의 모든 mapbox-gl APIS가 포함되어 있습니다.핵심 구성 요소는
VMap
구성 요소입니다. 이것은 최상위 구성 요소이며 다른 모든 구성 요소는 VMap
로 래핑되어야 하며 mapboxgl.Map
를 인스턴스화하고 map
인스턴스를 하위 구성 요소에 제공합니다.구성 요소 목록
mapboxgl.Marker
mapboxgl.Popup
map.setFog
AttributionControl
컨트롤NavigationControl
컨트롤ScaleControl
컨트롤background
레이어circle
레이어fillextrusion
레이어fill
레이어heatmap
레이어hillshade
레이어line
레이어raster
레이어symbol
레이어canvas
레이어geojson
소스vector
소스image
소스video
소스raster
소스rasterdem
소스설치
# use yarn
yarn add mapvue
# use pnpm
pnpm add mapvue
수입
초대
import { createApp } from "vue";
import MapVue from "mapvue";
import "mapvue/dist/mapvue.css";
import App from "./App.vue";
createApp(App).use(MapVue).mount("#app");
사용 사례
<script>
import { defineComponent, reactive, watch } from "vue";
import { accessToken } from "../store";
export default defineComponent({
setup() {
const state = reactive({
"heatmap-color": [
"interpolate",
["linear"],
["heatmap-density"],
0,
"rgba(33,102,172,0)",
0.2,
"rgb(103,169,207)",
0.4,
"rgb(209,229,240)",
0.6,
"rgb(253,219,199)",
0.8,
"rgb(239,138,98)",
1,
"rgb(178,24,43)",
],
"heatmap-opacity": ["interpolate", ["linear"], ["zoom"], 7, 1, 9, 0],
"heatmap-radius": ["interpolate", ["linear"], ["zoom"], 0, 2, 9, 20],
"heatmap-intensity": ["interpolate", ["linear"], ["zoom"], 0, 1, 9, 3],
radius: 20,
intensity: 3,
layout: {
visibility: "visible",
},
});
return {
state,
accessToken,
};
},
});
</script>
<template>
<div class="container">
<v-map
:accessToken="accessToken"
:options="{
center: [-124.137343, 45.137451],
zoom: 3,
}"
>
<v-geo-source
id="geo"
data="https://docs.mapbox.com/mapbox-gl-js/assets/earthquakes.geojson"
/>
<v-heatmap-layer
id="heatmap"
source="geo"
:paint="{
'heatmap-color': state['heatmap-color'],
'heatmap-opacity': state['heatmap-opacity'],
'heatmap-radius': state['heatmap-radius'],
'heatmap-intensity': state['heatmap-intensity'],
}"
:layout="state.layout"
/>
</v-map>
</div>
</template>
<style scoped>
.container {
height: 100vh;
width: 100%;
}
</style>
더 많은 예제를 방문하십시오examples.
github: MapVue
문서: MapVue doc
Reference
이 문제에 관하여(Vue에서 MapboxGL을 보다 우아하게 사용하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/chinesejar/how-to-use-mapboxgl-in-vue-more-elegantly-15ec텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)