你的 ol/Map(底图 + View + 控件)
└── grid-webgl-openlayers 叠加
├── ChoroplethLayer WebGL 色斑图(可显示网格线)
└── GridValueLayer Canvas2D 格点数值标注
└── 可选 LegendPanel / GredLegendPanel 图例 + 显示范围过滤
import Map from "ol/Map"
import View from "ol/View"
import TileLayer from "ol/layer/Tile"
import OSM from "ol/source/OSM"
import { GridMapView } from "grid-webgl-openlayers"
import "ol/ol.css"
const map = new Map({
target: "map",
view: new View({ projection: "EPSG:4326", center: [105, 30], zoom: 6 }),
layers: [new TileLayer({ source: new OSM() })],
})
const overlay = await GridMapView.create({
map,
dataUrl: "/data/arrayData.json",
})
overlay.destroy() // 销毁时:仅移除图层,不销毁 map
<script setup lang="ts">
import { onMounted, ref, shallowRef } from "vue"
import Map from "ol/Map"
import View from "ol/View"
import TileLayer from "ol/layer/Tile"
import OSM from "ol/source/OSM"
import { GredGridMap } from "grid-webgl-openlayers/vue"
import "ol/ol.css"
const mapEl = ref<HTMLElement>()
const map = shallowRef<Map | null>(null)
onMounted(() => {
map.value = new Map({
target: mapEl.value,
view: new View({ projection: "EPSG:4326", center: [105, 30], zoom: 6 }),
layers: [new TileLayer({ source: new OSM() })],
})
})
</script>
<template>
<div ref="mapEl" style="width:100%;height:500px" />
<GredGridMap v-if="map" :map="map" data-url="/data/arrayData.json" />
</template>