vue3-openlayers 轨迹回放(历史轨迹),实时轨迹

vue3-openlayers 轨迹回放(历史轨迹),实时轨迹

本篇介绍一下使用vue3-openlayers轨迹回放(历史轨迹),实时轨迹

1 需求

  • 轨迹回放(历史轨迹)
  • 实时轨迹

2 分析

可以使用和上一篇相同的办法,即主要是利用定时器,不断添加feature

  • 轨迹回放(历史轨迹),一般是一次性拿到所有坐标点,按照时间间隔不断循环添加feature
  • 实时轨迹,一般是通过websocket监听,不断获取最新坐标点,根据上报的频率,可能需要抽样

也可以使用ol-animation-path(下篇介绍,其实openlayers也有类似的方法)

3 实现

<template>
  <ol-map
    :loadTilesWhileAnimating="true"
    :loadTilesWhileInteracting="true"
    style="width: 100%; height: 100%"
    ref="mapRef"
  >
    <ol-view
      ref="view"
      :center="center"
      :zoom="zoom"
      :projection="projection"
    />

    <ol-tile-layer>
      <ol-source-tianditu
        layerType="img"
        :projection="projection"
        :tk="key"
        :hidpi="true"
        ref="sourceRef"
      ></ol-source-tianditu>
    </ol-tile-layer>
    <ol-tile-layer>
      <ol-source-tianditu
        :isLabel="true"
        layerType="img"
        :projection="projection"
        :tk="key"
        :hidpi="true"
      ></ol-source-tianditu>
    </ol-tile-layer>
    <ol-vector-layer>
      <ol-source-vector>
				<ol-feature  v-if="trace.length" >
          <ol-geom-point :coordinates="trace[trace.length-1][1]" ></ol-geom-point>
          <ol-style>
            <ol-style-icon  :src="iconSrc" :width="30" :height="30" :rotation="angle"></ol-style-icon>
          </ol-style>
        </ol-feature>
        <ol-feature v-for="(item, index) in trace" :key="index">
          <ol-geom-line-string :coordinates="item"></ol-geom-line-string>
          <ol-style>
            <ol-style-stroke color="rgba(228, 147, 87, 1)" :width="3"></ol-style-stroke>
          </ol-style>
        </ol-feature>
      </ol-source-vector>
    </ol-vector-layer>
  </ol-map>
</template>

<script setup lang="ts">
import iconSrc from '@/assets/image/truck.png';

const center = ref([121, 31]);
const projection = ref('EPSG:4326');
const zoom = ref(5);
const mapRef = ref();
const key = '替换为天地图key';
const sourceRef = ref(null);
const data = ref([
  [110, 30],
  [110.2, 30],
  [110.4, 30.2],
  [110.8, 30.4],
  [111, 31],
  [111.3, 31],
  [111.6, 31],
  [111.9, 31],
  [112, 31],
  [112.3, 31],
  [112.5, 31],
  [112.8, 31],
  [113, 31],
  [114, 31],
  [115.3, 32],
  [115.5, 32],
  [115.8, 31.8],
  [116, 31.4],
  [116.2, 31.1],
  [116.5, 30.5],
  [115, 30.2],
  [114, 29.8],
  [113, 29.6],
  [112, 29.4],
  [111, 30.2],
  [110, 30.4],
  [109, 30.6],
  [108, 31]
]);
const trace = ref([]);
const angle=ref(0);

onMounted(() => {
  let i = 0;
  const interval = setInterval(() => {
    if (data.value[i + 1]) {
      let arc = 0;
      if (
        (data.value[i + 1][0] - data.value[i][0] >= 0 &&
				data.value[i + 1][1] - data.value[i][1] >= 0) ||
        (data.value[i + 1][0] - data.value[i][0] < 0 &&
          data.value[i + 1][1] - data.value[i][1] > 0)
      ) {
        arc = Math.atan(
          (data.value[i + 1][0] - data.value[i][0]) / (data.value[i + 1][1] - data.value[i][1])
        );
      } else if (
        (data.value[i + 1][0] - data.value[i][0] > 0 &&
          data.value[i + 1][1] - data.value[i][1] < 0) ||
        (data.value[i + 1][0] - data.value[i][0] < 0 &&
          data.value[i + 1][1] - data.value[i][1] < 0)
      ) {
        arc =
          Math.PI +
          Math.atan(
            (data.value[i + 1][0] - data.value[i][0]) /
              (data.value[i + 1][1] - data.value[i][1])
          );
      }
			angle.value=arc
      trace.value.push([data.value[i], data.value[i + 1]]);
      i++;
    } else {
      clearInterval(interval);
    }
  }, 200);
});
</script>
<style scoped lang="scss">
.overlay-content {
  background: rgba(255, 255, 255, 0.7);
  box-shadow: 0 5px 10px rgb(2 2 2 / 20%);
  padding: 10px 20px;
  font-size: 16px;
  color: black;
}
</style>

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Vue 3和高德地图的轨迹,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了Vue 3和高德地图的相关依赖。你可以使用npm或yarn来安装这些依赖。例如,在你的Vue项目中,可以运行以下命令来安装高德地图的依赖: ``` npm install vue-amap ``` 2. 在你的Vue组件中,引入Vue AMap库并注册该组件: ```javascript import VueAMap from 'vue-amap'; export default { ... mounted() { Vue.use(VueAMap); VueAMap.initAMapApiLoader({ key: 'your_amap_key', plugin: ['AMap.Polyline'] }); }, ... } ``` 在上述代码中,你需要将`your_amap_key`替换成你自己的高德地图API密钥。 3. 在模板中添加地图容器和控件: ```html <template> <div> <amap :zoom="13" :center="[lng, lat]"> <amap-polyline :path="path" :visible="true" :style="{ strokeColor: 'red', strokeWeight: 6 }"></amap-polyline> </amap> </div> </template> ``` 在上述代码中,`amap`是地图容器组件,`amap-polyline`是轨迹的折线组件。你可以根据需要调整地图的缩级别和中心点位置,以及折线的样式。 4. 在组件的`data`属性中定义轨迹的经纬度数据: ```javascript data() { return { lng: 116.397428, lat: 39.90923, path: [ [116.405289, 39.904987], [116.406089, 39.904987], [116.406289, 39.905087], // 更多经纬度数据... ] }; } ``` 你需要根据实际情况提供正确的经纬度数据。 5. 最后,你可以根据需求实现轨迹的逻辑。例如,你可以使用定时器来逐步显示折线上的点,实现轨迹的动态效果。 这样,你就可以在Vue 3中使用高德地图实现轨迹了。记得根据你的实际需求进行相应的调整和扩展。希望这能帮到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值