vue3使用MapVThreeGallery

老规矩先装

cnpm i mapv-three -S
cnpm i bmap-three -S

然后

<script setup lang="ts">
import { ref, onMounted } from "vue";

import { GLTFLoader } from "bmap-three/examples/jsm/loaders/GLTFLoader";
import { EffectModelPoint, ClusterPoint, FanPoint, GeoJSONDataSource } from "mapv-three";
const gltfLoader = new GLTFLoader();
import {
  Engine,
  FlyManager,
  UltraDynamicSky,
  EmptySky,
  Default3DTiles,
  DynamicSky,
} from "mapv-three";

const dom = ref();
const center = [113.014666, 28.118481];
onMounted(() => {
  const map = new BMapGL.Map(dom.value);
  map.centerAndZoom(new BMapGL.Point(center[0], center[1]), 17);
  map.enableScrollWheelZoom();
  map.setTilt(40); //地图倾斜角度
  map.setHeading(10); //地图旋转角度
  const engine = new Engine(map, {
    rendering: {
      enableAnimationLoop: true,
    },
  });
  engine.map.setCenter(center);
  engine.map.setZoom(18);
  engine.map.setPitch(70);
  engine.rendering.useMrt = true;
  engine.rendering.shadow.enabled = true;
  // 添加天空(提供光照)
  const sky = engine.add(new EmptySky());
  sky.time = 3600 * 16.5;

  const glbObj = [
    {
      url: "http://bj.bcebos.com/v1/mapopen/api-demos/model/building4.glb",

      data: [
        {
          position: [113.014101, 28.118636, 0],
          scale: [8, 8, 3],
        },
        {
          position: [113.013054, 28.116573, 0],
          scale: [1, 1, 1],
        },
      ],
    },
    {
      url: "http://bj.bcebos.com/v1/mapopen/api-demos/model/building5.glb",
      data: [
        {
          position: [113.011697, 28.116784, 0],
          scale: [1, 1, 1],
        },
      ],
    },
  ];
  const updateGltf = (datas, engine) => {
    const { url, data } = datas;
    gltfLoader.load(url, async function (gltf) {
      console.log(gltf);

      const model = gltf.scene.children[0];

      data.forEach((item) => {
        const { position, scale } = item;

        const ps = [...position];
        const pos = engine.map.projectPointArr(ps);
        const instance = model.clone();
        instance.rotation.x = Math.PI * 0.5;
        instance.rotation.y = Math.PI * -0.58;
        instance.position.set(...pos);

        instance.scale.set(...scale);

        engine.add(instance);
      });
    });
  };

  glbObj.forEach((item) => {
    updateGltf(item, engine);
  });
});
</script>

<template>
  <div ref="dom" id="container"></div>
</template>

<style lang="scss">
#container {
  width: 100%;
  height: 700px;
}
</style>

子集去摸索吧!这dom是跑得起来得,不像百度,那文档里面内容都是跑不起来得,一个json,都特么要藏起来,写个得儿得文档

相关内容

发表评论

验证码:
点击我更换图片

最新评论