蘭陵美酒鬱金香,玉碗盛來琥珀光。但使主人能醉客,不知何處是他鄉。javascript
項目開發中遇到須要 3D 展現,遇到一些問題,此爲刨坑指南.如今放出來,但願能夠幫助有須要的人css
vue 項目引進地圖html
地圖的定位插件vue
事件及其處理html5
經常使用的方法java
高德地圖開發者官網
webpack
對地圖的引入:git
通常用使用 vue-cli webpack 最簡單粗暴的引入地圖 api 的方法就是,在入口 index.html 的頭部直接引入,記得必定要帶上 key,若是沒有的話去高德地圖 api 的官網申請一個。傳送門以下:申請 key 傳送門github
<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.3&key=************" />
複製代碼
let mapObj = new AMap.Map('map-location', {
//'map-location'是對應頁面盒子的id
resizeEnable: true, //自適應大小
zoom: 13 //初始視窗
})
// AMap是高德地圖的構造函數,這裏.Map是建立地圖,.Marker是建立座標點
複製代碼
初始化一個 3D 地圖web
在 mounted 裏面進行初始化
this.cloudMap = new AMap.Map(this.$refs.dataMaps, {
resizeEnable: true,
// layers: [new AMap.TileLayer.Satellite(), new AMap.TileLayer.RoadNet()],
mapStyle: 'amap://styles/def937553c471693ab838e31fdbc6d82',
viewMode: '3D', // 模式
showBuildingBlock: true,
pitch: 55, // 仰角
zoom: 17 // 縮放
})
複製代碼
let mapObj = new AMap.Map('iCenter') //iCenter是id容器名稱
複製代碼
Geolocation
用 plugin 方法調用mapObj.plugin('AMap.Geolocation', function() {})
複製代碼
var geolocation = new AMap.Geolocation({
// 是否使用高精度定位,默認:true
enableHighAccuracy: true,
// 設置定位超時時間,默認:無窮大
timeout: 10000,
// 定位按鈕的停靠位置的偏移量,默認:Pixel(10, 20)
buttonOffset: new AMap.Pixel(10, 20),
// 定位成功後調整地圖視野範圍使定位位置及精度範圍視野內可見,默認:false
zoomToAccuracy: true,
// 定位按鈕的排放位置, RB表示右下
buttonPosition: 'RB'
})
複製代碼
AMap.event.addListener(geolocation, 'complete', function(data) {
data.position.getLng() //定位成功返回的經度
data.position.getLat() //定位成功返回的緯度
}) //返回定位信息
AMap.event.addListener(geolocation, 'error', function(data) {
if (data.info == 'FAILED') {
alert('獲取您當前位置失敗!')
}
})
複製代碼
注:3D 模型暫時不支持事件及其操做
Object3DLayer
爲專門承載 Object3D
對象的圖層,一個 Object3DLayer
能夠承載多個Object3D
實例對象,繪製 Object3D
對象前先給地圖添加一個 Object3DLayer
圖層:
var object3Dlayer = new AMap.Object3DLayer()
map.add(object3Dlayer)
複製代碼
var bounds = [new AMap.LngLat(116, 39), new AMap.LngLat(117, 39), new AMap.LngLat(117, 40), new AMap.LngLat(116, 40)]
var height = 50000
var color = '#0088ff' //rgba
var prism = new AMap.Object3D.Prism({ path: bounds, height: height, color: color })
複製代碼
再將Object3D
實例添加在上面添加的Object3DLayer
之中就能夠了
object3Dlayer.add(prism) //添加
//object3Dlayer.remove(prism);//移除
複製代碼
MassMarks
當須要在地圖展現數量爲十萬之內的點而且須要較好的性能表現時,可使用 AMap.MassMarks 類。AMap.MassMarks 並非普通的覆蓋物,它其實是由海量點組成的一個地圖圖層, 目前僅適用於 html5 瀏覽器。
// 建立樣式對象
var styleObject = new AMap.StyleObject({
url: '//vdata.amap.com/icons/b18/1/2.png', // 圖標地址
size: new AMap.Size(11,11), // 圖標大小
anchor: new AMap.Pixel(5,5) // 圖標顯示位置偏移量,基準點爲圖標左上角 });
var massMarks = new AMap.MassMarks({ zIndex: 5, // 海量點圖層疊加的順序
zooms: [3, 19], // 在指定地圖縮放級別範圍內展現海量點圖層 style: styleObject // 設置樣式對象 });
複製代碼
MassMarks
展示的數據集var data = [
{
lnglat: [116.405285, 39.904989], //點標記位置
name: 'beijing',
id: 1
}
// {}, …,{}, …
]
massMarks.setData(data) // 將海量點添加至地圖實例 massMarks.setMap(map);
複製代碼
DOM 事件addDomListener
點擊事件 addListener
海量點事件
AMap.event.addListener(marker, 'click', e => this.clickHandler(e, item))
複製代碼
e
爲點擊點的信息包含經緯度和地理位置信息,item
能夠傳自定義的值| 所在頁 | 操做 | 效果 | 備註 |
| ---------- | ------------------ | ---------------------: | -----------------------: |
| 首頁 | 點擊地址搜索 | 上方彈出搜索結果 | |
| 首頁 | 點擊搜索結果 | 定位到當前設備點 | |
| 首頁 | 點擊系統 | 切換不一樣系統點 | |
| 首頁 | 點擊個系統 | 分別彈出對應統計框 | 根據系統區分 |
| 首頁 | 點擊我的中心 | 退出登陸 | |
| 設備列表頁 | 點擊地圖座標點 | 跳轉到設備列表頁 | 下方導航變化 |
| 設備列表頁 | 點擊詳情 | 跳轉到設備詳情包含快照 | |
| 設備列表頁 | 點擊關閉設備列表 | 關閉列表 | 點擊下方功能列表從新彈出 |
| 設備列表頁 | 點擊 home | 回到首頁 | |
| 首頁 | 點擊彈出的報警列表 | 進到報警模式 |
| 所在頁 | 操做 | 效果 | 備註 |
| ---------- | ------------------ | ---------------------: | -----------------------: |
| 報警列表 | 點擊地址搜索 | 上方彈出搜索結果 | |
| 首頁 | 點擊搜索結果 | 定位到當前設備點 | |
| 首頁 | 點擊系統 | 切換不一樣系統點 | |
| 首頁 | 點擊個系統 | 分別彈出對應統計框 | 根據系統區分 |
| 首頁 | 點擊我的中心 | 退出登陸 | |
| 設備列表頁 | 點擊地圖座標點 | 跳轉到設備列表頁 | 下方導航變化 |
| 設備列表頁 | 點擊詳情 | 跳轉到設備詳情包含快照 | |
| 設備列表頁 | 點擊關閉設備列表 | 關閉列表 | 點擊下方功能列表從新彈出 |
| 設備列表頁 | 點擊 home | 回到首頁 | |
| 首頁 | 點擊彈出的報警列表 | 進到報警模式 |