mirror of https://gitee.com/xiaonuobase/snowy
【新增】百度地图组件 BMap
parent
7a3b988a44
commit
f237abd040
|
@ -0,0 +1,181 @@
|
||||||
|
BMap
|
||||||
|
====
|
||||||
|
|
||||||
|
> 百度地图组件,常用于地图展示使用
|
||||||
|
|
||||||
|
该组件由 [小诺开源技术](https://www.xiaonuo.vip) 封装
|
||||||
|
|
||||||
|
|
||||||
|
### 使用方式
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<template>
|
||||||
|
<a-map ref="map" api-key="******" @complete="handleComplete"
|
||||||
|
@marker-click="handleMarkerClick"></a-map>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="exmAMap">
|
||||||
|
import AMap from '@/components/Map/bMap/index.vue'
|
||||||
|
|
||||||
|
const map = ref(null)
|
||||||
|
|
||||||
|
const handleComplete = () => {
|
||||||
|
// 渲染 点标记
|
||||||
|
map.value.renderMarker(
|
||||||
|
[
|
||||||
|
{
|
||||||
|
position: [116.39, 39.9],
|
||||||
|
title: 'TA',
|
||||||
|
content: 'CA',
|
||||||
|
label: {
|
||||||
|
content: 'LCA'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
position: [116.33, 39.5],
|
||||||
|
title: 'TB',
|
||||||
|
icon: '//vdata.amap.com/icons/b18/1/2.png'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleMarkerClick = (position) => {
|
||||||
|
map.value.openInfoWindow(position)
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Prop属性
|
||||||
|
|
||||||
|
| 名称 | 说明 | 类型 | 默认值 |
|
||||||
|
|---------------|--------------|--------|------|
|
||||||
|
| mid | 容器ID | String | 时间戳 |
|
||||||
|
| apiKey | 地图Key | String | |
|
||||||
|
| center | 地图中心点 | String | 自动定位 |
|
||||||
|
| plugins | 地图控件 | Array | |
|
||||||
|
| viewMode | 效果:2D,3D | String | 3D |
|
||||||
|
| rotationAngle | 旋转角度 | Number | 60 |
|
||||||
|
| tiltAngle | 倾斜角度 | Number | 70 |
|
||||||
|
| zoom | 地图缩放比例 | Number | 12 |
|
||||||
|
| mapStyle | 地图样式:个性化地图 | String | |
|
||||||
|
|
||||||
|
#### 地图控件
|
||||||
|
|
||||||
|
- BMap.ScaleControl:比例尺
|
||||||
|
- BMap.ZoomControl:缩放
|
||||||
|
- BMap.LocationControl:定位
|
||||||
|
- BMap.NavigationControl3D:3D控件
|
||||||
|
|
||||||
|
### 事件
|
||||||
|
|
||||||
|
| 名称 | 说明 | 参数 | 参数类型 |
|
||||||
|
|-------------|---------------|----------|-------|
|
||||||
|
| complete | 当地图初始化完成时触发 | - | - |
|
||||||
|
| markerClick | 当点击了点覆盖物时触发 | position | Array |
|
||||||
|
|
||||||
|
### 方法
|
||||||
|
|
||||||
|
| 名称 | 说明 | 参数 | 参数类型 |
|
||||||
|
|----------------------|-----------|------------------------|-------------------|
|
||||||
|
| renderMarker | 渲染 点标记 | dataArr | Array |
|
||||||
|
| renderIconMarker | 渲染 图标标记 | dataArr | Array |
|
||||||
|
| render3DCircleMarker | 渲染 3D圆点标记 | dataArr | Array |
|
||||||
|
| render3DIconMarker | 渲染 3D图标标记 | dataArr | Array |
|
||||||
|
| renderPolyline | 渲染 线 | dataArr,option | Array,JSON |
|
||||||
|
| renderCircle | 渲染 圆 | position,radius,option | Array,Number,JSON |
|
||||||
|
| renderPolygon | 渲染 面 | dataArr,option | Array,JSON |
|
||||||
|
| renderInfoWindow | 渲染 信息窗体 | dataArr | Array |
|
||||||
|
| openInfoWindow | 打开 信息窗体 | position | Array |
|
||||||
|
| clearOverlay | 清理 覆盖物 | | |
|
||||||
|
|
||||||
|
### 方法参数```dataArr```结构
|
||||||
|
|
||||||
|
> 点标记
|
||||||
|
|
||||||
|
```json
|
||||||
|
[{
|
||||||
|
"position": "坐标数组",
|
||||||
|
"title": "鼠标滑过点标记时的文字提示"
|
||||||
|
}]
|
||||||
|
```
|
||||||
|
|
||||||
|
> 图标标记
|
||||||
|
|
||||||
|
```json
|
||||||
|
[{
|
||||||
|
"position": "坐标数组",
|
||||||
|
"title": "鼠标滑过点标记时的文字提示",
|
||||||
|
"img": "图片地址",
|
||||||
|
"imgWidth": "图片宽度,默认40",
|
||||||
|
"imgHeight": "图片高度,默认40"
|
||||||
|
}]
|
||||||
|
```
|
||||||
|
|
||||||
|
> 3D圆点标记
|
||||||
|
|
||||||
|
```json
|
||||||
|
[{
|
||||||
|
"position": "坐标数组",
|
||||||
|
"height": "高度,默认8000",
|
||||||
|
"size": "大小,默认50",
|
||||||
|
"fillColor": "填充颜色,默认#006600"
|
||||||
|
}]
|
||||||
|
```
|
||||||
|
|
||||||
|
> 3D图标标记
|
||||||
|
|
||||||
|
```json
|
||||||
|
[{
|
||||||
|
"position": "坐标数组",
|
||||||
|
"height": "高度,默认8000",
|
||||||
|
"size": "大小,默认50",
|
||||||
|
"img": "图片地址",
|
||||||
|
"imgWidth": "图片宽度,默认40",
|
||||||
|
"imgHeight": "图片高度,默认40"
|
||||||
|
}]
|
||||||
|
```
|
||||||
|
|
||||||
|
> 线、面
|
||||||
|
|
||||||
|
```json
|
||||||
|
[{
|
||||||
|
"position": "坐标数组"
|
||||||
|
}]
|
||||||
|
```
|
||||||
|
|
||||||
|
> 信息窗体
|
||||||
|
|
||||||
|
```json
|
||||||
|
[{
|
||||||
|
"position": "坐标数组",
|
||||||
|
"title": "标题",
|
||||||
|
"content": "内容,文本数组,会以换行进行连接",
|
||||||
|
"width": "窗体宽度",
|
||||||
|
"height": "窗体高度"
|
||||||
|
}]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 方法参数```option```结构
|
||||||
|
|
||||||
|
> 线、圆
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"strokeColor": "边线颜色,默认blue",
|
||||||
|
"strokeWeight": "边线宽度,默认2",
|
||||||
|
"strokeOpacity": "边线透明度,默认0.5"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
> 面
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"strokeColor": "边线颜色,默认blue",
|
||||||
|
"strokeWeight": "边线宽度,默认2",
|
||||||
|
"strokeOpacity": "边线透明度,默认0.5",
|
||||||
|
"fillColor": "填充颜色,默认blue",
|
||||||
|
"fllOpacity": "填充透明度,默认0.5"
|
||||||
|
}
|
||||||
|
```
|
After Width: | Height: | Size: 4.4 KiB |
|
@ -0,0 +1,402 @@
|
||||||
|
<template>
|
||||||
|
<div class="bMap">
|
||||||
|
<div :id="`container-${mid}`" style="width: 100%;height: 100%;">
|
||||||
|
地图资源加载中...
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<!--BMapGL官网:https://lbsyun.baidu.com/index.php?title=jspopularGL-->
|
||||||
|
<script setup name="BMap">
|
||||||
|
import {onMounted, onUnmounted, shallowRef} from "vue"
|
||||||
|
|
||||||
|
const props = defineProps(
|
||||||
|
{
|
||||||
|
mid: {
|
||||||
|
type: Number,
|
||||||
|
default: new Date().getTime()
|
||||||
|
},
|
||||||
|
apiKey: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
center: {
|
||||||
|
type: Array
|
||||||
|
},
|
||||||
|
plugins: {
|
||||||
|
type: Array,
|
||||||
|
default: [
|
||||||
|
'BMap.ScaleControl',
|
||||||
|
'BMap.ZoomControl',
|
||||||
|
'BMap.LocationControl',
|
||||||
|
'BMap.NavigationControl3D'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
viewMode: {
|
||||||
|
type: String,
|
||||||
|
default: '3D',
|
||||||
|
validator(value) {
|
||||||
|
return ['2D', '3D'].includes(value)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rotationAngle: {
|
||||||
|
type: Number,
|
||||||
|
default: 60
|
||||||
|
},
|
||||||
|
tiltAngle: {
|
||||||
|
type: Number,
|
||||||
|
default: 70
|
||||||
|
},
|
||||||
|
zoom: {
|
||||||
|
type: Number,
|
||||||
|
default: 12
|
||||||
|
},
|
||||||
|
mapStyle: {
|
||||||
|
type: String
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
const emits = defineEmits(['complete', 'markerClick'])
|
||||||
|
|
||||||
|
const bMap = shallowRef(null)
|
||||||
|
const bMapPointArr = ref([])
|
||||||
|
const bMapInfoWindowObj = ref({})
|
||||||
|
|
||||||
|
const init = () => {
|
||||||
|
// 创建script脚本 引入api
|
||||||
|
const script = document.createElement('script')
|
||||||
|
script.src = `https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=${props.apiKey}&callback=initMap`
|
||||||
|
// 加入head 加载api
|
||||||
|
const head = document.getElementsByTagName('head')[0]
|
||||||
|
head.appendChild(script)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化 地图
|
||||||
|
*/
|
||||||
|
window.initMap = () => {
|
||||||
|
bMap.value = new BMapGL.Map(`container-${props.mid}`)
|
||||||
|
|
||||||
|
// 滚轮放大缩小
|
||||||
|
bMap.value.enableScrollWheelZoom(true)
|
||||||
|
// 地图样式:个性化地图
|
||||||
|
if (props.mapStyle) {
|
||||||
|
bMap.setMapStyleV2(props.mapStyle)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 控件
|
||||||
|
props.plugins.length > 0 && initControlPlugin()
|
||||||
|
|
||||||
|
// 中心点
|
||||||
|
if (props.center) {
|
||||||
|
setFitView(new BMapGL.Point(props.center[0], props.center[1]))
|
||||||
|
|
||||||
|
// 地图初始化完成
|
||||||
|
emits('complete')
|
||||||
|
} else {
|
||||||
|
// 浏览器定位
|
||||||
|
new BMapGL.Geolocation().getCurrentPosition((r) => {
|
||||||
|
if (r) {
|
||||||
|
setFitView(new BMapGL.Point(r.longitude, r.latitude))
|
||||||
|
} else {
|
||||||
|
console.error('getCurrentPosition fail', r)
|
||||||
|
|
||||||
|
setFitView()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 地图初始化完成
|
||||||
|
emits('complete')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化 控制控件
|
||||||
|
*/
|
||||||
|
const initControlPlugin = () => {
|
||||||
|
// 比例尺
|
||||||
|
props.plugins.includes('BMap.ScaleControl') && bMap.value.addControl(new BMapGL.ScaleControl())
|
||||||
|
// 缩放
|
||||||
|
props.plugins.includes('BMap.ZoomControl') && bMap.value.addControl(new BMapGL.ZoomControl())
|
||||||
|
// 定位
|
||||||
|
props.plugins.includes('BMap.LocationControl') && bMap.value.addControl(new BMapGL.LocationControl())
|
||||||
|
// 3D控件
|
||||||
|
props.plugins.includes('BMap.NavigationControl3D') && bMap.value.addControl(new BMapGL.NavigationControl3D())
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 渲染 点标记
|
||||||
|
* @param dataArr
|
||||||
|
*/
|
||||||
|
const renderMarker = (dataArr) => {
|
||||||
|
dataArr.forEach(d => {
|
||||||
|
const point = new BMapGL.Point(d.position[0], d.position[1])
|
||||||
|
const marker = new BMapGL.Marker(
|
||||||
|
// 坐标
|
||||||
|
point,
|
||||||
|
{
|
||||||
|
// 鼠标滑过点标记时的文字提示
|
||||||
|
title: d.title
|
||||||
|
}
|
||||||
|
)
|
||||||
|
marker.addEventListener('click', () => {
|
||||||
|
emits('markerClick', d.position)
|
||||||
|
})
|
||||||
|
bMap.value.addOverlay(marker)
|
||||||
|
|
||||||
|
bMapPointArr.value.push(point)
|
||||||
|
})
|
||||||
|
|
||||||
|
setFitView()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 渲染 图标标记
|
||||||
|
* @param dataArr
|
||||||
|
*/
|
||||||
|
const renderIconMarker = (dataArr) => {
|
||||||
|
dataArr.forEach(d => {
|
||||||
|
const point = new BMapGL.Point(d.position[0], d.position[1])
|
||||||
|
const marker = new BMapGL.Marker(
|
||||||
|
// 坐标
|
||||||
|
point,
|
||||||
|
{
|
||||||
|
// 鼠标滑过点标记时的文字提示
|
||||||
|
title: d.title,
|
||||||
|
// 图标对象
|
||||||
|
icon: new BMapGL.Icon(d.img,
|
||||||
|
new BMapGL.Size(d.imgWidth ? d.imgWidth : 40, d.imgHeight ? d.imgHeight : 40)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
marker.addEventListener('click', () => {
|
||||||
|
emits('markerClick', d.position)
|
||||||
|
})
|
||||||
|
bMap.value.addOverlay(marker)
|
||||||
|
|
||||||
|
bMapPointArr.value.push(point)
|
||||||
|
})
|
||||||
|
|
||||||
|
setFitView()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 渲染 3D圆点标记
|
||||||
|
* @param dataArr
|
||||||
|
*/
|
||||||
|
const render3DCircleMarker = (dataArr) => {
|
||||||
|
dataArr.forEach(d => {
|
||||||
|
const point = new BMapGL.Point(d.position[0], d.position[1])
|
||||||
|
const marker = new BMapGL.Marker3D(
|
||||||
|
// 坐标
|
||||||
|
point,
|
||||||
|
// 高度,默认8000
|
||||||
|
d.height ? d.height : 8000,
|
||||||
|
// 自定义样式
|
||||||
|
{
|
||||||
|
// 大小,默认50
|
||||||
|
size: d.size ? d.size : 50,
|
||||||
|
// 形状,默认圆形
|
||||||
|
shape: 'BMAP_SHAPE_CIRCLE',
|
||||||
|
// 填充颜色
|
||||||
|
fillColor: d.fillColor ? d.fillColor : '#006600',
|
||||||
|
// 填充透明度
|
||||||
|
fillOpacity: 0.5
|
||||||
|
}
|
||||||
|
)
|
||||||
|
marker.addEventListener('click', () => {
|
||||||
|
emits('markerClick', d.position)
|
||||||
|
})
|
||||||
|
bMap.value.addOverlay(marker)
|
||||||
|
|
||||||
|
bMapPointArr.value.push(point)
|
||||||
|
})
|
||||||
|
|
||||||
|
setFitView()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 渲染 3D图标标记
|
||||||
|
* @param dataArr
|
||||||
|
*/
|
||||||
|
const render3DIconMarker = (dataArr) => {
|
||||||
|
dataArr.forEach(d => {
|
||||||
|
const point = new BMapGL.Point(d.position[0], d.position[1])
|
||||||
|
const marker = new BMapGL.Marker3D(
|
||||||
|
// 坐标
|
||||||
|
point,
|
||||||
|
// 高度,默认8000
|
||||||
|
d.height ? d.height : 8000,
|
||||||
|
// 自定义样式
|
||||||
|
{
|
||||||
|
// 大小,默认50
|
||||||
|
size: d.size ? d.size : 50,
|
||||||
|
// 图标对象
|
||||||
|
icon: new BMapGL.Icon(d.img,
|
||||||
|
new BMapGL.Size(d.imgWidth ? d.imgWidth : 40, d.imgHeight ? d.imgHeight : 40)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
marker.addEventListener('click', () => {
|
||||||
|
emits('markerClick', d.position)
|
||||||
|
})
|
||||||
|
bMap.value.addOverlay(marker)
|
||||||
|
|
||||||
|
bMapPointArr.value.push(point)
|
||||||
|
})
|
||||||
|
|
||||||
|
setFitView()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 渲染 线
|
||||||
|
* @param dataArr
|
||||||
|
* @param option
|
||||||
|
*/
|
||||||
|
const renderPolyline = (dataArr, option = {}) => {
|
||||||
|
dataArr.forEach(d => {
|
||||||
|
bMapPointArr.value.push(new BMapGL.Point(d.position[0], d.position[1]))
|
||||||
|
})
|
||||||
|
|
||||||
|
const polyline = new BMapGL.Polyline(bMapPointArr.value, {
|
||||||
|
stokeStyle: 'solid',
|
||||||
|
strokeColor: option.strokeColor || 'blue',
|
||||||
|
strokeWeight: option.strokeWeight || 2,
|
||||||
|
strokeOpacity: option.strokeOpacity || 0.5
|
||||||
|
})
|
||||||
|
bMap.value.addOverlay(polyline)
|
||||||
|
|
||||||
|
setFitView()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 渲染 圆
|
||||||
|
* @param position
|
||||||
|
* @param radius
|
||||||
|
* @param option
|
||||||
|
*/
|
||||||
|
const renderCircle = (position, radius, option = {}) => {
|
||||||
|
const point = new BMapGL.Point(position[0], position[1])
|
||||||
|
bMapPointArr.value.push(point)
|
||||||
|
|
||||||
|
const circle = new BMapGL.Circle(
|
||||||
|
point,
|
||||||
|
radius ? radius : 500,
|
||||||
|
{
|
||||||
|
strokeColor: option.strokeColor || 'blue',
|
||||||
|
strokeWeight: option.strokeWeight || 2,
|
||||||
|
strokeOpacity: option.strokeOpacity || 0.5
|
||||||
|
})
|
||||||
|
bMap.value.addOverlay(circle)
|
||||||
|
|
||||||
|
setFitView()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 渲染 面
|
||||||
|
* @param dataArr
|
||||||
|
* @param option
|
||||||
|
*/
|
||||||
|
const renderPolygon = (dataArr, option = {}) => {
|
||||||
|
dataArr.forEach(d => {
|
||||||
|
bMapPointArr.value.push(new BMapGL.Point(d.position[0], d.position[1]))
|
||||||
|
})
|
||||||
|
|
||||||
|
const polygon = new BMapGL.Polygon(bMapPointArr.value, {
|
||||||
|
stokeStyle: 'solid',
|
||||||
|
strokeColor: option.strokeColor || 'blue',
|
||||||
|
strokeWeight: option.strokeWeight || 2,
|
||||||
|
strokeOpacity: option.strokeOpacity || 0.5,
|
||||||
|
fillColor: option.fillColor || 'blue',
|
||||||
|
fllOpacity: option.fllOpacity || 0.5
|
||||||
|
})
|
||||||
|
bMap.value.addOverlay(polygon)
|
||||||
|
|
||||||
|
setFitView()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置 视图级别
|
||||||
|
* @param point
|
||||||
|
*/
|
||||||
|
const setFitView = (point) => {
|
||||||
|
if (!point) {
|
||||||
|
const viewPort = bMap.value.getViewport(bMapPointArr.value)
|
||||||
|
point = new BMapGL.Point(viewPort.center.lng, viewPort.center.lat)
|
||||||
|
}
|
||||||
|
bMap.value.centerAndZoom(point, props.zoom)
|
||||||
|
|
||||||
|
// 3D视图
|
||||||
|
if (props.viewMode === '3D') {
|
||||||
|
// 地图旋转角度
|
||||||
|
bMap.value.setHeading(props.rotationAngle)
|
||||||
|
// 地图倾斜角度
|
||||||
|
bMap.value.setTilt(props.tiltAngle)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 渲染 信息窗体
|
||||||
|
* @param dataArr
|
||||||
|
*/
|
||||||
|
const renderInfoWindow = (dataArr) => {
|
||||||
|
dataArr.forEach(d => {
|
||||||
|
bMapInfoWindowObj.value[d.position] = new BMapGL.InfoWindow(
|
||||||
|
d.content.join('<br>'),
|
||||||
|
{
|
||||||
|
title: d.title,
|
||||||
|
width: d.width ? d.width : 250,
|
||||||
|
height: d.height ? d.height : 100
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打开 信息窗体
|
||||||
|
* @param position
|
||||||
|
*/
|
||||||
|
const openInfoWindow = (position) => {
|
||||||
|
const infoWindow = bMapInfoWindowObj.value[position]
|
||||||
|
if (infoWindow) {
|
||||||
|
bMap.value.openInfoWindow(infoWindow, new BMapGL.Point(position[0], position[1]))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清理 覆盖物
|
||||||
|
*/
|
||||||
|
const clearOverlay = () => {
|
||||||
|
bMap.value.clearOverlays()
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
init()
|
||||||
|
})
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
bMap.value && bMap.value.destroy()
|
||||||
|
})
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
renderMarker,
|
||||||
|
renderIconMarker,
|
||||||
|
render3DCircleMarker,
|
||||||
|
render3DIconMarker,
|
||||||
|
renderPolyline,
|
||||||
|
renderCircle,
|
||||||
|
renderPolygon,
|
||||||
|
renderInfoWindow,
|
||||||
|
openInfoWindow,
|
||||||
|
clearOverlay
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less">
|
||||||
|
.bMap {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 800px;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,130 @@
|
||||||
|
<template>
|
||||||
|
<b-map ref="map" api-key="NtTydKuftIVXAy526uWXZoHS86lg0KeW" @complete="handleComplete"
|
||||||
|
@marker-click="handleMarkerClick"></b-map>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="exmBMap">
|
||||||
|
import BMap from '@/components/Map/bMap/index.vue'
|
||||||
|
|
||||||
|
const map = ref(null)
|
||||||
|
|
||||||
|
|
||||||
|
const handleComplete = () => {
|
||||||
|
console.log('complete')
|
||||||
|
|
||||||
|
// 点标记
|
||||||
|
map.value.renderMarker(
|
||||||
|
[
|
||||||
|
{
|
||||||
|
position: [116.39, 39.9],
|
||||||
|
title: 'BI'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
position: [116.33, 39.5],
|
||||||
|
title: 'BI-2'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
)
|
||||||
|
// 图标点标记
|
||||||
|
// map.value.renderIconMarker(
|
||||||
|
// [
|
||||||
|
// {
|
||||||
|
// position: [116.39, 39.9],
|
||||||
|
// title: 'BI',
|
||||||
|
// img: 'https://webmap0.bdimg.com/image/api/bg.png',
|
||||||
|
// imgWidth: 40,
|
||||||
|
// imgHeight: 40
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// position: [116.33, 39.5],
|
||||||
|
// title: 'BI-2',
|
||||||
|
// img: 'https://webmap0.bdimg.com/image/api/bg.png'
|
||||||
|
// }
|
||||||
|
// ]
|
||||||
|
// )
|
||||||
|
// 3D圆点标记
|
||||||
|
// map.value.render3DCircleMarker(
|
||||||
|
// [
|
||||||
|
// {
|
||||||
|
// position: [116.39, 39.9],
|
||||||
|
// height: 7000,
|
||||||
|
// size: 40
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// position: [116.33, 39.5],
|
||||||
|
// height: 7000,
|
||||||
|
// size: 40
|
||||||
|
// }
|
||||||
|
// ]
|
||||||
|
// )
|
||||||
|
// 3D图标标记
|
||||||
|
// map.value.render3DIconMarker(
|
||||||
|
// [
|
||||||
|
// {
|
||||||
|
// position: [116.39, 39.9],
|
||||||
|
// height: 7000,
|
||||||
|
// size: 40,
|
||||||
|
// img: 'https://webmap0.bdimg.com/image/api/bg.png',
|
||||||
|
// imgWidth: 40,
|
||||||
|
// imgHeight: 40
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// position: [116.33, 39.5],
|
||||||
|
// height: 7000,
|
||||||
|
// img: 'https://webmap0.bdimg.com/image/api/bg.png'
|
||||||
|
// }
|
||||||
|
// ]
|
||||||
|
// )
|
||||||
|
// 面
|
||||||
|
// map.value.renderPolygon(
|
||||||
|
// [
|
||||||
|
// {
|
||||||
|
// position: [116.39, 39.9]
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// position: [116.47, 39.8]
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// position: [116.46, 39.7]
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// position: [116.35, 39.6]
|
||||||
|
// }
|
||||||
|
// ]
|
||||||
|
// )
|
||||||
|
// 信息窗体
|
||||||
|
map.value.renderInfoWindow(
|
||||||
|
[
|
||||||
|
{
|
||||||
|
position: [116.39, 39.9],
|
||||||
|
title: 'Snowy-小诺开源技术',
|
||||||
|
content: [
|
||||||
|
"<div style='padding:0'>",
|
||||||
|
"网站 : https://www.xiaonuo.vip",
|
||||||
|
"Snowy是一款国内首例国产密码算法加密框架,采用Vue3.0+AntDesignVue3.0+SpringBoot2.8前后分离技术打造,技术框架与密码的结合,让前后分离‘密’不可分!</div>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
position: [116.33, 39.5],
|
||||||
|
title: 'Snowy-小诺开源技术',
|
||||||
|
content: [
|
||||||
|
"<div style='padding:0'>",
|
||||||
|
"网站 : https://www.xiaonuo.vip",
|
||||||
|
"Snowy是一款国内首例国产密码算法加密框架,采用Vue3.0+AntDesignVue3.0+SpringBoot2.8前后分离技术打造,技术框架与密码的结合,让前后分离‘密’不可分!</div>"
|
||||||
|
],
|
||||||
|
width: 300,
|
||||||
|
height: 200
|
||||||
|
}
|
||||||
|
]
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleMarkerClick = (position) => {
|
||||||
|
map.value.openInfoWindow(position)
|
||||||
|
|
||||||
|
console.log('marker click', position)
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less">
|
||||||
|
</style>
|
Loading…
Reference in New Issue