OpenLayers
介绍
OpenLayers 是一个专为 WebGIS 客户端开发提供的 JavaScript 类库包,用于实现标准格式发布的地图数据访问。 简单说,就是用于在网页中实现地图的动态显示和交互。
下载:https://openlayers.org/download/
快速上手
<!DOCTYPE html>
<html lang="en">
<head>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.1.1/css/ol.css"
type="text/css"
/>
<style>
.map {
height: 400px;
width: 100%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.1.1/build/ol.js"></script>
<title>OpenLayers example</title>
</head>
<body>
<h2>My Map</h2>
<div id="map" class="map"></div>
<script type="text/javascript">
var map = new ol.Map({
target: 'map', // 地图容器
layers: [
// 图层组
new ol.layer.Tile({
source: new ol.source.OSM() // 数据源
})
],
view: new ol.View({
center: ol.proj.fromLonLat([37.41, 8.82]), // 视图中心
zoom: 4 // 初始缩放层级
})
})
</script>
</body>
</html>
整个地图看作一个容器(Map),核心为地图图层(Layer),每个图层有对应的数据源(Source),并由地图视图(View)进行地图展示。地图容器上还支持一些与用户交互的控件(Control 和 Interaction),另外,OpenLayers 还支持事件机制。
加载 WMS 服务
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>index</title>
<link rel="stylesheet" href="./openlayers/ol.css" />
<script src="./openlayers/ol.js"></script>
<style>
#map {
width: 100%;
height: 100vh;
}
</style>
</head>
<body>
<div id="map"></div>
<script>
const map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.TileWMS({
url: 'http://xxx/geoserver/xxx/wms', // wms服务地址
params: {
LAYERS: 'xxx:xxx', // 图层
TILED: true
},
serverType: 'geoserver' // 服务类型
})
})
],
view: new ol.View({
// 限制地图范围
// extent: fromLonLat([115.7,39.4,117.4,41.6]),
center: ol.proj.fromLonLat([116.38, 39.9]),
zoom: 11,
// 限制地图缩放级别
minZoom: 6,
maxZoom: 20
// projection: 'EPSG:3857' // 默认投影为 EPSG:3857
}),
controls: [
// 添加层级缩放控件
new ol.control.Zoom(),
// 添加比例尺控件
new ol.control.ScaleLine({
//设置度量单位为米
units: 'metric',
className: 'ol-scale-line'
})
]
})
</script>
</body>
</html>
绘制点线面
openlayers 支持的类型有 Point
, LineString
, LinearRing
, Polygon
, MultiPoint
, MultiLineString
, MultiPolygon
, GeometryCollection
, Circle
在以上代码的基础上接着添加以下代码:
// 添加一个矢量图层
const pointLayer = new ol.layer.Vector({
source: new ol.source.Vector()
})
map.addLayer(pointLayer)
// 添加交互
const drawPoint = new ol.interaction.Draw({
type: 'Point',
source: pointLayer.getSource()
})
map.addInteraction(drawPoint)
首先添加一个矢量图层,接着创建一个交互,注意添加 source: pointLayer.getSource()
用于保存绘制的内容。如果要绘制线、面等其他类型,只需更改ol.interaction.Draw()
中 type 的类型即可。