0
点赞
收藏
分享

微信扫一扫

Openlayer:学习笔记之简单的ol.View应用

树下的老石头 2022-03-12 阅读 69


限制地图范围

在日常开发中,我们有可能只需要定位某一区域的地图,无需显示整个地图,从而实现对某位置的聚焦关注,并且可以减少前端和后台地图的数据交互。而这如何实现呢?

在下例中,我们将实现显示经度29°-31°,纬度102°-104°之间的地图。

<!Doctype html>
<html lang="ch">
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
<meta content=always name=referrer>
<title>OpenLayers 地图示例</title>
<link href="ol.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="ol.js" charset="utf-8"></script>
</head>
<body>
<div id="map" style="width: 100%;height: 800px"></div>
<script>
new ol.Map({
layers: [
new ol.layer.Tile({source: new ol.source.OSM()})
],
view: new ol.View({
// 设置地图中心范围
extent: [102, 29, 104, 31],
// 设置成都为地图中心
center: [104.06, 30.67],
projection: 'EPSG:4326',
zoom: 10
}),
target: 'map'
});
</script>
</body>

</html>

Openlayer:学习笔记之简单的ol.View应用_缩放

Openlayer:学习笔记之简单的ol.View应用_html_02

实现的方法就是添加了extent属性。extent参数类型为[minX, minY, maxX, maxY]的ol.Extent。

Openlayer:学习笔记之简单的ol.View应用_缩放_03

我们可以看到在API中,对其进行了清晰的表述:任何超过extent的内容在地图上都不会显示。

限制地图缩放级别

当我们有些地图不希望用户看到是,可以通过设置缩放级别进行限制。

在下例中,我们将会实现10-14级别的缩放。

<!Doctype html>
<html lang="ch">
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
<meta content=always name=referrer>
<title>OpenLayers 地图示例</title>
<link href="ol.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="ol.js" charset="utf-8"></script>
</head>
<body>
<div id="map" style="width: 100%;height: 800px"></div>
<script>
new ol.Map({
layers: [
new ol.layer.Tile({source: new ol.source.OSM()})
],
view: new ol.View({
// 设置成都为地图中心
center: [104.06, 30.67],
projection: 'EPSG:4326',
zoom: 10,
// 限制地图缩放最大级别为14,最小级别为10
minZoom: 10,
maxZoom: 14
}),
target: 'map'
});
</script>
</body>

</html>

Openlayer:学习笔记之简单的ol.View应用_html_04

Openlayer:学习笔记之简单的ol.View应用_缩放_05

自适配区域

在实际开发中,我们可能会有一些地图查找和标注的业务,比如查看成都市锦江区。而此时,地图所在的区域可能是北京,我们需要让地图直接定位到锦江区,并且最大化完全的显示这块区域。

下例中,我们将让地图最大化完全显示成都:

<!Doctype html>
<html lang="ch">
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
<meta content=always name=referrer>
<title>OpenLayers 地图示例</title>
<link href="ol.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="ol.js" charset="utf-8"></script>
</head>
<body>
<div id="map" style="width: 100%;height: 800px"></div>
<input type="button" value="显示成都" onclick="fitToChengdu();" />
<script>
var map = new ol.Map({
layers: [
new ol.layer.Tile({source: new ol.source.OSM()})
],
view: new ol.View({
// 设置成都为地图中心
center: [104.06, 30.67],
projection: 'EPSG:4326',
zoom: 10
}),
target: 'map'
});

function fitToChengdu() {
// 让地图最大化完全地显示区域[104, 30.6, 104.12, 30.74]
map.getView().fit([104, 30.6, 104.12, 30.74], map.getSize());
}
</script>
</body>

</html>

初始:

Openlayer:学习笔记之简单的ol.View应用_css_06

点击显示成都后:

Openlayer:学习笔记之简单的ol.View应用_css_07

在API中,是这样对fit方法描述的:

Openlayer:学习笔记之简单的ol.View应用_css_08

大概意思就是根据你所提供的地图尺寸大小和边界,进行自适应操作。



举报

相关推荐

0 条评论