当前位置: 首页 > news >正文

mapbox加载geojson,鼠标移入改变颜色,设置样式以及vue中的使用

全国地图json数据下载地址

目录

html加载全部代码

方式一:使用html方式加载geojson

1. 初始化地图

 2. 加载geojson数据

设置geojson图层样式,设置type加载数据类型

 设置线条

 鼠标移入改变颜色,设置图层属性,此处是fill-extrusion类型


使用mapbox地图加载geojson数据

html加载全部代码
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>Create a hover effect</title><meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no"><link href="https://api.mapbox.com/mapbox-gl-js/v3.1.2/mapbox-gl.css" rel="stylesheet"><script src="https://api.mapbox.com/mapbox-gl-js/v3.1.2/mapbox-gl.js"></script><style>body { margin: 0; padding: 0; }#map { position: absolute; top: 0; bottom: 0; width: 100%; }</style>
</head>
<body>
<div id="map"></div>
<script>let dataJson = {}mapboxgl.accessToken = '你的密钥';fetch(url).then((response)=>{ return response.json();}).then((data)=>{dataJson = datadataJson.features.map((item, index) => {item['id'] = indexitem.properties['color'] = '#9b46e1'item.properties['height'] = Math.floor(Math.random() * (10000 - 9500 + 1)) + 9500})}).catch((error)=>{})const map = new mapboxgl.Map({container: 'map',style: 'mapbox://styles/mapbox/streets-v12',center: [107.164659,33.95191],zoom: 7.5,pitch:45});let hoveredPolygonId = null;map.on('load', () => {map.addSource('states', {'type': 'geojson','data': dataJson});map.addLayer({'id': 'state-fills','type': 'fill-extrusion', 'source': 'states','layout': {},'paint': {'fill-extrusion-color': ['case',['boolean', ['feature-state', 'hover'], false],'rgba(255,228,96,0.80)',// 鼠标移入颜色'rgba(25,172,230,0.75)' // 默认颜色],"fill-extrusion-opacity":0.85,//    从source 'height'属性获取填充-挤出-高度。'fill-extrusion-height': ['get', 'height'],}});map.addLayer({'id': 'state-borders','type': 'line','source': 'states','layout': {},'paint': {'line-color': '#627BC1','line-width': 0.8}});map.on('mousemove', 'state-fills', (e) => {if (e.features.length > 0) {if (hoveredPolygonId !== null) {map.setFeatureState({ source: 'states', id: hoveredPolygonId },{ hover: false });}hoveredPolygonId = e.features[0].id;map.setFeatureState({ source: 'states', id: hoveredPolygonId },{ hover: true });}});map.on('mouseleave', 'state-fills', () => {if (hoveredPolygonId !== null) {map.setFeatureState({ source: 'states', id: hoveredPolygonId },{ hover: false });}hoveredPolygonId = null;});});
</script></body>
</html>
方式一:使用html方式加载geojson
1. 初始化地图
<div id="map"></div>
<style>body { margin: 0; padding: 0; }#map { position: absolute; top: 0; bottom: 0; width: 100%; }
</style>
mapboxgl.accessToken = '你的密钥'; 
const map = new mapboxgl.Map({container: 'map',style: 'mapbox://styles/mapbox/streets-v12',center: [107.164659,33.95191],zoom: 7.5,pitch:45});
 2. 加载geojson数据

当地图初始化成功好后,在对地图做操作处理map.on('load',()=>{}),将geojson数据加载至地图上

     fetch(url).then((response)=>{ return response.json();}).then((data)=>{dataJson = datadataJson.features.map((item, index) => {// 添加id、color、height下面做渐变展示效果item['id'] = indexitem.properties['color'] = '#9b46e1'item.properties['height'] = Math.floor(Math.random() * (10000 - 9500 + 1)) + 9500})}).catch((error)=>{})

map.addSource('states', {'type': 'geojson','data': dataJson
});
设置geojson图层样式,设置type加载数据类型

type类型:(根据官网使用百度翻译,如有不准确,请多指教)

  • fill 填充多边形
  • line 线
  • symbol 图标或文本标签
  • circle 圆
  • heatmap 热力图
  • fill-extrusion 3d立体多边形
  • raster 贴图纹理,如:卫星图像
  • raster-particle 贴图纹理的驱动的粒子动画
  • hillshade   基于DEM数据的客户端山坡可视化。目前,该实现仅支持Mapbox Terrain RGB和                    Mapzen Terrarium图块
  • model  3D模型
  • background  地图的背景颜色或图案
  • sky   地图周围的球形圆顶,始终在所有其他层后面渲染
  • slot   标记插槽的位置
  • clip    Layer that removes 3D content from map
        map.addLayer({'id': 'state-fills','type': 'fill-extrusion','source': 'states','layout': {},'paint': {'fill-extrusion-color': {//根据数值中加载相对应颜色property: "height", stops: [[9500, "#29D2F1"],[9600, "#27C2EC"],[9700, "#18AFE7"],[9800, "#0E83DA"],[9900, "#0D80D9"],[10000, "#0B64D1"]]},"fill-extrusion-opacity":0.85,//    从source 'height'属性获取填充-挤出-高度。'fill-extrusion-height': ['get', 'height'],}});
 设置线条
       map.addLayer({'id': 'state-borders','type': 'line','source': 'states','layout': {},'paint': {'line-color': '#627BC1','line-width': 0.8}});
 鼠标移入改变颜色,设置图层属性,此处是fill-extrusion类型
        map.addLayer({'id': 'state-fills','type': 'fill-extrusion','source': 'states','layout': {},'paint': {// 设置颜色表达式'fill-extrusion-color': ['case',['boolean', ['feature-state', 'hover'], false],'rgba(255,228,96,0.80)',// 鼠标移入颜色'rgba(25,172,230,0.75)' // 默认颜色],"fill-extrusion-opacity":0.85,//    从source 'height'属性获取填充-挤出-高度。'fill-extrusion-height': ['get', 'height'],}});

效果图:

 

方式二:使用vue加载geojson

<template><div class="mapContainer"><div id='map' style='width: 100%; height: 800px;'></div></div>
</template><script>
import 'mapbox-gl/dist/mapbox-gl.css';
import mapboxgl from 'mapbox-gl'; // or "const mapboxgl = require('mapbox-gl');"
mapboxgl.accessToken = '你的密钥';
import { nextTick, onMounted } from 'vue'export default {setup(){onMounted(()=>{const map = new mapboxgl.Map({container: 'map', style: 'mapbox://styles/mapbox/streets-v12', center: [-74.5, 40], zoom: 9,});})}}
</script>

http://www.lryc.cn/news/526245.html

相关文章:

  • 考研机试题:打印日期
  • OpenHarmonyOS 3.2 编译生成的hap和app文件的名称如何配置追加版本号?
  • 【openwrt】openwrt odhcpd配置介绍
  • 基于神经网络的视频编码NNVC(1):帧内预测
  • Android开发,待办事项提醒App的设计与实现
  • 豆瓣Top250电影的数据采集与可视化分析(scrapy+mysql+matplotlib)
  • MySQL索引——让查询飞起来
  • Springboot集成Elasticsearch8.0(ES)版本,采用JAVA Client方式进行连接和实现CRUD操作
  • 【Linux】APT 密钥管理迁移指南:有效解决 apt-key 弃用警告
  • 洛谷P1143 进制转换
  • 99.12 金融难点通俗解释:毛利率
  • HUMANITY’S LAST EXAM (HLE) 综述:人工智能领域的“最终考试”
  • C++从入门到实战(二)C++命名空间
  • C# OpenCV机器视觉:实现农作物病害检测
  • 开源软件协议介绍
  • CLion开发Qt桌面
  • 09_异步加载_单例模式_常量类配置_不可销毁
  • 士的宁(strychnine)的生物合成-文献精读104
  • 【开源免费】基于Vue和SpringBoot的常规应急物资管理系统(附论文)
  • (Java版本)基于JAVA的网络通讯系统设计与实现-毕业设计
  • ray.rllib 入门实践-2:配置算法
  • 2025-01学习笔记
  • 多线程执行大批量数据查询
  • ChatGPT高效处理图片技巧使用详解
  • leetcode——相交链表(java)
  • RubyFPV开源代码之系统简介
  • 麦田物语学习笔记:创建TransitionManager控制人物场景切换
  • 后端SpringBoot学习项目-用户管理-增删改查-service层
  • 机器学习11-学习路径推荐
  • [ACTF2020 新生赛]Upload1