meface/docs/article/gis/openlayers/43comcontrol.md

238 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 常用控件
date: 2020-10-29
author: ac
tags:
- OpenLayers
categories:
- GIS
---
## 常用控件
<img src="./images/image34567.png" alt="image34567" style="zoom:80%;" />
### 1. 初始化地图
```html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/ol.css" type="text/css">
<style>
.map {
height: 400px;
width: 100%;
}
</style>
<script src="lib/ol.js"></script>
<title>常用控件示例</title>
</head>
<body>
<h2>常用控件示例</h2>
<div id="mouse_position"></div>
<div id="map" class="map"></div>
<div id="scaleline" style="position: relative;height: 50px;"></div>
<script>
var shenzhen = [113.958334, 22.535640];
var map = new ol.Map({
view: new ol.View({
center: ol.proj.fromLonLat(shenzhen),
zoom: 10,
// rotation: Math.PI/6
}),
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
target: "map"
});
</script>
</body>
</html>
```
### 2. 缩放控件
`ol.control.ZoomSlider`用于控制地图的缩放级别。
```javascript
var zoomslider = new ol.control.ZoomSlider();
map.addControl(zoomslider);
```
### 3. 复位(定位)控件
`ol.control.ZoomToExtent`用于将地图视图定位到指定区域,可以实现像书签、收藏等类似的功能。
```javascript
//复位(定位)控件
var initExtent = map.getView().calculateExtent();
var zoomToExtent = new ol.control.ZoomToExtent({
extent: initExtent
});
map.addControl(zoomToExtent);//可以作为复位按钮
```
### 4. 鼠标位置控件
`ol.control.MousePosition`用于显示鼠标所在地图上的位置信息。
```javascript
var mouseControl = new ol.control.MousePosition({
coordinateFormat: ol.coordinate.createStringXY(4) //坐标格式
, projection: 'EPSG:3857' //投影坐标系
, className: 'custom-mouse' //自定义的坐标信息显示样式
, target: document.getElementById("mouse_position") //需要dom对象
, undefinedHTML: '&nbsp' //定义未定义坐标的标记
});
map.addControl(mouseControl);
```
### 5. 比例尺控件
```javascript
//比例尺控件
var scaleLineControl = new ol.control.ScaleLine({
units: "metric",//设置比例尺单位,支持degrees/imperial/us/nautical/metric默认:metric
target: "scaleline",//设置target将控件渲染到地图视图外部,不指定默认在地图左下角
});
map.addControl(scaleLineControl);
```
当`ScaleLine`控件不指定`target`属性时默认在地图视图内部的左下角。
### 6.鹰眼控件
```javascript
//鹰眼控件
var overviewControl = new ol.control.OverviewMap({
layers: [ // 在鹰眼中加载相同坐标系下不同数据源的图层
new ol.layer.Tile({
source: new ol.source.OSM()
})
]
,collapseLabel: "\u00BB" //展开时功能按钮上的标识
,label: "\u00AB" //折叠时功能按钮上的标识
,collapsed: false //初始状态是否展开
});
map.addControl(overviewControl);
```
### 7. 全屏显示控件
```javascript
//全屏显示控件
var fullSreen = new ol.control.FullScreen();
map.addControl(fullSreen);
```
控件的构造器中都提供了自定义样式的`className`属性,控件的位置由`CSS`样式决定。
### 完整代码
```html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/ol.css" type="text/css">
<style>
.map {
height: 400px;
width: 100%;
}
</style>
<script src="lib/ol.js"></script>
<title>常用控件示例</title>
</head>
<body>
<h2>常用控件示例</h2>
<div id="mouse_position"></div>
<div id="map" class="map"></div>
<div id="scaleline" style="position: relative;height: 50px;"></div>
<script>
var shenzhen = [113.958334, 22.535640];
var map = new ol.Map({
view: new ol.View({
center: ol.proj.fromLonLat(shenzhen),
zoom: 10,
// rotation: Math.PI/6
}),
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
target: "map"
});
map.on("click",function (e) {
var point = e.coordinate;
console.log("x:"+point[0]+",y:"+point[1]);
});
//导航控件
var zoomslider = new ol.control.ZoomSlider();
map.addControl(zoomslider);
//复位(定位)控件
var initExtent = map.getView().calculateExtent();
var zoomToExtent = new ol.control.ZoomToExtent({
extent: initExtent
});
map.addControl(zoomToExtent);//可以作为复位按钮
//鼠标位置控件
var mouseControl = new ol.control.MousePosition({
coordinateFormat: ol.coordinate.createStringXY(4) //坐标格式
, projection: 'EPSG:3857' //投影坐标系
, className: 'custom-mouse' //自定义的坐标信息显示样式
, target: document.getElementById("mouse_position") //需要dom对象
, undefinedHTML: '&nbsp' //定义未定义坐标的标记
});
map.addControl(mouseControl);
//比例尺控件
var scaleLineControl = new ol.control.ScaleLine({
units: "metric",//设置比例尺单位,支持degrees/imperial/us/nautical/metric默认:metric
target: "scaleline",//设置target将控件渲染到地图视图外部,不指定默认在地图左下角
});
map.addControl(scaleLineControl);
//鹰眼控件
var overviewControl = new ol.control.OverviewMap({
layers: [ // 在鹰眼中加载相同坐标系下不同数据源的图层
new ol.layer.Tile({
source: new ol.source.OSM()
})
]
,collapseLabel: "\u00BB" //展开时功能按钮上的标识
,label: "\u00AB" //折叠时功能按钮上的标识
,collapsed: false //初始状态是否展开
});
map.addControl(overviewControl);
//全屏显示控件
var fullSreen = new ol.control.FullScreen();
map.addControl(fullSreen);
</script>
</body>
</html>
```