如何利用vue+高德API搭建前端環(huán)境頁(yè)面
一、模板部分(<template>)
html
<template>
<div class="page-container">
<div id="container"></div>
</div>
</template>
- 這部分使用 Vue 的模板語法,定義了組件的 HTML 結(jié)構(gòu)。
- 包含一個(gè)
div元素,類名為page-container,它可能是整個(gè)頁(yè)面的容器。 - 內(nèi)部有一個(gè)
div元素,其id為container,該元素很可能是用來承載地圖的容器,后續(xù)的地圖會(huì)被渲染在這個(gè)div元素中。
- 包含一個(gè)
二、腳本部分(<script>)
javascript
import AMapLoader from '@amap/amap-jsapi-loader';
export default {
name: "LayerManage",
data() {
return {
map: null,
satelliteLayer: null,
roadNetLayer: null
};
},
methods: {
initMap() {
AMapLoader.load({
key: "1e31659e58fa7666fe0d08f4487ec5c2", // 記得替換為實(shí)際申請(qǐng)的有效key
version: "2.0"
}).then((AMap) => {
this.map = new AMap.Map('container', {
zoom: 12,
center: [114.091135, 32.148518]
});
// 構(gòu)造官方衛(wèi)星、路網(wǎng)圖層
this.satelliteLayer = new AMap.TileLayer.Satellite();
// this.roadNetLayer = new AMap.TileLayer.RoadNet();
// 批量添加圖層
this.map.add([this.satelliteLayer, this.roadNetLayer]);
}).catch(e => {
console.log(e);
});
},
addSatelliteLayer() {
this.map.add(this.satelliteLayer);
},
removeSatelliteLayer() {
this.map.remove(this.satelliteLayer);
},
addRoadNetLayer() {
this.map.add(this.roadNetLayer);
},
removeRoadNetLayer() {
this.map.remove(this.roadNetLayer);
}
},
mounted() {
this.initMap();
}
};
- 導(dǎo)入和組件聲明:
import AMapLoader from '@amap/amap-jsapi-loader';:從@amap/amap-jsapi-loader導(dǎo)入高德地圖的 JavaScript API 加載器。export default {...}:定義一個(gè) Vue 組件,組件名為LayerManage。
- 數(shù)據(jù)部分(data):
map: null:存儲(chǔ)地圖對(duì)象,初始化為null。satelliteLayer: null:存儲(chǔ)衛(wèi)星圖層對(duì)象,初始化為null。roadNetLayer: null:存儲(chǔ)路網(wǎng)圖層對(duì)象,初始化為null。
- 方法部分(methods):
initMap():- 使用
AMapLoader.load()方法加載高德地圖 API,傳入key和version等配置信息。 - 在加載成功后,使用
AMap.Map創(chuàng)建一個(gè)地圖對(duì)象,將其綁定到id為container的元素上,并設(shè)置zoom和center屬性。 - 使用
new AMap.TileLayer.Satellite()創(chuàng)建一個(gè)衛(wèi)星圖層對(duì)象,并存儲(chǔ)在satelliteLayer變量中。 - 代碼中注釋掉了
this.roadNetLayer = new AMap.TileLayer.RoadNet();,如果取消注釋,會(huì)創(chuàng)建一個(gè)路網(wǎng)圖層對(duì)象。 - 使用
this.map.add([this.satelliteLayer, this.roadNetLayer]);嘗試將創(chuàng)建的圖層添加到地圖中,但由于roadNetLayer可能未正確創(chuàng)建,會(huì)出現(xiàn)問題,需要確保roadNetLayer正確創(chuàng)建和初始化。
- 使用
addSatelliteLayer():將衛(wèi)星圖層添加到地圖中。removeSatelliteLayer():從地圖中移除衛(wèi)星圖層。addRoadNetLayer():將路網(wǎng)圖層添加到地圖中。removeRoadNetLayer():從地圖中移除路網(wǎng)圖層。
- 生命周期鉤子(mounted):
- 調(diào)用
initMap()方法,在組件掛載后初始化地圖和相關(guān)圖層。
- 調(diào)用
三、樣式部分(<style>)
css
<style>
html,
body,
#container {
width: 100%;
height: 125%;
}
.page-container {
width: 100%;
}
.input-card {
width: 24rem;
}
.input-item {
margin-bottom: 10px;
}
.btn {
padding: 5px 10px;
}
</style>
- 通用樣式:
html,body,#container:設(shè)置它們的寬度為 100%,#container的高度為 125%,用于確保容器元素和頁(yè)面的布局。.page-container:設(shè)置類名為page-container的元素的寬度為 100%。.input-card:設(shè)置寬度為24rem,可能用于一些輸入框元素的樣式。.input-item:設(shè)置下邊距為 10px,可能用于輸入項(xiàng)的布局。.btn:設(shè)置按鈕元素的內(nèi)邊距,可能用于樣式調(diào)整。
可能的問題及優(yōu)化建議:
- 在
initMap()方法中,roadNetLayer未正確創(chuàng)建,因?yàn)橄嚓P(guān)代碼被注釋掉了。如果需要使用路網(wǎng)圖層,需要取消注釋this.roadNetLayer = new AMap.TileLayer.RoadNet();并確保正確導(dǎo)入相關(guān)模塊。 - 在
initMap()方法的this.map.add([this.satelliteLayer, this.roadNetLayer]);部分,需要確保roadNetLayer不為null,否則可能導(dǎo)致添加失敗??梢栽谔砑訄D層之前添加一些條件判斷,例如:
javascript
if (this.satelliteLayer) {
this.map.add(this.satelliteLayer);
}
if (this.roadNetLayer) {
this.map.add(this.roadNetLayer);
}
這個(gè) Vue 組件主要實(shí)現(xiàn)了高德地圖的加載以及衛(wèi)星圖層和路網(wǎng)圖層的管理,通過方法可以實(shí)現(xiàn)添加和移除這些圖層的操作,同時(shí)使用 Vue 的生命周期鉤子和樣式來管理組件的狀態(tài)和顯示效果。在使用時(shí)需要確保高德地圖 API 的 key 是有效的,并根據(jù)需求合理添加和移除圖層。
完整代碼:
<template>
<div class="page-container">
<div id="container"></div>
</div>
</template>
<script>
import AMapLoader from '@amap/amap-jsapi-loader';
export default {
name: "LayerManage",
data() {
return {
map: null,
satelliteLayer: null,
roadNetLayer: null
};
},
methods: {
initMap() {
AMapLoader.load({
key: "1e31659e58fa7666fe0d08f4487ec5c2", // 記得替換為實(shí)際申請(qǐng)的有效key
version: "2.0"
}).then((AMap) => {
this.map = new AMap.Map('container', {
zoom: 12,
center: [114.091135, 32.148518]
});
// 構(gòu)造官方衛(wèi)星、路網(wǎng)圖層
this.satelliteLayer = new AMap.TileLayer.Satellite();
// this.roadNetLayer = new AMap.TileLayer.RoadNet();
// 批量添加圖層
this.map.add([this.satelliteLayer, this.roadNetLayer]);
}).catch(e => {
console.log(e);
});
},
addSatelliteLayer() {
this.map.add(this.satelliteLayer);
},
removeSatelliteLayer() {
this.map.remove(this.satelliteLayer);
},
addRoadNetLayer() {
this.map.add(this.roadNetLayer);
},
removeRoadNetLayer() {
this.map.remove(this.roadNetLayer);
}
},
mounted() {
this.initMap();
}
};
</script>
<style>
html,
body,
#container {
width: 100%;
height: 125%;
}
.page-container {
width: 100%;
}
.input-card {
width: 24rem;
}
.input-item {
margin-bottom: 10px;
}
.btn {
padding: 5px 10px;
}
</style>截圖效果:




總結(jié)
到此這篇關(guān)于如何利用vue+高德API搭建前端環(huán)境頁(yè)面的文章就介紹到這了,更多相關(guān)vue+高德API搭建前端環(huán)境內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue中監(jiān)視屬性和計(jì)算屬性區(qū)別解析
這篇文章主要介紹了Vue中監(jiān)視屬性和計(jì)算屬性區(qū)別,通過本文學(xué)習(xí)大家知道computed與watch配置項(xiàng)問題,computed能完成的功能,watch都可以完成,本文通過實(shí)例代碼給大家詳細(xì)講解,需要的朋友可以參考下2022-10-10
vue3利用store實(shí)現(xiàn)記錄滾動(dòng)位置的示例
這篇文章主要介紹了vue3利用store實(shí)現(xiàn)記錄滾動(dòng)位置的示例,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下2021-04-04
基于vue框架手寫一個(gè)notify插件實(shí)現(xiàn)通知功能的方法
這篇文章主要介紹了基于vue框架手寫一個(gè)notify插件實(shí)現(xiàn)通知功能的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
Vue 刷新當(dāng)前路由的實(shí)現(xiàn)代碼
這篇文章主要介紹了Vue 刷新當(dāng)前路由的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
vue項(xiàng)目使用高德地圖時(shí)報(bào)錯(cuò):AMap?is?not?defined解決辦法
這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目使用高德地圖時(shí)報(bào)錯(cuò):AMap?is?not?defined的解決辦法,"AMap is not defined"是一個(gè)錯(cuò)誤提示,意思是在代碼中沒有找到定義的AMap,需要的朋友可以參考下2023-12-12
Vue中使用計(jì)算屬性的知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理了一篇關(guān)于Vue中使用計(jì)算屬性的知識(shí)點(diǎn)總結(jié)內(nèi)容,對(duì)此有興趣的朋友們可以跟著學(xué)習(xí)參考下。2021-12-12
關(guān)于Vue的URL轉(zhuǎn)跳與參數(shù)傳遞方式
這篇文章主要介紹了關(guān)于Vue的URL轉(zhuǎn)跳與參數(shù)傳遞方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03

