Mapbox结合Deck.gl做出城市公交线路效果

第一次接触Gis,参照官方文档以及相关例子,做出的一个在Vue项目中实现的公交线路效果(该例子在deck.gl的官方文中是react框架做的)。

mapBox官网:http://www.mapbox.com

deck.gl参照的例子:https://deck.gl/examples/trips-layer/

安装:npm install mapbox-gl --save

           npm install deck.gl --save

使用:

<div class="home">
    <div id="map" ref="map"></div> <!-- 地图 -->
    <div id="info"></div>  <!--  坐标提示框 -->
</div>
import mapboxgl from "mapbox-gl";
import { MapboxLayer } from "@deck.gl/mapbox";
import { TripsLayer } from "@deck.gl/geo-layers";

export default {
  name: "Home",

  data() {
    return {
      map: "", //地图
      //主题
      theme: {
        buildingColor: [74, 80, 87],
        trailColor0: [253, 128, 93],
        trailColor1: [23, 184, 190],
        material: {
          ambient: 0.1, //环境
          diffuse: 0.6, //扩散
          shininess: 32, //亮度
          specularColor: [60, 64, 70],
        },
      },
      time: 0, //时间
      loopLength: 1800, // 线圈长度
      animationSpeed: 1, //动画速度
    };
  },
  mounted() {
    this.initMap();
  },
  methods: {
    // 初始化底层地图
    initMap() {
      this.map = new mapboxgl.Map({
        accessToken: "自己在mapBox上申请的access token",
        container: this.$refs.map,
        style: "https://basemaps.cartocdn.com/gl/dark-matter-nolabels-gl-style/style.json",
        center: [-74, 40.72],
        zoom: 13,
        pitch: 45,
        bearing: 0,
        antialias: true, // 平滑曲线
      });
      // 添加图层
      this.addLayers();

      // 点击显示当前位置坐标
      this.map.on("click", (e) => {
        document.getElementById("info").innerHTML ='当前位置:'+JSON.stringify(e.lngLat.wrap());
        document.getElementById("info").style.display="table"
      });
    },
    // 添加图层
    addLayers() {
      // 线路层
      let myDeckLayer = new MapboxLayer({
        id: "trips",
        type: TripsLayer,
        data: "https://raw.githubusercontent.com/visgl/deck.gl-data/master/examples/trips/trips-v7.json",
        getPath: (d) => d.path,
        getTimestamps: (d) => d.timestamps, //返回一个时间戳数组,对应于返回的路径的每个导航点,表示访问该点的时间
        getColor: (d) =>
          d.vendor === 0 ? this.theme.trailColor0 : this.theme.trailColor1,
        opacity: 0.3,
        widthMinPixels: 5, // 轨迹的宽度
        capRounded: true,
        // fadeTrail:false  //路径是否淡出
        trailLength: 120, //路径完全淡出需要多长时间
        currentTime: 0, //帧的当前时间,即动画的播放头;此值应与 timestamps 中的时间戳单位相同
        shadowEnabled: false,
      });

      this.map.on("load", () => {
        // 添加myDeckLayer图层
        this.map.addLayer(myDeckLayer);
        // 每50ms更新一下时间,形成动画
        setInterval(() => {
          myDeckLayer.setProps({
            currentTime: this.time,
          });
        }, 50);
        window.requestAnimationFrame(this.animate);
      });
    },
    // 动画
    animate() {
      this.time = (this.time + this.animationSpeed) % this.loopLength;
      window.requestAnimationFrame(this.animate);
    },
  },
};
// 导入mapbox样式
@import url('https://api.mapbox.com/mapbox-gl-js/v0.49.0/mapbox-gl.css');
#map {
  width: 1400px;
  height: 800px;
  background: #e5e9ec;
}
#info {
  display: none;
  position: absolute;
  top: 90px;
  margin: 0px auto;
  word-wrap: anywhere;
  white-space: pre-wrap;
  padding: 10px;
  border: none;
  border-radius: 3px;
  font-size: 12px;
  text-align: center;
  color: #222;
  background: #fff;
}

效果图:

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要使用Mapbox GL JS实现定位打点功能,你需要遵循以下步骤: 1. 创建一个具有定位权限的地图: ```javascript mapboxgl.accessToken = 'YOUR_ACCESS_TOKEN'; var map = new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/streets-v11', center: [lng, lat], // 设置地图中心点经纬度 zoom: 12 // 设置地图缩放级别 }); // 获取地理位置信息并更新地图中心点 navigator.geolocation.getCurrentPosition(function(position) { var lng = position.coords.longitude; var lat = position.coords.latitude; map.setCenter([lng, lat]); }); ``` 2. 添加定位点: ```javascript var el = document.createElement('div'); el.className = 'marker'; // 创建一个Marker对象并添加到地图中 new mapboxgl.Marker(el) .setLngLat([lng, lat]) .addTo(map); ``` 3. 样式化定位点: ```css .marker { background-image: url('https://docs.mapbox.com/help/demos/custom-markers-gl-js/mapbox-icon.png'); background-size: cover; width: 50px; height: 50px; border-radius: 50%; cursor: pointer; } ``` 4. 完整代码示例: ```html <!DOCTYPE html> <html> <head> <meta charset='utf-8' /> <title>Mapbox GL JS - Add geolocate control</title> <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' /> <script src='https://api.mapbox.com/mapbox-gl-js/v2.3.1/mapbox-gl.js'></script> <link href='https://api.mapbox.com/mapbox-gl-js/v2.3.1/mapbox-gl.css' rel='stylesheet' /> <style> body { margin: 0; padding: 0; } #map { position: absolute; top: 0; bottom: 0; width: 100%; } .marker { background-image: url('https://docs.mapbox.com/help/demos/custom-markers-gl-js/mapbox-icon.png'); background-size: cover; width: 50px; height: 50px; border-radius: 50%; cursor: pointer; } </style> </head> <body> <div id='map'></div> <script> mapboxgl.accessToken = 'YOUR_ACCESS_TOKEN'; var map = new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/streets-v11', center: [0, 0], // 设置地图中心点经纬度 zoom: 12 // 设置地图缩放级别 }); // 获取地理位置信息并更新地图中心点 navigator.geolocation.getCurrentPosition(function(position) { var lng = position.coords.longitude; var lat = position.coords.latitude; map.setCenter([lng, lat]); // 创建定位点 var el = document.createElement('div'); el.className = 'marker'; new mapboxgl.Marker(el) .setLngLat([lng, lat]) .addTo(map); }); </script> </body> </html> ``` 这个示例代码会在地图上显示一个定位点,该点的位置是根据用户的当前位置动态确定的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值