首页 > 其他分享 >Mapbox-底图

Mapbox-底图

时间:2024-11-27 23:11:39浏览次数:6  
标签:map 底图 center 样式 地图 Mapbox mapboxgl new

加载地图

  1. 导入mapbox库和样式
  2. 创建渲染容器
  3. 创建地图对象
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <!-- 1. 导入mapbox库和样式 -->
    <script src="https://api.mapbox.com/mapbox-gl-js/v3.8.0/mapbox-gl.js"></script>
    <link
      href="https://api.mapbox.com/mapbox-gl-js/v3.8.0/mapbox-gl.css"
      rel="stylesheet"
    />
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      #map {
        width: 100vw;
        height: 100vh;
      }
    </style>
  </head>

  <body>
    <!-- 2. 创建渲染容器 -->
    <div id="map"></div>
    <script>
      // 设置token
      mapboxgl.accessToken =
        'pk.eyJ1IjoiemhvbmdkaXNodW1hIiwiYSI6ImNsNXJoYXR5eTI2bGgzZW53d2didWF1c3AifQ.6vOplM2NQc_xnJW3aA5ZBA'
      // 3. 创建地图对象
      const map = new mapboxgl.Map({
        container: 'map', // 指定容器id
        style: 'mapbox://styles/mapbox/streets-v12', // 地图风格
        center: [114.3, 30.5], // 中心点坐标
        zoom: 12, // 缩放比例
        projection: 'equalEarth', // 投影方式
      })
    </script>
  </body>
</html>

加载自定义底图

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <!-- 1. 导入mapbox库和样式 -->
    <script src="https://api.mapbox.com/mapbox-gl-js/v2.12.0/mapbox-gl.js"></script>
    <link
      href="https://api.mapbox.com/mapbox-gl-js/v2.12.0/mapbox-gl.css"
      rel="stylesheet"
    />
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      #map {
        width: 100vw;
        height: 100vh;
      }
    </style>
  </head>

  <body>
    <!-- 2. 创建渲染容器 -->
    <div id="map"></div>
    <script>
      // 设置token
      mapboxgl.accessToken =
        'pk.eyJ1IjoiemhvbmdkaXNodW1hIiwiYSI6ImNsNXJoYXR5eTI2bGgzZW53d2didWF1c3AifQ.6vOplM2NQc_xnJW3aA5ZBA'
      // 3. 创建地图对象
      const map = new mapboxgl.Map({
        container: 'map', // 指定容器id
        style: {
          version: 8,
          sources: {
            'raster-tiles': {
              type: 'raster',
              tiles: [
                'http://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
              ],
              tileSize: 256,
            },
          },
          layers: [
            {
              id: 'simple-tiles',
              type: 'raster',
              source: 'raster-tiles',
              minzoom: 0,
              maxzoom: 22,
            },
          ],
        },
        center: [114.3, 30.5], // 中心点坐标
        zoom: 12, // 缩放比例
      })
    </script>
  </body>
</html>
  • style对象
属性 类型 描述
version number 样式规范版本号。
name string 样式名称。
metadata object 有关 Mapbox Studio 中使用的样式的信息。
sources object 数据源对象。每个源定义了地图图层的数据来源,可以是矢量瓦片、栅格瓦片或GeoJSON等。
layers array 图层对象数组。每个图层定义了地图上显示的样式元素,如背景、标注、道路等。
created string 创建样式的日期和时间。
id string 样式的 ID。
modified string 上次修改样式的日期和时间。
owner string 样式所有者的用户名。
visibility string 样式的访问控制,私有样式或公共样式。
protected boolean 样式是否受保护, 受保护的样式无法编辑和删除。
draft boolean 样式是草稿还是已发布

地图对象

对于map对象

  • 方法

    • flyTo: 移动(相机漫游)

    • easeTo: 允许创建一个动画, 使地图的视图从一个状态平滑地过渡到另一个状态,例如放大、缩小、平移或旋转

  • 事件
    通过on监听地图事件

    • click: 点击事件
    • load: 加载完成事件

设置大气层

  <body>
    <div id="map"></div>
    <script>
      mapboxgl.accessToken =
        'pk.eyJ1IjoiY2hlbmdjaGFvODg2NiIsImEiOiJjbGhzcWowMHUwYTNyM2VwNXZhaXhjd3Q4In0.FEh2q7sEW88Z1B5GcK_TDg'
      const map = new mapboxgl.Map({
        container: 'map',
        style: 'mapbox://styles/mapbox/satellite-streets-v12',
        center: [114.3, 30.5],
        zoom: 1,
        projection: 'globe',
      })

      // 设置大气层样式
      map.on('style.load', () => {
        map.setFog({
          /* 设置大气层的颜色 */
          color: '#96C9FF',
          /* 大气层之上的颜色 */
          'high-color': '#245bde',
          //定制化星空的颜色
          'space-color': '#333',
        })
      })
    </script>
  </body>

地球自转

map.easeTo({
  center: [long, lat],       // 新的中心点坐标
  zoom: zoomLevel,           // 新的缩放级别
  bearing: bearingAngle,     // 新的方位角(以度为单位)
  pitch: pitchAngle,         // 新的俯仰角(以度为单位)
  duration: duration,        // 动画持续时间(以毫秒为单位)
  easing: easingFunction     // 一个用于动画的缓动函数
});
  • center: 地图的新中心点坐标,是一个包含经度和纬度的数组。
  • zoom: 地图的新缩放级别。
  • bearing: 地图的新方位角,0表示北方朝上,正值表示顺时针旋转。
  • pitch: 地图的新俯仰角,0表示正视,正值表示向下倾斜。
  • duration: 动画的持续时间,以毫秒为单位。默认值为0,表示立即跳转到新状态,没有动画。
  • easing: 缓动函数,用于控制动画的速度曲线。Mapbox GL JS提供了几个内置的缓动函数,如lineareaseIneaseOuteaseInOut等。
      function animation() {
        let center = map.getCenter()
        center.lng += 10
        map.easeTo({ center, duration: 1000, easing: (n) => n })
      }
      
      /* 动画执行完毕之后,触发moveend事件 */
      map.on('moveend', () => {
        animation()
      })
      
      animation()

更改:

  1. zoom<5同时用户没有进行操作,才会自转
  2. 点击地图时, 停止自转
      let moving = true
      function animation() {
        const zoom = map.getZoom()
        if (zoom < 5 && moving) {
          let center = map.getCenter()
          center.lng += 10
          map.easeTo({ center, duration: 1000, easing: (n) => n })
        }
      }
      /* 动画执行完毕之后,触发moveend事件 */
      map.on('moveend', () => {
        animation()
      })
      animation()

      map.on('click', () => {
        moving = !moving
        if (!moving) {
          map.stop()
        } else {
          animation()
        }
      })

地图控件

用于控制地图的显示, 和用户交互的按钮

常用的控件

  • 全屏

map.addControl(new mapboxgl.FullscreenControl());

  • 导航(缩放)
const nav = new mapboxgl.NavigationControl(
  {
      //是否显示指南针按钮,默认为true
      "showCompass": true,
      //是否显示缩放按钮,默认为true
      "showZoom":true
  }
);
//添加导航控件,控件的位置包括'top-left', 'top-right','bottom-left' ,'bottom-right'四种,默认为'top-right'
map.addControl(nav, 'top-left');
  • 比例尺
const scale = new mapboxgl.ScaleControl({
    unit:'metric|imperial' //默认为公里
})
map.addControl(scale);
  • 鼠标位置
#mouse-position{
  position: fixed;
  bottom: 25px;
  right: 0px;
  z-index: 100;
  background-color: white;
}

<div id="map">
  <div id="mouse-position">
    经度:  , 纬度:  
  </div>
</div>

map.on('mousemove', function (e) {
  const {lng,lat} = e.lngLat;
  document.getElementById('mouse-position').innerHTML = `经度:${lng.toFixed(2)}, 纬度:${lat.toFixed(2)}`
  
});
  • 搜索
<script
  src="https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v5.0.0/mapbox-gl-geocoder.min.js"></script>
<link rel="stylesheet"
  href="https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v5.0.0/mapbox-gl-geocoder.css" type="text/css">
  
// Add the control to the map.
map.addControl(
    new MapboxGeocoder({
        accessToken: mapboxgl.accessToken,
        zoom: 4,
        placeholder: '请输入地址',
        mapboxgl: mapboxgl,
        reverseGeocode: true
    })
);
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <!-- 1. 导入mapbox库和样式 -->
    <script src="https://api.mapbox.com/mapbox-gl-js/v2.12.0/mapbox-gl.js"></script>
    <link
      href="https://api.mapbox.com/mapbox-gl-js/v2.12.0/mapbox-gl.css"
      rel="stylesheet"
    />
    <script src="https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v5.0.0/mapbox-gl-geocoder.min.js"></script>
    <link
      rel="stylesheet"
      href="https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v5.0.0/mapbox-gl-geocoder.css"
      type="text/css"
    />
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      #map {
        width: 100vw;
        height: 100vh;
      }
    </style>
  </head>

  <body>
    <!-- 2. 创建渲染容器 -->
    <div id="map"></div>
    <script>
      // 设置token
      mapboxgl.accessToken =
       'pk.eyJ1IjoiemhvbmdkaXNodW1hIiwiYSI6ImNsNXJoYXR5eTI2bGgzZW53d2didWF1c3AifQ.6vOplM2NQc_xnJW3aA5ZBA'
      // 3. 创建地图对象
      const map = new mapboxgl.Map({
        container: 'map', // 指定容器id
        style: 'mapbox://styles/mapbox/satellite-streets-v12', // 地图风格
        center: [114.3, 30.5], // 中心点坐标
        zoom: 10, // 缩放比例
        projection: 'globe', // 投影方式
      })

      // 1. 全屏控件
      map.addControl(new mapboxgl.FullscreenControl(), 'top-left')
      // 2. 导航控件
      const nav = new mapboxgl.NavigationControl()
      map.addControl(nav, 'top-left')
      // 3. 比例尺
      const scale = new mapboxgl.ScaleControl({})
      map.addControl(scale, 'bottom-right')
      // 4. 搜索控件
      map.addControl(
        new MapboxGeocoder({
          accessToken: mapboxgl.accessToken,
          zoom: 4,
          placeholder: '请输入地址',
          mapboxgl: mapboxgl,
          reverseGeocode: true,
        })
      )
    </script>
  </body>
</html>

标签:map,底图,center,样式,地图,Mapbox,mapboxgl,new
From: https://www.cnblogs.com/khrushchefox/p/18573300

相关文章

  • 【cesium】修改底图颜色为蓝色科技范儿
    cesium中,默认的底图颜色往往难以满足个性化需求,而【蓝色科技】风格常常备受青睐,本文从实操角度介绍实现方法。 简单来说,我们所用的方法叫做【反色滤镜】,总的分为2个步骤,反色,过滤。具体做法如下:首先要获取目标影像图层,这里不能直接对div进行操作,因为会将地图上的所有元素都......
  • MapBox Android版开发 6 关于Logo
    MapBoxAndroid版开发6关于LogoLogo的显示查看源码及思路(Logo)第一步第二步隐藏Logo示例查看源码及思路(Info)第一步第二步隐藏Logo和Info示例看到有网友留言问如何移除Logo,今天看了下V9源码,发现MapBox提供了禁用Logo的功能。先简单说下思路部分源码,最后是示例。L......
  • GIS开发从0到1|MapboxGL可视化项目实战教程(含步骤说明和代码展示)1
    通用可视化聚类代码展示<!DOCTYPEhtml><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>聚类显示</title>&l......
  • MapBox Android版开发 4 国际化功能v11
    MapBoxAndroid版开发4国际化功能v11前言遇到的问题国际化功能原文给出的方案(V10版)migrate-to-v11适用于V11版的代码示例MapStyle类运行效果图前言在前文MapBox地图样式v11中,使用Style的localizeLabels方法本地化地图语言。但MapboxStandard样式和MapboxStan......
  • 利用眼底图像自动诊断青光眼的拟议模型在实验中超越眼科专家
    研究背景论文地址:https://journals.lww.com/ijo/fulltext/2021/10000/identification_of_glaucoma_from_fundus_images.31.aspx本研究旨在建立一种基于眼底图像的深度学习的青光眼自动诊断算法。青光眼是一种眼压升高导致负责向大脑传递信息的神经纤维收缩的疾病,造成视神......
  • mapboxgl 加载瓦片网格
    importmapboxglfrom"mapbox-gl";exportdefaultclassGridLayer{constructor(map){this.map=map;this.gridSourceId="grid-source";this.gridLayerId="grid-layer";this.labelSourceId="label-sour......
  • openlayers改变底图颜色为暗色系
    importTileLayerfrom"ol/layer/Tile";//瓦片图层类importXYZfrom"ol/source/XYZ";//XYZ格式的切片数据,继承于TileImageconstlayer=newTileLayer({source:newXYZ({url:在线地图url,crossOrigin:"anonymous",......
  • mapbox 结合deckgl添加3DTiles等操作
    1.初始化import{MapboxOverlay}from"@deck.gl/mapbox";import{LineLayer,GeoJsonLayer}from"@deck.gl/layers"; import{TripsLayer,Tile3DLayer}from"@deck.gl/geo-layers"; import{Tiles3DLoader}from"@loade......
  • mapbox聚合使用自定义图标
    1mapboxgl.accessToken='YOUR_MAPBOX_ACCESS_TOKEN';2varmap=newmapboxgl.Map({3container:'map',4style:'mapbox://styles/mapbox/streets-v11',5center:[-74.5,40],6zoom:9.57});89map.on(�......
  • mapboxgl V3 Slot插槽使用介绍
    一、介绍插槽允许在样式中创建定义明确的插入点,如:通常“面”图层需要插入到“线”图层下方,在标准样式之前,需要通过指定图层id来实现,一旦id发生变化,则会抛出错误,而在新的标准样式中,只需要指定相应的插槽即可。{"layers":[...,{"id":"bottom","t......