蜂鸟云地图简单实现

蜂鸟云地图简单实现

官网地址:蜂鸟云地图

1、安装

bash 复制代码
npm install fengmap --save

2、引入

bash 复制代码
// 在当前页面中引入
import fengmap from "fengmap/build/fengmap.map.min"; // 核心包
import "fengmap/build/toolBarStyle.css"; // 样式
import {
  FMControlPosition,
  FMToolbar,
} from "fengmap/build/fengmap.plugin.ui.min"; // 控件

3、实现

蜂鸟云地图API地址

javascript 复制代码
<template>
  <el-card class="map-container" v-loading="mapLoding">
    <!-- 地图容器 -->
    <div id="fengmap-container" style="width: 100%; height: 100%"></div>

    <!-- 点击后展示信息 -->
    <div class="info-panel" v-if="currentInfo">
      <p>名称:{{ currentInfo.buildingName }}</p>
      <p>楼层:{{ currentInfo.floor }}</p>
      <p>经度:{{ currentInfo.lng }}</p>
      <p>纬度:{{ currentInfo.lat }}</p>
    </div>
  </el-card>
</template>

<script setup>
import { onMounted, ref, reactive } from "vue";
import fengmap from "fengmap/build/fengmap.map.min";
import "fengmap/build/toolBarStyle.css";
import {
  FMControlPosition,
  FMToolbar,
} from "fengmap/build/fengmap.plugin.ui.min";

const currentInfo = ref(null);
const mapLoding = ref(true);
onMounted(() => {
  initMap();
});

function initMap() {
  const map = new fengmap.FMMap({
    container: document.getElementById("fengmap-container"),
    appName: "蜂鸟研发SDK_2_0", // 个人申请的应用名称
    key: "57c7f309aca507497d028a9c00207cf8", // 个人申请的测试key
    mapID: "1514920297309614082", // 个人申请的地图ID
    themeID: "1580453922356207618",
    level: 3,
    mapZoom: 19.5,
  });
  mapLoding.value = false;
  // 地图加载完成
  map.on("loadComplete", () => {
    console.log("地图加载完成");
    debugger;
    mapLoding.value = false;
  });
  // 地图加载
  map.on("loaded", () => {
    // 加载工具栏控件
    let toolbarOption = {
      position: FMControlPosition.RIGHT_TOP,
      floorButtonCount: 5,
      offset: {
        x: -30,
        y: 30,
      },
      viewModeControl: true,
      floorModeControl: true,
      needAllLayerBtn: true,
    };
    let toolbar = new FMToolbar(toolbarOption);
    toolbar.addTo(map);
  });

  // 核心:地图点击事件
  map.on("click", e => {
    if (!e.level || !e.coords?.x) return;
    const lng = e.coords.x;
    const lat = e.coords.y;
    const buildingName = e.targets[0]?.name || "未找到楼栋";
    const floorName = map.getFloor(e.level).name;
    // const buildingName = map.getBuilding(e.targets[0])
    currentInfo.value = {
      buildingName: buildingName,
      floor: floorName,
      lng: lng.toFixed(6),
      lat: lat.toFixed(6),
    };

    console.log("点击点位信息:", currentInfo.value);
  });
  /* 聚焦楼层改变事件 */
  map.on("levelChanged", event => {
    const floorName = map.getFloor(event.level).name; // 根据楼层id获取楼层name
  });

  // 切换楼层(你可以绑定按钮 P1/P2/P3)
  window.switchFloor = fid => {
    map.setFloor(fid);
  };
}
</script>

<style scoped>
.map-container {
  height: calc(100vh - 105px);
  position: relative;
}
.info-panel {
  position: absolute;
  left: 20px;
  top: 20px;
  background: rgba(0, 0, 0, 0.6);
  color: #fff;
  padding: 12px 16px;
  border-radius: 8px;
  z-index: 99;
}
</style>

4、展示

加载后: 支持鼠标滚轮放大缩小、鼠标拖拽

相关推荐
陈随易1 小时前
bm2,Node.js 与 Bun 项目部署新选择
前端·后端·程序员
福兮说2 小时前
canvas 旋转图片的六个坑:四角被裁、Math.ceil 多出 1px 黑边、JPG 角发黑、翻转方向反了
前端·javascript·图像处理·canvas
传人once4 小时前
多图片上传预览功能如何写
前端·css·html·jquery·html5
Eric.464 小时前
Wan‑Animate+MiniMax-H3 本地部署 AI 漫剧流水线:8G 显存动作迁移与动态分镜工程实战
前端·人工智能·comfyui·ai漫剧
库拉镜像AI牛牛5 小时前
短剧内容自动化生产:知漫剧工作室落地教程
大数据·服务器·前端·人工智能·语音识别
律宏阔5 小时前
Flutter 列表图片内存优化:CachedNetworkImage 与 ClipRRect 的取舍
前端·flutter
行者全栈架构师5 小时前
【鸿蒙心迹】相册文搜图工程化落地:HarmonyOS 7.0 端侧 AI 检索全链路实战与 5 个踩坑解法
前端
律宏阔6 小时前
Dart 3 Record:解决 Future.wait 异构返回值的类型问题
前端·flutter
Seraphina366 小时前
DVWA(XSS Reflected/Stored High,CSRF Low)
前端·xss·csrf
默_笙7 小时前
🍔 中间件不只是打日志:四个钩子、一次短路,和自带的工具
前端·javascript