首页 > 其他分享 >openlayers基础篇2

openlayers基础篇2

时间:2024-10-15 14:21:11浏览次数:17  
标签:map layer ol 基础 style source openlayers new

1.地图事件(实现点击地图新增点,实现飞行视角--漫游以及点击复位)

效果如下(点击三下地依次出现三个点)

<!DOCTYPE html>
<html lang="en">

	<head>
		<meta charset="UTF-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>Document</title>
		<!-- 1.导入ol依赖 -->
		<link rel="stylesheet" href="https://lib.baomitu.com/ol3/4.6.5/ol.css">
		<script src="https://lib.baomitu.com/ol3/4.6.5/ol.js"></script>
		<style>
			.btn {
				position: fixed;
				z-index: 100;
				top: 30px;
				right: 50px;
			}
		</style>

	</head>

	<body>
		<!-- 2.设置地图的挂载点 -->
		<div id="map">

		</div>
		<button class="btn">复位地图</button>
		<script>
			// 3.初始化一个高德图层
			const gaode = new ol.layer.Tile({
				title: "高德地图",
				source: new ol.source.XYZ({
					url: 'https://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
					wrapX: false
				})
			});

			// 4.初始化openlayer地图
			const map = new ol.Map({
				// 将初始化的地图设置到id为map的DOM元素上
				target: "map",
				// 设置图层
				layers: [gaode],
				view: new ol.View({
					center: [114.30, 30.50],
					// 设置地图放大级别
					zoom: 14,
					projection: "EPSG:4326"
				})
			})
			// source-layer
			var source = new ol.source.Vector({})
			var layer = new ol.layer.Vector({
				source
			})
			map.addLayer(layer);

			// 给地图绑定一个点击事件
			map.on("click", (evt) => {
				var {
					coordinate
				} = evt;
				var point = new ol.Feature({
					geometry: new ol.geom.Point(coordinate)
				})
				source.addFeature(point);



				// 实现飞行视角--漫游
				const view = map.getView();
				view.animate({
					center: coordinate
				})
			})


			// 复位按钮
			var btn = document.querySelector(".btn");
			btn.onclick = function() {
				map.getView().animate({
					center: [114.30, 30.50],
					zoom: 6,
					duration: 3000
				})
			}
		</script>

	</body>

</html>

2.加载本地geojson数据

新建一个data文件夹,给下面存放一个map.json的数据文件代码如下

{
	"type":"FeatureCollection",
	 "features":[
		 {
			 "type":"Feature",
			 "geometry":{
				 "type":"Point",
				 "coordinates":[114.30,30.50]
			 }
		 }
	 ]
}
<!DOCTYPE html>
<html lang="en">

	<head>
		<meta charset="UTF-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>Document</title>
		<!-- 1.导入ol依赖 -->
		<link rel="stylesheet" href="https://lib.baomitu.com/ol3/4.6.5/ol.css">
		<script src="https://lib.baomitu.com/ol3/4.6.5/ol.js"></script>
	</head>

	<body>
		<!-- 2.设置地图的挂载点 -->
		<div id="map">

		</div>
		<script>
			// 3.初始化一个高德图层
			const gaode = new ol.layer.Tile({
				title: "高德地图",
				source: new ol.source.XYZ({
					url: 'https://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
					wrapX: false
				})
			});

			// 4.初始化openlayer地图
			const map = new ol.Map({
				// 将初始化的地图设置到id为map的DOM元素上
				target: "map",
				// 设置图层
				layers: [gaode],
				view: new ol.View({
					center: [114.30, 30.50],
					// 设置地图放大级别
					zoom: 14,
					projection: "EPSG:4326"
				})
			})
			// 设置矢量数据源加载geojson数据
			var source = new ol.source.Vector({
				url: "./data/map.json",
				format: new ol.format.GeoJSON()
			})
			//设置矢量图层
			var layer = new ol.layer.Vector({
				source
			})
			//设置点元素样式
			let style = new ol.style.Style({
				image: new ol.style.Circle({
					radius: 10,
					fill: new ol.style.Fill({
						color: "red"
					})
				})
			})
			//将点样式加到图层上
			layer.setStyle(style)
			//将图层添加到地图上
			map.addLayer(layer);
		</script>

	</body>

</html>

3.加载网络geojson数据

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 1.导入ol依赖 -->
		<link rel="stylesheet" href="https://lib.baomitu.com/ol3/4.6.5/ol.css">
		<script src="https://lib.baomitu.com/ol3/4.6.5/ol.js"></script>
	</head>
	<body>
		<!-- 2.设置地图的挂载点 -->
		<div id="map"></div>
		<script type="text/javascript">
			//3.初始化一个高德图层
			const gaode = new ol.layer.Tile({
				title: "高德地图",
				source: new ol.source.XYZ({
					url: 'https://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
					wrapX: false
				})
			});
			// 4.初始化openlayer地图
			const map = new ol.Map({
				// 将初始化的地图设置到id为map的DOM元素上
				target: "map",
				// 设置图层
				layers: [gaode],
				view: new ol.View({
					center: [114.30, 30.50],
					// 设置地图放大级别
					zoom: 4,
					projection: "EPSG:4326"
				})
			})
			let china_source = new ol.source.Vector({
				url: 'https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json',
				format: new ol.format.GeoJSON(),
			})
			let china_style = new ol.style.Style({
				fill: new ol.style.Fill({
					color: 'rgba(50,50,50,0.4)'
				}),
				stroke: new ol.style.Stroke({
					color: "#ff2d5180",
					width: 2
				})

			})
			let china_layer = new ol.layer.Vector({
				source: china_source
			})
			china_layer.setStyle(china_style);
			map.addLayer(china_layer)

			//添加多个区域颜色
			// 陕西
			const huibei_source = new ol.source.Vector({
				url: "https://geo.datav.aliyun.com/areas_v3/bound/610000_full.json",
				format: new ol.format.GeoJSON()
			})
			const huibei_layer = new ol.layer.Vector({
				source: huibei_source
			})
			const huibei_style = new ol.style.Style({
				fill: new ol.style.Fill({
					color: '#333'
				}),
			})
			huibei_layer.setStyle(huibei_style)
			map.addLayer(huibei_layer)
		</script>
	</body>
</html>

其中https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json可以获取到国家地区区域信息你只需要改后面的区号即可获取到不同省份的区域

我用的是https://geo.datav.aliyun.com/areas_v3/bound/610000_full.json陕西区域

标签:map,layer,ol,基础,style,source,openlayers,new
From: https://blog.csdn.net/qq_54878347/article/details/142926668

相关文章

  • 运维工程师的出路在哪里,尤其是 35 岁以后?零基础入门到精通,收藏这篇就够了
    很多人都在提35岁职场危机,但我想分享的是,对于运维人员来说,35岁以后仍然有很多出路和发展机会。结合目前市场发展情况,35+的运维出路真的还是有几大方向选择的。第一个是,云原生和DevOps:随着云计算和云原生技术的普及,运维人员可以转向云原生和DevOps领域。这些领域注重自动......
  • 零基础转行学网络安全怎么样?能找到什么样的工作?
    网络安全对于现代社会来说变得越来越重要,但是很多人对于网络安全的知识却知之甚少。那么,零基础小白可以学网络安全吗?答案是肯定的。零基础转行学习网络安全是完全可行的,但需要明确的是,网络安全是一个既广泛又深入的领域,包含了网络协议、系统安全、应用安全、密码学、渗透......
  • 网络安全最厉害五个专业(非常详细),零基础入门到精通,看这一篇就够了
    文章目录1.网安方向介绍01、密码学与应用安全02、量子信息安全03、数据安全04、系统安全05、网络安全2.就业前景分析01、大厂安全部门02、安全公司03、高校==零基础入门黑客技术/网络安全==【----帮助网安学习,以下所有学习资料文末免费领取!----】大纲学习教程面试刷......
  • 对vue响应式数据的理解(vue基础,面试,源码级讲解)
    首先我们要知道哪些数据可以劫持。  是否可以劫持:在JavaScript等动态语言中,字符串和数字虽然是基本数据类型(也称为原始数据类型),但它们可以包装成对象(如String对象和Number对象)进行处理。当它们被包装成对象后,就可以使用对象的方法,包括Object.defineProperty等方法进行数据......