mapboxgl-tools
Version:
基于mapboxgl的一些实用工具
484 lines (420 loc) • 268 kB
Markdown
# mapboxgl-tools
> 基于mapboxgl的一些工具组件
## Installation
```sh
npm install mapboxgl-tools
```
## Modules
```js
Geoserver
Contextmenu
```
### 1.Geoserver
> 自定义栅格瓦片组件(基于vue2.x),记忆缓存
| Property | Type | 默认值 | Description |
| ----- | ------------- | ------------- | ------------------------ |
| map | Object | null | mapboxgl实例对象 |
| itemClass | String | | 单个geoserver展示class |
| addClass | String | | 添加按钮class |
| addBtnProps | Object | { type: 'primary', ghost: false, size: 'small', text: '新增图层' } | 添加按钮属性 |
```js
<template>
<div>
<section style="width: 90%; height: 700px" id="map"></section>
<Geoservers v-if="map" :map="map" itemClass="geo-item" addClass="add-btn" />
</div>
</template>
<script>
import { Geoserver } from 'mapboxgl-tools'
export default {
components: {
Geoserver,
},
data() {
return {
map: null,
}
},
mounted() {
this.map = new mapboxgl.Map({
container: 'map',
zoom: 15,
center: [114.26697720786854,30.63091896813168],
transformRequest: (url) => {
if (
url.includes('4326')
) {
url = url.toLowerCase().replace(/(bbox=)([^&]+)/, ($0, $1, $2) => {
let points = $2.split(',')
let leftLngLat = onMercatorToLnglat(points[0], points[1])
let rightLngLat = onMercatorToLnglat(points[2], points[3])
return `${$1}${leftLngLat[0]},${leftLngLat[1]},${rightLngLat[0]},${rightLngLat[1]}`
})
}
return {
url,
}
},
})
},
}
</script>
```
*组件效果*
![img][img-geoserver]
### 2.Contextmenu
> 右键菜单项目组件,基于vue2.x
| Property | Type | 默认值 | Description |
| ----- | ------------- | ------------- | ------------------------ |
| menus | Array | [] | 菜单选项{ icons: [], name: '', click: Function, children: null,[] } |
| left | Number | 0 | 定位left |
| top | Number | 0 | 定位top |
```js
<template>
<div>
<Contextmenu :menus='menus' :top='100' :left='200' />
</div>
</template>
<script>
import { Contextmenu } from 'mapboxgl-tools'
export default {
components: {
Contextmenu,
},
data() {
return {
menus: [
{
name: '批量平移挪点',
click: () => { alert(1) },
},
{
icons: [
'M934.184927 199.723787 622.457206 511.452531l311.727721 311.703161c14.334473 14.229073 23.069415 33.951253 23.069415 55.743582 0 43.430138-35.178197 78.660524-78.735226 78.660524-21.664416 0-41.361013-8.865925-55.642275-23.069415L511.149121 622.838388 199.420377 934.490384c-14.204513 14.20349-33.901111 23.069415-55.642275 23.069415-43.482327 0-78.737272-35.230386-78.737272-78.660524 0-21.792329 8.864902-41.513486 23.094998-55.743582l311.677579-311.703161L88.135828 199.723787c-14.230096-14.255679-23.094998-33.92567-23.094998-55.642275 0-43.430138 35.254945-78.762855 78.737272-78.762855 21.741163 0 41.437761 8.813736 55.642275 23.069415l311.727721 311.727721L822.876842 88.389096c14.281261-14.255679 33.977859-23.069415 55.642275-23.069415 43.557028 0 78.735226 35.332716 78.735226 78.762855C957.254342 165.798117 948.5194 185.468109 934.184927 199.723787'
],
name: '取消操作',
click: () => { alert(2) },
},
{
icons: '',
name: '其他挪点',
children: [
{
icons: '',
name: '附属挪点',
click: () => alert(45)
}
]
}
]
}
},
}
</script>
```
*组件效果*

### 3.GeoserverAside
> 继承Geoserver组件,快速弹窗
| Property | Type | 默认值 | Description |
| ----- | ------------- | ------------- | ------------------------ |
| map | Object | null | mapboxgl实例对象 |
| itemClass | String | | 单个geoserver展示class |
| addClass | String | | 添加按钮class |
| addBtnProps | Object | { type: 'primary', ghost: false, size: 'small', text: '新增图层' } | 添加按钮属性 |
| left | Number | 0 | 定位left |
| top | Number | 0 | 定位top |
```js
<template>
<div>
<GeoserverAside v-if="map" :map="map" itemClass="geo-item" addClass="add-btn" />
</div>
</template>
<script>
import { GeoserverAside } from 'mapboxgl-tools'
export default {
components: {
GeoserverAside,
},
data() {
return {
}
},
}
</script>
```
### 4.PickCoordControl
> 拾取坐标mapboxgl控制器
| Property | Type | 默认值 | Description |
| ----- | ------------- | ------------- | ------------------------ |
| title | String | 拾取坐标 | 入口按钮title |
| onCopy | Function | | 复制完成坐标之后的回调 |
```js
<template>
<section id="map" style="width: 90%; height: 700px"></section>
</template>
<script>
import { PickCoordControl, transformRequest4326 } from 'mapboxgl-tools'
export default {
mounted() {
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/light-v11',
zoom: 18,
center: [114.26697720786854,30.63091896813168],
transformRequest: transformRequest4326,
})
map.addControl(new PickCoordControl({ cb: ()=>message.success('复制成功') }), 'top-right')
}
}
</script>
```
*控制器效果*

### 5.MouseRectControl
> 框选控制器
| Property | Type | 默认值 | Description |
| ----- | ------------- | ------------- | ------------------------ |
| title | String | 框选 | 入口按钮title |
| onClose | Function | | 关闭控制器的回调 |
| onOpen | Function | | 打开控制器的回调 |
| onEnd | Function | | 完成框选的回调 |
| onMousemove | Function | | 框选拖拽的回调 |
```js
<template>
<section id="map" style="width: 90%; height: 700px"></section>
</template>
<script>
import { MouseRectControl, transformRequest4326 } from 'mapboxgl-tools'
export default {
mounted() {
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/light-v11',
zoom: 18,
center: [114.26697720786854,30.63091896813168],
transformRequest: transformRequest4326,
})
map.addControl(new MouseRectControl({
onClose: () => alert('close'),
onOpen: () => alert('open')
}), 'top-right')
}
}
</script>
```
*控制器效果*

### 6.MeasureDistanceControl
> 测量距离mapboxgl控制器
| Property | Type | 默认值 | Description |
| ----- | ------------- | ------------- | ------------------------ |
| title | String | 测量距离 | 入口按钮title |
```js
<template>
<section id="map" style="width: 90%; height: 700px"></section>
</template>
<script>
import { MeasureDistanceControl, transformRequest4326 } from 'mapboxgl-tools'
export default {
mounted() {
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/light-v11',
zoom: 18,
center: [114.26697720786854,30.63091896813168],
transformRequest: transformRequest4326,
})
map.addControl(new MeasureDistanceControl(), 'top-right')
}
}
</script>
```
*控制器效果*

### 7.MeasureAreaControl
> 测量面积mapboxgl控制器
| Property | Type | 默认值 | Description |
| ----- | ------------- | ------------- | ------------------------ |
| title | String | 测量面积 | 入口按钮title |
```js
<template>
<section id="map" style="width: 90%; height: 700px"></section>
</template>
<script>
import { MeasureAreaControl, transformRequest4326 } from 'mapboxgl-tools'
export default {
mounted() {
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/light-v11',
zoom: 18,
center: [114.26697720786854,30.63091896813168],
transformRequest: transformRequest4326,
})
map.addControl(new MeasureAreaControl(), 'top-right')
}
}
</script>
```
*控制器效果*
![img][img-measurearea]
### 8.PositionControl
> mapboxgl定位撒点控制器
| Property | Type | 默认值 | Description |
| ----- | ------------- | ------------- | ------------------------ |
| title | String | 定位撒点 | 入口按钮title |
| layout | String | { icon-size: 0.2, icon-anchor: 'bottom', icon-image: ['case', ['get', 'current'], IMAGE_POSCONTROL_ACT, IMAGE_POSCONTROL_NOR ] } | mapboxgl-layout, 当前的定位点current属性为true |
| paint | String | {} | mapboxgl-paint |
| onMini | Function | | 有重复数据被过滤掉时候的回调 |
```js
<template>
<section id="map" style="width: 90%; height: 700px"></section>
</template>
<script>
import { PositionControl, transformRequest4326 } from 'mapboxgl-tools'
export default {
mounted() {
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/light-v11',
zoom: 18,
center: [114.26697720786854,30.63091896813168],
transformRequest: transformRequest4326,
})
map.addControl(new PositionControl(), 'top-right')
}
}
</script>
```
*控制器效果*

### 9.LayerTreeControl
> 图层集合控制器
| Property | Type | 默认值 | Description |
| ----- | ------------- | ------------- | ------------------------ |
| title | String | 地图图层 | 入口按钮title |
| isAutoShow | Boolean | true | 是否默认展开图层框 |
| titleWidth | Number | 100 | 图层名称(父级)宽度 |
| layers | <font color="#f00">Layer</font>[] | [] | 图层配置 |
| onAfterOrder | Function | | 排序之后的回调,参数({allLayers: 所有图层配置(含未打开的), layers: 打开的图层配置, beforeIdMap: 所有已打开图层按照顺序下beforeId集合}) |
###### <font color="#f00">Layer</font>对象参数
| Property | Type | 默认值 | Description | 父级字段 | 子级字段 |
| ----- | ------------- | ------------- | ------------------------ | ----- | ----- |
| id | String | | 保持唯一,必填! | true | true |
| title | String | | 名称 | true | true |
| checked | Boolean | false | 初次是否选中打开 | false | true |
| radio | Boolean | false | 是否单选,true的时候和同组之间为true的其他图层互斥 | false | true |
| zIndex | Number | 1 | 当前图层的权重,越大权重越高,显示优先级越高 | false | true |
| icon | String/Array | | 图片path,使用<font color=blue>预制的icon</font>,或使用iconfont中图层path的d属性集合| false | true |
| color | String | | 名称颜色 | false | true |
| sourceConfig | Object | { type: 'raster', tileSize: 256 } | mapbox中source的配置文件 | false | true |
| layerConfig | Object | { type: 'raster' } | mapbox中图层的配置文件 | false | true |
| children | Array | [] | 子集 | true | false |
| onChange | Function | | 图层打开/关闭的回调 | false | true |
###### 预制<font color="#f00">icon</font>
| key | Description |
| --- | --- |
| circle | 圆形 |
| eye | 眼睛 |
| eye_close | 眼睛-闭着 |
| rect | 方形 |
| diamond | 菱形 |
| star | 五角星 |
| water | 水滴 |
| loc | 定位点 |
| triable | 三角形 |
| hexagon | 六变形 |
| pentagon | 5变形 |
| tag | 标签 |
| balloon | 气球 |
| layer | 图层 |
| flag | 红旗 |
| pen | 笔 |
| tack | 大头钉 |
```js
<template>
<section id="map" style="width: 90%; height: 700px"></section>
</template>
<script>
import { LayerTreeControl, transformRequest4326 } from 'mapboxgl-tools'
const layerData = [
{
title: '基础地图',
id: 'base',
children: [
{ title: '底图1', id: '1-1', radio: true, checked: true, color: '#f00', icon: 'water', zIndex: 0,
sourceConfig: { tiles: ['自己的模板地址']},
onChange(e) { alert('1-1) },
},
{ title: '底图2', id: '1-2', radio: true, color: '#f00', icon: 'water', zIndex: 1,
sourceConfig: { tiles: ['自己的模板地址']},
onChange(e) { alert('1-2')},
},
{ title: '资料1-3', id: '1-3', color: '#f00', icon: 'rect', zIndex: 0,
sourceConfig: { tiles: ['自己的模板地址']},
onChange(e) { alert('1-3')},
},
]
},
{
title: '基础地图2',
id: 'base2', // children为空或不传值,则过滤之
},
{
title: '参考资料',
id: 'geoserver',
children: [
{ title: '资料2-1', id: '2-1', checked: true, color: '#ff5299', icon: 'circle', zIndex: 2,
sourceConfig: { tiles: ['自己的模板地址']},
},
{ title: '资料2-2', id: '2-2', checked: true, color: '#0f5264', icon: 'circle', zIndex: 3,
sourceConfig: { tiles: ['自己的模板地址']},
},
]
},
{
title: '点图层',
id: 'point',
children: [
{ title: '点-1', id: '3-1', color: '#ff5299', zIndex: 5,
icon: [
"M831.996366 320.007996c0 163.498143-122.598608 298.396611-280.996809 317.596392-3.999955 0.499994-6.99992 3.899956-6.99992 7.899911V992.000363c0 8.7999-3.599959 16.799809-9.399894 22.599744-5.799934 5.799934-13.799843 9.399893-22.599743 9.399893-17.699799 0-31.999637-14.299838-31.999637-31.999637V645.604298c0-3.999955-2.999966-7.399916-6.99992-7.899911C315.002237 618.404607 192.503629 484.106132 192.003634 321.007984 191.403641 144.509989 332.702036 1.511613 509.200032 0.01163 687.19801-1.488353 831.996366 142.310014 831.996366 320.007996z"
],// 使用自定义图标
sourceConfig: { tiles: ['自己的模板地址']},
},
{ title: '点-2', id: '3-2', checked: true, color: '#009', zIndex: 5,
icon: [
"M831.996366 320.007996c0 163.498143-122.598608 298.396611-280.996809 317.596392-3.999955 0.499994-6.99992 3.899956-6.99992 7.899911V992.000363c0 8.7999-3.599959 16.799809-9.399894 22.599744-5.799934 5.799934-13.799843 9.399893-22.599743 9.399893-17.699799 0-31.999637-14.299838-31.999637-31.999637V645.604298c0-3.999955-2.999966-7.399916-6.99992-7.899911C315.002237 618.404607 192.503629 484.106132 192.003634 321.007984 191.403641 144.509989 332.702036 1.511613 509.200032 0.01163 687.19801-1.488353 831.996366 142.310014 831.996366 320.007996z"
],
sourceConfig: { tiles: ['自己的模板地址']},
},
{ title: '点-3', id: '3-3', checked: true, color: '#a08', zIndex: 6,
icon: [
"M831.996366 320.007996c0 163.498143-122.598608 298.396611-280.996809 317.596392-3.999955 0.499994-6.99992 3.899956-6.99992 7.899911V992.000363c0 8.7999-3.599959 16.799809-9.399894 22.599744-5.799934 5.799934-13.799843 9.399893-22.599743 9.399893-17.699799 0-31.999637-14.299838-31.999637-31.999637V645.604298c0-3.999955-2.999966-7.399916-6.99992-7.899911C315.002237 618.404607 192.503629 484.106132 192.003634 321.007984 191.403641 144.509989 332.702036 1.511613 509.200032 0.01163 687.19801-1.488353 831.996366 142.310014 831.996366 320.007996z"
],
sourceConfig: { tiles: ['自己的模板地址']},
},
]
}
]
export default {
mounted() {
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/light-v11',
zoom: 18,
center: [114.26697720786854,30.63091896813168],
transformRequest: transformRequest4326,
})
map.addControl(new LayerTreeControl({
isAutoShow: true,
layers: layerData,
}), 'top-right')
}
}
</script>
```
*图层控件效果*
![img][img-layertree]
[img-geoserver]:data:image/png;base64,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