当前位置: 首页 > news >正文

20250330期:在前端网页上开发超图二维地图(vue+html)

目录

1 获取脚手架

2 运行环境

3 新建page页

4 vue环境下加载二维地图

4.1 定义空间

4.2 空间样式优化

4.3 安装依赖库

4.4 创建存储地图的函数

4.5 地图初始化

4.6 界面展示

5 html环境下加载二维地图

5.1 引入 SuperMap JS API

5.2 创建地图容器

5.3 初始化地图

6 常见问题排查


1 获取脚手架

首先在GITTE上爬取一个框架,或者自己创建一个脚手架。

2 运行环境

用VScode打开查看(其他环境均可)

这里输入“npm run dev”,运行

npm run dev

报错啦,原因,未安装相关依赖
在运行之前需要先安装依赖(如果在安装node时已经全局安装了就不会报错)

把相关依赖配置上。

npm install --legacy-peer-deps

再次运行“npm run dev”,进入系统页面。

3 新建page页

在page页下新建两个vue文件,用于二维、三维地图的测试(新建一个就行)。

在标题图层内加两个索引页,本框架在layout路径下的“navs.vue”文件内,添加两个索引。

给这两个索引定义两个路由。

保存并刷新页面,查看效果。

4 vue环境下加载二维地图

4.1 定义空间

    <div class="plane-layout">
        <div class="plane-layout-2D">
            <div class="plane-layout-2D-middle">
                <div id="map"></div>
            </div>
        </div>
    </div>

4.2 空间样式优化

.plane-layout {
    width: 100%;
    height: 100%;
    display: flex;
    flex-direction: column;
    padding: 0px;

    &-2D {
        height: 100%;

        &-middle {
            flex: 1;
            background-size: 100% 150%;
            padding: 1px;
            height: 100%;

            #map {
                width: 100%;
                height: 100%;
            }
        }
    }
}

4.3 安装依赖库

在script中导入一些必备的模块。

导入 'leaflet'库

import * as L from 'leaflet'
import '@supermap/iclient-leaflet/dist/iclient-leaflet.css'
import 'leaflet/dist/leaflet.css'
import '@supermap/iclient-leaflet'

4.4 创建存储地图的函数

const createMap = () => {

}

4.5 地图初始化

定义一个开源的在线地图

var url4326 = "https://iserver.supermap.io/iserver/services/map-world/rest/maps/World";

对地图的属性进行定义

如地图名称、投影、中西当年、最大缩放等级、最小缩放等级、当前缩放等级等。

    var map = L.map('map', {
        crs: L.CRS.EPSG4326,
        center: [40.044716, 111.489059],
        maxZoom: 18,
        zoom: 4,
        minZoom: 4
    });

将在线地图显示在定义的地图图层中

(函数引用:support.supermap.com.cn:8090/iserver/iClient/forJavaScript/docs/leaflet/TiledMapLayer.html)

new L.supermap.TiledMapLayer(url4326).addTo(map);

这里,我们需要给地图定义一个出发指令。

  • mounted: 组件初始化完成,可以访问dom,
  • $nextTick: 每次数据更新之后,渲染完毕的回调,
  • created: 可以正常访问数据。
onMounted(() => {
    nextTick(() => {
        createMap()
    })
})

二维地图完整版代码:

<template>
    <div class="plane-layout">
        <div class="plane-layout-2D">
            <div class="plane-layout-2D-middle">
                <div id="map"></div>
            </div>
        </div>
    </div>
</template>
<script setup lang="ts">
import * as L from 'leaflet'
import '@supermap/iclient-leaflet/dist/iclient-leaflet.css'
import 'leaflet/dist/leaflet.css'
import '@supermap/iclient-leaflet'
import { onMounted, nextTick } from 'vue'

const createMap = () => {
    var url4326 = "https://iserver.supermap.io/iserver/services/map-world/rest/maps/World";
    var map = L.map('map', {
        crs: L.CRS.EPSG4326,
        center: [40, 111],
        maxZoom: 18,
        zoom: 4,
        minZoom: 4
    });
    new L.supermap.TiledMapLayer(url4326).addTo(map);
}
onMounted(() => {
    nextTick(() => {
        createMap()
    })
})
</script>
<style></style>
<style lang="less" scoped>
.plane-layout {
    width: 100%;
    height: 100%;
    display: flex;
    flex-direction: column;
    padding: 0px;

    &-2D {
        height: 100%;

        &-middle {
            flex: 1;
            background-size: 100% 150%;
            padding: 1px;
            height: 100%;

            #map {
                width: 100%;
                height: 100%;
            }
        }
    }
}
</style>

4.6 界面展示

在前端页面显示为:


5 html环境下加载二维地图

如果时使用html来构造二维地图,首先需要在supermap官网注册开发者账号,进入控制台创建新应用,获取 appKey(用于身份验证)。

5.1 引入 SuperMap JS API

在 HTML 文件中通过 CDN 或本地文件引入 API:

<script src="https://iclient.supermap.io/dist/supermap.js"></script>
<!-- 或本地引入(需下载 SDK) -->
<script src="./path/to/supermap.js"></script>

5.2 创建地图容器

在 HTML 头部中添加一个用于承载地图的 <div>

<div id="map" style="width: 100%; height: 600px;"></div>

5.3 初始化地图

在正文部分,使用 JavaScript 初始化地图实例,并加载底图:

// 初始化地图对象
const map = new supermap.Map({
  controls: [
    new supermap.NavigationControl(), // 添加缩放控件
    new supermap.ScaleLineControl()   // 添加比例尺
  ]
});

// 创建图层
const layer = new supermap.TileLayer({
  url: "https://iserver.supermap.io/iserver/services/map-china400/rest/maps/China",
  serverType: "iServer"
});

// 将图层添加到地图
map.addLayers([layer]);

// 将地图绑定到容器
map.setTarget("map");

// 设置初始视口(中心点坐标和缩放级别)
map.setView(new supermap.View({
  center: [116.4, 39.9], // 中心点坐标
  zoom: 4               // 缩放级别
}));

完整代码如下:

<!DOCTYPE html>
<html>
<head>
  <title>aaanimals_SuperMap_二维地图</title>
  <script src="https://iclient.supermap.io/dist/supermap.js"></script>
  <style>
    #map { width: 100%; height: 600px; }
  </style>
</head>
<body>
  <div id="map"></div>
  <script>
    // 初始化地图
    const map = new supermap.Map({
      controls: [
        new supermap.NavigationControl(),
        new supermap.ScaleLineControl()
      ]
    });

    // 添加底图图层
    const layer = new supermap.TileLayer({
      url: "https://iserver.supermap.io/iserver/services/map-china400/rest/maps/China",
      serverType: "iServer"
    });
    map.addLayers([layer]);

    // 绑定到容器并设置视口
    map.setTarget("map");
    map.setView(new supermap.View({
      center: [116.4, 39.9],
      zoom: 4
    }));
  </script>
</body>
</html>

6 常见问题排查

  • 地图不显示:检查容器尺寸是否明确(如设置 width/height),确保 API 加载成功。
  • 图层加载失败:确认图层 URL 和 serverType 正确,或替换为自有服务地址。
  • 坐标偏移:若使用非官方地图,需确认坐标系(如 WGS84 或 GCJ02)。

喜欢本篇文章请多多关注,您的鼓励是我最大的动力。欢迎大家互相分享交流。(aaanimals)


相关文章:

  • 【创新实训个人博客】deepseek api接入
  • 房贷计算器
  • Python 中常用的内置数据结构详解
  • 六十天前端强化训练之第三十七天之Docker 容器化部署实战指南(大师级详解)
  • 【Linux】U-Boot 加载并启动 Linux 系统程序
  • Linux C++ 利用 io_uring 技术批量读取 tun 文件描述符的数据。
  • 基于大模型预测的慢性稳定性心绞痛全周期管理系统技术方案文档
  • Flink介绍——发展历史
  • 克魔ios开发助手查看苹果手机各个硬件组件使用历史记录和耗能历史记录
  • MySQL主从数据库搭建
  • sort排序
  • 使用Python进行数据挖掘时如何有效的数据脱敏?
  • 资源单元(RU)分配和映射
  • 【JavaScript】十一、DOM对象的获取和修改
  • 多输入多输出 | Matlab实现CPO-LSTM冠豪猪算法优化长短期记忆神经网络多输入多输出预测
  • 05-02-自考数据结构(20331)- 动态查找-知识点
  • 离线知识库文档问答用唤醒+VOSK离线听写+DS-V2-16B+离线合成轻松高效实现
  • Rocky Linux 9.5中完美迁移mysql5.6.17到mysql5.7.11
  • 20250330-傅里叶级数专题之离散时间傅里叶变换(4/6)
  • js 强引用 ​弱引用
  • 神马网站可以做兼职/网络推广代理
  • 网站空间500mb/定制网站建设推广服务
  • 网站备案期间可以访问吗/外链工具xg下载
  • 网站制作的基本概念/推广产品最好的方式
  • 怎么做百度自己的网站空间/如何做一个自己的网页
  • php除了做网站还能做什么/网络推广外包费用