mapbox地图投影

本文介绍了如何使用MapboxGLJS库在网页上创建可交互的地图,支持8种预设投影模式的切换,如Mercator、Globe等,并展示了相应的代码实现和效果演示。
摘要由CSDN通过智能技术生成

本案例使用Mapbox GL JS库创建地图投影的示例。它允许用户从 8 种预设的地图投影模式中选择一种,并实时查看效果。

1. 引入 CDN 链接

<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"
/>

2. 定义投影选项

我们定义定义一个下拉菜单选项,供我们选择不同的地图投影模式。

<select name="projection" id="select">
  <option value="mercator">mercator</option>
  <option value="globe">globe</option>
  <option value="albers">albers</option>
  <option value="equalEarth">equalEarth</option>
  <option value="equirectangular">equirectangular</option>
  <option value="lambertConformalConic">lambertConformalConic</option>
  <option value="naturalEarth">naturalEarth</option>
  <option value="winkelTripel">winkelTripel</option>
</select>

3. 创建地图

3.1. 地图实例

我们创建了一个Mapbox GL JS地图实例,设置了地图的容器、默认的地图风格、中心点坐标、地图级别以及默认的地图投影模式。

const map = new mapboxgl.Map({
  // 在这个对象中,我们填入一些地图相关的参数设置
  container: "map", //地图容器
  style: "mapbox://styles/mapbox/streets-v12", //地图风格,底图数据源
  center: [114.3, 30.5], //默认注视的坐标点
  zoom: 1, //当前展示的地图级别
  projection: "globe", //地图投影模式
});

3.2. 设置地球的背景颜色

地图加载完成后,设置了雾化效果。

map.on("style.onload", () => {
  map.setFog({});
});

3.3. 更新地图

通过监听下拉菜单的onchange事件,当用户选择一个新的地图投影模式时,会更新地图的投影设置。

const select = document.getElementById("select");
select.onchange = (e) => {
  map.setProjection({
    name: e.target.value,
  });
};

4. 地图样式

* {
  margin: 0;
  padding: 0;
}
#map {
  width: 100vw;
  height: 100vh;
}
#select {
  position: absolute;
  left: 10px;
  top: 10px;
  z-index: 3;
}

5. 演示效果

5.1. mercator

image-20240227144740265

5.2. globe

image-20240227151541470

5.3. albers

image-20240227151646523

5.4. equalEarth

image-20240227151709562

5.5. equirectangular

image-20240227151802116

5.6. lambertConformalConic

image-20240227151823107

5.7. naturalEarth

image-20240227151840012

5.8. winkelTripel

image-20240227151901535

6. 代码实现

<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>地图投影</title>
    <!-- 1.引入CDN链接 -->
    <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;
      }
      #select {
        position: absolute;
        left: 10px;
        top: 10px;
        z-index: 3;
      }
    </style>
  </head>
  <body>
    <!-- 2.定义投影选项 -->
    <select name="projection" id="select">
      <option value="mercator">mercator</option>
      <option value="globe">globe</option>
      <option value="albers">albers</option>
      <option value="equalEarth">equalEarth</option>
      <option value="equirectangular">equirectangular</option>
      <option value="lambertConformalConic">lambertConformalConic</option>
      <option value="naturalEarth">naturalEarth</option>
      <option value="winkelTripel">winkelTripel</option>
    </select>
    <div id="map"></div>
    <script>
      // 3.地图显示
      window.onload = () => {
        mapboxgl.accessToken =
          "pk.eyJ1IjoiY2hlbmdjaGFvODg2NiIsImEiOiJjbGhzcWowMHUwYTNyM2VwNXZhaXhjd3Q4In0.FEh2q7sEW88Z1B5GcK_TDg";
        // 3.1 创建地图实例
        const map = new mapboxgl.Map({
          // 在这个对象中,我们填入一些地图相关的参数设置
          container: "map", //地图容器
          style: "mapbox://styles/mapbox/streets-v12", //地图风格,底图数据源
          center: [114.3, 30.5], //默认注视的坐标点
          zoom: 1, //当前展示的地图级别
          projection: "globe", //地图投影模式
        });

        // 3.2 设置地球的背景颜色
        map.on("style.onload", () => {
          map.setFog({});
        });

        // 3.3 更新地图
        const select = document.getElementById("select");
        select.onchange = (e) => {
          map.setProjection({
            name: e.target.value,
          });
        };
      };
    </script>
  </body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值