记录了如何从一个vue框架,初步设计并加载二三维底图,并实现相关功能。
目录
01.框架获取
首先在GITTE上爬取一个框架,或者自己创建一个脚手架。
02.运行脚手架
用VScode打开查看(其他环境均可)
这里输入“npm run dev”,运行
npm run dev
报错啦,原因,未安装相关依赖(说明框架内部有东西)
我们只需要把相关依赖配置上即可。
npm install --legacy-peer-deps
再次运行“npm run dev”,进入系统页面。
03.新建page页
在page页下新建两个vue文件,用于二维、三维地图的测试。
在标题图层内加两个索引页,本框架在layout路径下的“navs.vue”文件内,添加两个索引。
给这两个索引定义两个路由。
保存并刷新页面,查看效果。
04.配置二维地图
首先定义一个空间。
<div class="plane-layout">
<div class="plane-layout-2D">
<div class="plane-layout-2D-middle">
<div id="map"></div>
</div>
</div>
</div>
并对空间样式进行优化
.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%;
}
}
}
}
接下来,在script中导入一些必备的模块。
导入 'leaflet'库
import * as L from 'leaflet'
import '@supermap/iclient-leaflet/dist/iclient-leaflet.css'
import 'leaflet/dist/leaflet.css'
import '@supermap/iclient-leaflet'
创建一个存储地图的函数
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.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>
在前端页面显示为: