发布于2021-05-30 11:54 阅读(1139) 评论(0) 点赞(0) 收藏(4)
OpenLayers 是一个专为Web GIS 客户端开发提供的JavaScript 类库包,用于实现标准格式发布的地图数据访问。从OpenLayers2.2版本以后,OpenLayers已经将所用到的Prototype.js组件整合到了自身当中,并不断在Prototype.js的基础上完善面向对象的开发,Rico用到地方不多,只是在OpenLayers.Popup.AnchoredBubble类中圆角化DIV。
官网地址:https://openlayers.org/
特征
我这里下载的是高德地图的Arcgis瓦片,使用的太乐地图下载器下载的,安装破解教程前往==>太乐地图下载器5.0.5(破解版)
下载完毕后的目录如下:
ol.css
和ol.js
两个文件我们可以到官网去下载源文件。
输入网址,进入官网:
找到Get the Code
菜单,下载代码。
选择最新版本v6.5.0版本的压缩包v6.5.0.zip
。
将文件解压到本地,ol.css
在css文件夹
内,ol.js
在build
文件夹内。
创建一个文件夹,将下载的瓦片复制到该文件夹里面,将上述的ol.js和ol.css文件分别复制出来:
然后在新建一个html文件粘贴下述代码,引入下载的ol.css
和ol.js
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>加载ArcGIS地图瓦片</title>
<link rel="stylesheet" href="css/ol.css">
<script src="js/ol.js"></script>
</head>
<body>
<div id="map"></div>
<script type="text/javascript">
// 设置地图中心,此处进行坐标转换, 把EPSG:4326(经纬度坐标),转换为EPSG:3857(WGS84网络墨卡托(辅助球))坐标,因为ol默认使用的是EPSG:3857坐标
let centerPos = ol.proj.transform([117.27, 31.68], 'EPSG:4326', 'EPSG:3857');
//创建地图
let map = new ol.Map({
view: new ol.View({
center: centerPos,//地图中心位置
zoom: 10,//地图初始层级
maxZoom: 15,
minZoom: 9
}),
target: 'map'
});
map.on('click', function (e) {
// alert('X ; '+ e.clientX + 'Y: '+e.clientY);
let t = ol.proj.transform(map.getEventCoordinate(event), 'EPSG:3857', 'EPSG:4326');
alert("鼠标点击处的经纬度:" + t);
});
//给8位字符串文件名补0
function zeroFill(num, len, radix) {
var str = num.toString(radix || 10);
while (str.length < len) {
str = "0" + str;
}
return str;
}
// ol.source.XYZ添加瓦片地图的层
let tileLayer = new ol.layer.Tile({
source: new ol.source.XYZ({
tileUrlFunction: function (coordinate) {
//alert(coordinate[0] + " X= " + coordinate[1] + " Y= " + coordinate[2]);
var x = 'C' + zeroFill(coordinate[1], 8, 16);
var y = 'R' + zeroFill(-coordinate[2] - 1, 8, 16);
var z = 'L' + zeroFill(coordinate[0], 2, 10);
return 'hefei/' + z + '/' + y + '/' + x + '.png';//这里可以修改地图路径
},
projection: 'EPSG:3857'
})
});
map.addLayer(tileLayer);//添加到map里面
</script>
</body>
</html>
在浏览器上访问html文件:
上面的代码里有点击事件,鼠标点击地图可以显示经纬度,下面我们再来说说在地图上绘图功能
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>绘图</title>
<link rel="stylesheet" href="css/ol.css" type="text/css">
<script src="js/ol.js"></script>
</head>
<body>
<div id="map"></div>
<label>Shape type </label>
<select id="type">
<option value="Point">Point</option>
<option value="LineString">LineString</option>
<option value="Polygon">Polygon</option>
<option value="Circle">Circle</option>
<option value="Square">Square</option>
<option value="Box">Box</option>
<option value="None">None</option>
</select>
<script>
let centerPos = ol.proj.transform([117.29, 31.85], 'EPSG:4326', 'EPSG:3857');
let vectorSource = new ol.source.Vector();
let vectorLayer = new ol.layer.Vector({
source: vectorSource
});
//给8位字符串文件名补0
function zeroFill(num, len, radix) {
var str = num.toString(radix || 10);
while (str.length < len) {
str = "0" + str;
}
return str;
}
let map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.XYZ({
tileUrlFunction: function (coordinate) {
var x = 'C' + zeroFill(coordinate[1], 8, 16);
var y = 'R' + zeroFill(-coordinate[2] - 1, 8, 16);
var z = 'L' + zeroFill(coordinate[0], 2, 10);
return 'hefei/' + z + '/' + y + '/' + x + '.png';//这里可以修改地图路径
},
projection: 'EPSG:3857'
})
}),
vectorLayer
],
view: new ol.View({
center: centerPos,//地图中心位置
zoom: 11,//地图初始层级
maxZoom: 17,
minZoom: 9
}),
});
let typeSelect = document.getElementById('type');
let draw;
function addInteraction() {
let type = typeSelect.value;
if (type !== 'None') {
let geometryFunction;
switch (type) {
case "Square":
type = 'Circle';
// 生成规则四边形的图形函数
geometryFunction = ol.interaction.Draw.createRegularPolygon(4);
break;
case "Box":
type = 'Circle';
// 生成盒形状的图形函数
geometryFunction = ol.interaction.Draw.createBox();
break;
default:
break;
}
// 初始化Draw绘图控件
draw = new ol.interaction.Draw({
source: vectorSource,
type: type,
geometryFunction: geometryFunction
});
// 将Draw绘图控件加入Map对象
map.addInteraction(draw);
}
}
typeSelect.addEventListener('change', () => {
// 移除Draw绘图控件
map.removeInteraction(draw);
addInteraction();
});
addInteraction();
</script>
</body>
</html>
Shift + 鼠标左键:手绘(free hand)模式
作者:Bhbvhbbgg
链接:http://www.qianduanheidong.com/blog/article/116002/1c71e4a8141b38afec01/
来源:前端黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 前端黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-3
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!