共计 2893 个字符,预计需要花费 8 分钟才能阅读完成。
一. 控件简介
- 归属控件(Attribution):展现地图资源的版权或归属,默认退出到地图中。
- 全屏控件(FullScreen):管制地图全屏展现。
- 坐标拾取控件(MousePosition):显示鼠标所在地图地位的坐标。
- 鹰眼控件(OverviewMap):地图的一个概览图。
- 比例尺控件(ScaleLine):地图比例尺。
- 旋转控件(Rotate):管制地图旋转,默认退出到地图中,alt+shift+ 左键旋转地图。
- 缩放控件(Zoom):管制地图缩放,默认退出到地图中。
- 滑块缩放控件(ZoomSlider):以滑块的模式缩放地图。
- 缩放至特定地位控件(ZoomToExtent):将地图缩放至特定地位。
二. 控件的应用
2.1 归属控件
2.2 全屏控件
map.current.addControl(new FullScreen());
2.3 坐标拾取控件
map.current.addControl(new MousePosition({ | |
// 设置数据格式 | |
coordinateFormat: createStringXY(6), | |
// 设置空间参考零碎为 'EPSG:4326' | |
projection: 'EPSG:4326' | |
})); |
2.4 鹰眼控件
map.current.addControl(new OverviewMap({ | |
// 概览图图层 | |
layers: [new TileLayer({ source: new OSM() })], | |
// 管制鹰眼控件开展 | |
collapsed: false | |
})); |
2.5 比例尺控件
map.current.addControl(new ScaleLine());
2.6 旋转控件
2.7 缩放控件
2.8 滑块缩放控件
map.current.addControl(new ZoomSlider());
2.9 缩放至特定地位控件
map.current.addControl(new ZoomToExtent({ | |
extent: [ | |
// 地位矩形的左下角坐标 | |
12667718, 2562800, | |
// 地位矩形的右上角坐标 | |
12718359, 2597725 | |
] | |
})) |
三. 移除默认退出到地图中的控件
map.current = new Map({ | |
// 挂载到 id 为 map 的 div 容器上 | |
target: 'map', | |
// 设置地图图层 | |
layers: [ | |
// 创立一个应用 OpenStreetMap 地图源的瓦片图层 | |
new TileLayer({source: new OSM() }) | |
], | |
// 设置地图视图 | |
view: new View({ | |
// 设置空间参考零碎为 'EPSG:3857' | |
projection: 'EPSG:3857', | |
// 地图的显示核心 | |
center: fromLonLat([0, 0]), | |
// 地图的显示层级 | |
zoom: 3 | |
}), | |
controls: defaults({ | |
// 移除归属控件 | |
attribution: false, | |
// 移除缩放控件 | |
zoom: false, | |
// 移除旋转控件 | |
rotate: false | |
}) | |
}) |
四. 批改控件款式
OpenLayers 为承载控件的各个 DOM 元素都设置了类名,通过 CSS 的类选择器就能够批改指定的控件款式。
import React, {useEffect, useRef} from 'react'; | |
import {Map, View} from 'ol'; | |
import TileLayer from 'ol/layer/Tile'; | |
import {defaults, FullScreen, MousePosition, OverviewMap, ScaleLine, ZoomSlider, ZoomToExtent} from 'ol/control'; | |
import {createStringXY} from 'ol/coordinate'; | |
import {fromLonLat} from 'ol/proj'; | |
import OSM from 'ol/source/OSM'; | |
import 'ol/ol.css'; | |
import styles from './index.less'; | |
export default function Index() { | |
// 地图 | |
const map = useRef<any>(); | |
useEffect(() => { | |
// 初始化地图 | |
initMap();}) | |
/** | |
* 初始化地图 | |
*/ | |
const initMap = () => { | |
map.current = new Map({ | |
// 挂载到 id 为 map 的 div 容器上 | |
target: 'map', | |
// 设置地图图层 | |
layers: [ | |
// 创立一个应用 OpenStreetMap 地图源的瓦片图层 | |
new TileLayer({source: new OSM() }) | |
], | |
// 设置地图视图 | |
view: new View({ | |
// 设置空间参考零碎为 'EPSG:3857' | |
projection: 'EPSG:3857', | |
// 地图的显示核心 | |
center: fromLonLat([0, 0]), | |
// 地图的显示层级 | |
zoom: 3 | |
}), | |
controls: defaults({ | |
// 移除归属控件 | |
// attribution: false, | |
// 移除缩放控件 | |
// zoom: false, | |
// 移除旋转控件 | |
// rotate: false | |
}).extend([ | |
// 增加全屏控件 | |
new FullScreen(), | |
// 增加坐标拾取控件 | |
new MousePosition({ | |
// 设置数据格式 | |
coordinateFormat: createStringXY(6), | |
// 设置空间参考零碎为 'EPSG:4326' | |
projection: 'EPSG:4326' | |
}), | |
// 增加鹰眼控件 | |
new OverviewMap({ | |
// 概览图图层 | |
layers: [new TileLayer({ source: new OSM() })], | |
// 管制鹰眼控件开展 | |
collapsed: false | |
}), | |
// 增加比例尺控件 | |
new ScaleLine(), | |
// 滑块缩放控件 | |
new ZoomSlider(), | |
// 缩放至特定地位控件 | |
new ZoomToExtent({ | |
extent: [ | |
// 地位矩形的左下角坐标 | |
12667718, 2562800, | |
// 地位矩形的右上角坐标 | |
12718359, 2597725 | |
] | |
}) | |
]) | |
}) | |
} | |
return (<div> | |
<div id='map' className={styles.map}></div> | |
</div>) | |
} |
.map { | |
width: 100vw; | |
height: 100vh; | |
:global { | |
/* 批改滑块缩放控件的款式 */ | |
.ol-zoomslider {top: 105px;} | |
/* 批改鹰眼控件的款式 */ | |
.ol-overviewmap {bottom: 40px;} | |
/* 批改坐标拾取控件的款式 */ | |
.ol-mouse-position { | |
top: initial; | |
bottom: 0px; | |
right: 200px; | |
} | |
/* 批改旋转控件的款式 */ | |
.ol-rotate {right: 40px;} | |
} | |
} |
参考文章
OpenLayers 教程三:地图控件之缩放控件
OpenLayers 教程四:地图控件之归属控件和全屏控件
OpenLayers 教程五:地图控件之坐标拾取控件和鹰眼控件
OpenLayers 教程六:地图控件之旋转控件与比例尺控件
正文完