vue+ mapbox 添加geojson图层,点击图层 通过设置filter属性 使某个图层高亮)

1. 初始化地图,引入sprite、glyphs文件

      let sprite = "图标文件";

      let glyphs = "字体文件";

    this.map = new mapboxgl.Map({
        container: "map",
        maxZoom: 24,
        minZoom: 5,
        // style: "mapbox://styles/man135/ckvm2zd0i3cyp15nzy7mrdj4p",
        style: {
          version: 8,
          name: "Mapbox Streets Night",
          sprite: sprite, //图标文件
          glyphs: glyphs, //字体文件
          sources: {},
          layers: [],
        },
        center: [120.60411498091571, 36.225539293687276],
        zoom: 10.8,
        pitch: 10,
        bearing: 0,
      });

2.通过addLayer 添加geoserver服务器上的geojson图层

  本例子 添加两个图层分别是  河流面 以及河流高亮面 图层

this.map.on("load", () => {
         //地图背景
       this.map.addLayer({
        id: "background",
        type: "background",
      minzoom:0,
      maxzoom:24,
        layout: {
          'visibility':'visible'
        },
        paint: {
         'background-color':'#0a1729',
         'background-opacity':1
        },
      });
      
       
        // 河流面
        this.map.addLayer({
          id: "riverPolygon",
          type: "fill",
          source: {
            type: "geojson",
            data: 上传到geoServer服务器上的 对应的图层的geojson 链接地址,
          },
          layout: {},
          paint: {
            "fill-color": "#37BEDB",
            "fill-opacity": 0.4,
            "fill-outline-color": "#41AAB0",
          },
        });
        // 高亮
        this.map.addLayer({
          id: "riverPolygon-highlight",
          type: "fill",
          source: {
            type: "geojson",
            data: 上传到geoServer服务器上的 对应的图层的geojson 链接地址,
          },
          layout: {},
          paint: {
            "fill-color": "#00FFFF",
            "fill-opacity": 1,
            "fill-outline-color": "#00FFFF",
          },
          filter: ["in", "River_Name为geojson图层里的字段 就是你需要过滤的字段", ""],
        });
      });

3.图层点击事件 拿到图层信息 赋值 ,(本例子是点击对应的河流图层 对应的河流就会高亮)

 this.map.on("click", "创建的图层id,例如本例子是:riverPolygon", (e) => {
        // 获取图层中的River_Name
       var name = e.features[0].properties.River_Name;
        // 设置高亮图层的过滤
       this.map.setFilter("riverPolygon-highlight", [
            "in",
            "River_Name",
            name,
          ]);
      });

  • 14
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue.jsMapbox 是两个非常流行的工具,用于构建用户界面和提供强大的地图功能。Vue 是一个轻量级的前端框架,以其组件化开发和易于上手的特点受到开发者喜爱。Mapbox 则是一个提供了丰富的地图服务、地图样式和交互功能的平台。 当你将 VueMapbox 结合使用时,可以实现以下几个关键点: 1. 安装依赖:首先,你需要在 Vue 项目中安装 `@vuegis/vue-mapbox-gl` 或者直接使用 Mapbox GL JS(原生库),这是官方推荐的 Vue 组件化解决方案。 2. 创建地图组件:创建一个 Vue 组件,例如 `Map.vue`,引入 Mapbox GL JS,并设置初始化地图的方法,包括设置中心位置、比例尺、地图样式等。 ```html <template> <div ref="map"></div> </template> <script> import { mapboxgl, Map } from '@vuegis/vue-mapbox-gl' export default { components: { MapboxGL: mapboxgl.Map, }, mounted() { this.createMap() }, methods: { createMap() { this.$refs.map .el .style = 'width: 100%; height: 400px;'; // 设置样式 const map = new Map(this.$refs.map, { center: [51.505, -0.09], // 地图中心点 zoom: 13, // 初始缩放级别 style: 'mapbox://styles/mapbox/streets-v11', // 使用预设样式 }); }, }, } </script> ``` 3. 动态数据绑定:Vue 的响应式系统使得地图可以根据数据变化动态调整,比如根据用户的输入改变地图视图或添加标记。 4. 图层和交互:Mapbox 提供了各种图层(如矢量图层、影像图层等)和交互元素(如点击事件、鼠标悬停事件),可以在 Vue 中轻松使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值