vue中,应用mapbox地图(一)——mapbox-gl地图设置中文是zh-Hans不是zh & accessToken-访问令牌 & 正确版本streets-v11

vue中,应用mapbox地图(一)——mapbox-gl地图设置中文是zh-Hans不是zh & accessToken-访问令牌 & 正确版本streets-v11

Mapbox GL JS是一个JavaScript库,使用WebGL渲染交互式矢量瓦片地图和栅格瓦片地图。WebGL渲染意味着高性能,MapboxGL能够渲染大量的地图要素,拥有流畅的交互以及动画效果、可以显示立体地图并且支持移动端,是一款十分优秀的WEB GIS开发框架

1、开始

开始之前你需要准备:

An access token你可以在此帐户页面申请.

Android Studio 你可以从谷歌免费下载

谷歌玩开发者账户(可选) 如果你想发布您的应用程序到谷歌play,你需要一个谷歌开发者账户。即使没有,你还是可以预览应用程序在一个Android虚拟设备(AVD)或演示应用程序从一个SDK安装在一个物理设备。

必须带token使用,无论使用不使用官方数据服务。

使用会计数,超过免费额度就要收费,不使用官方用自己的不收费,但还是要token联网。2.0之后等于放弃离线内网用户。一般内网用户不能再升v2了,从1.13开始,自己扩展如地形等功能使用。

2、访问令牌(Access tokens)

使用Mapbox服务和api,如地图、方向,和地理编码,你必须有一个Mapbox访问令牌。你可以找到你的访问令牌你的帐户设置,您可以检索当前令牌并生成新的。访问令牌帮助您跟踪使用情况和最小化中断事件令牌需要撤销。

首先,进入你的帐户设置,创建一个新的访问令牌 My First Mapbox App。

在使用之前,需要先设置mapboxgl.accessToken。accesstokens(访问令牌)可以使用API提供的示例(如下),也可以注册MapBox账号,在用户信息页查看或者创建令牌。

3、英文切换中文
第一种方式:
# 安装语言包
npm install --save mapbox-gl @mapbox/mapbox-gl-language

导入

import mapboxgl from 'mapbox-gl'
import MapboxLanguage  from '@mapbox/mapbox-gl-language'

配置

  //中文设置
  mapboxgl.setRTLTextPlugin(
        "https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-rtl-text/v0.1.0/mapbox-gl-rtl-text.js"
      );
  var language = new MapboxLanguage({ defaultLanguage: "zh-Hans" });
      map.addControl(language);

中文设置的参数是zh-Hans,才能转换为中文

第二种方式:

1、public中的index.html中引入mapbox-gl-language.js

  <script src='https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-language/v0.10.0/mapbox-gl-language.js'></script>

使用

注意:mapbox.setRTLxxx这个代码别放在mounted中,会报错

mapboxgl.setRTLTextPlugin(
          "https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-rtl-text/v0.1.0/mapbox-gl-rtl-text.js"
        );
map.addControl( new MapboxLanguage({ defaultLanguage: "zh-Hans" }) );// 不是zh
4、实例

第一步:安包

# 地图包
npm install mapbox-gl --save
# 地图语言包
npm install --save mapbox-gl @mapbox/mapbox-gl-language

第二步:引包

src/main.js

// 引包方式一
import mapBoxGl from 'mapbox-gl'
Vue.prototype.mbgl = mapBoxGl

第三步:页面使用

map/index.vue

<template>
  <div style="height:100%;width:100%;">
    <div ref="basicMapbox" :style="mapSize"></div>
  </div>
</template>
<script>
import mapboxgl from "mapbox-gl";  // 引包方式二
import MapboxLanguage  from '@mapbox/mapbox-gl-language'
export default {
  props: {
    mapWidth: {
      type: String
    },
    mapHeight: {
      type: String
    }
  },
  data() {
    return {};
  },
  mounted() {
    this.init();
  },
  methods: {
    // 初始化
    init() {
      mapboxgl.accessToken =
        "pk.eyJ1IjoiZmFuZ2xhbmsiLCJhIjoiY2lpcjc1YzQxMDA5NHZra3NpaDAyODB4eSJ9.z6uZHccXvtyVqA5zmalfGg";
      // 英文标注转换为中文   
      mapboxgl.setRTLTextPlugin(
        "https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-rtl-text/v0.1.0/mapbox-gl-rtl-text.js"
      );
      const map = new mapboxgl.Map({
        container: this.$refs.basicMapbox,
        // style: "mapbox://styles/mapbox/streets-v9",  // streets-v9 版本错误应为  streets-v11
        style: "mapbox://styles/mapbox/streets-v11",
        center: [114, 38.54],
        zoom: 6
      });
      // 设置语言
      var language = new MapboxLanguage({ defaultLanguage: "zh-Hans" });
      map.addControl(language);

      // 地图导航
      var nav = new mapboxgl.NavigationControl();
      map.addControl(nav, "top-left");
      // 比例尺
      var scale = new mapboxgl.ScaleControl({
        maxWidth: 80,
        unit: "imperial"
      });
      map.addControl(scale);
      scale.setUnit("metric");
      // 全图
      map.addControl(new mapboxgl.FullscreenControl());
      // 定位
      map.addControl(
        new mapboxgl.GeolocateControl({
          positionOptions: {
            enableHighAccuracy: true
          },
          trackUserLocation: true
        })
      );
      // console.log(map)
    }
  },
  computed: {
    mapSize() {
      let styleObj = {
        width: this.mapWidth,
        height: this.mapHeight
      };
      return styleObj;
    }
  }
};
</script>
<style>
@import url("https://api.tiles.mapbox.com/mapbox-gl-js/v0.51.0/mapbox-gl.css");
.mapboxgl-map {
  height: 100%;
  width: 100%;
}
</style>

效果-版本报错-streets-v9

在这里插入图片描述

效果-正确版本-streets-v11

在这里插入图片描述

以下是个使用 Vite + Vue 3 的示例代码,演示了如何在项目中使用 Vue-iClient-MapboxGL 的 sm-time-line 组件: 首先,确保已经安装了相关依赖包。在项目根目录下执行以下命令: ```bash npm install @supermap/vue-iclient-mapboxgl ``` 然后,可以按照下面的示例代码来编写你的 `main.js` 文件和组件文件。 main.js: ```javascript import { createApp } from &#39;vue&#39;; import App from &#39;./App.vue&#39;; import iClientMapboxgl from &#39;@supermap/vue-iclient-mapboxgl&#39;; const app = createApp(App); // 注册Vue-iClient-MapboxGL组件 app.use(iClientMapboxgl); app.mount(&#39;#app&#39;); ``` App.vue: ```vue &lt;template&gt; &lt;div&gt; &lt;i-client-mapboxgl ref=&quot;map&quot; :accessToken=&quot;accessToken&quot; :styleUrl=&quot;styleUrl&quot; :center=&quot;center&quot; :zoom=&quot;zoom&quot;&gt; &lt;sm-time-line :data=&quot;timelineData&quot; @change=&quot;changeTime&quot;&gt;&lt;/sm-time-line&gt; &lt;/i-client-mapboxgl&gt; &lt;/div&gt; &lt;/template&gt; &lt;script&gt; export default { name: &#39;App&#39;, data() { return { accessToken: &#39;your_access_token&#39;, styleUrl: &#39;http://localhost:8080/styles/basic.json&#39;, center: [0, 0], zoom: 2, timelineData: [ { time: 0, data: &#39;data1&#39; }, { time: 25, data: &#39;data2&#39; }, { time: 50, data: &#39;data3&#39; }, { time: 75, data: &#39;data4&#39; }, { time: 100, data: &#39;data5&#39; }, ], }; }, methods: { changeTime(time) { // 根据时间点执行相应操作 console.log(&#39;Selected time:&#39;, time); // 示例代码:根据选定的时间加载数据图层或更新图层的显示内容 // ... }, }, }; &lt;/script&gt; &lt;style&gt; #map { width: 100%; height: 400px; } &lt;/style&gt; ``` 在上述代码中,我们首先在 `main.js` 文件中注册了 `Vue-iClient-MapboxGL` 组件,然后在 `App.vue` 组件中使用了 `i-client-mapboxgl` 组件作为容器来展示地图,并在其中嵌套了 `sm-time-line` 组件作为时间轴。 在 `App.vue` 的 `data` 中,我们定义了地图相关的配置参数和时间轴的数据数组 `timelineData`。在 `changeTime` 方法中,可以根据选定的时间点执行相应的操作。 请注意替换 `accessToken` 和 `styleUrl` 的值为你自己的 Access Token 和样式地址。 这是个简单的示例,你可以根据自己的需求进行相应的调整和扩展。希望对你有所帮助!如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值