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

openlayers基础篇2

时间:2024-10-15 14:21:11浏览次数:10  
标签: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

相关文章

  • js简单基础笔记
    一 .js特点1. Js是一门解释型语言,不用编译,而是直接执行2. js是一门动态语言,其中的任何内容都是不确定的3. 语法结构和Java,c都很像4. ​  js是一门面向对象的语言5.js严格区分大小写二 .js使用1.  标签使用 在html中的script标签中就可以编......
  • 运维工程师的出路在哪里,尤其是 35 岁以后?零基础入门到精通,收藏这篇就够了
    很多人都在提35岁职场危机,但我想分享的是,对于运维人员来说,35岁以后仍然有很多出路和发展机会。结合目前市场发展情况,35+的运维出路真的还是有几大方向选择的。第一个是,云原生和DevOps:随着云计算和云原生技术的普及,运维人员可以转向云原生和DevOps领域。这些领域注重自动......
  • 【Java】零基础学习2_Java背景、学习过程及应用介绍
    三、Java语言背景3.1Java与C/C++关系Java从C++继承声明变量、操作符形式、C++面向对象核心Java舍弃了C/C++中容易引起错误的地方;在后来引入了自己的特性可以看作类C语言发展和衍生产物3.2Java发展历程介绍隶属公司(都是美国公司)现在属于Oracle公司的,之前是属于SU......
  • 保姆级教程下载finalshell以及连接云服务器基础的使用教程
    废话不多说,我们直接进行安装一、软件下载下载地址:FinalShellSSH工具,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux,版本4.5.10,更新日期2024.9.26-FinalShell官网(hostbuf.com)https://www.hostbuf.com/t/988.html点击链接进行下载下载完之后 打开文......
  • 零基础转行学网络安全怎么样?能找到什么样的工作?
    网络安全对于现代社会来说变得越来越重要,但是很多人对于网络安全的知识却知之甚少。那么,零基础小白可以学网络安全吗?答案是肯定的。零基础转行学习网络安全是完全可行的,但需要明确的是,网络安全是一个既广泛又深入的领域,包含了网络协议、系统安全、应用安全、密码学、渗透......
  • 【网络安全工程师入门】从零基础到精通全面教程:一篇文章带你入门!
    前言想要成为网络安全工程师,却苦于没有方向,不知道从何学起的话,下面这篇网络安全入门教程可以帮你实现自己的网络安全工程师梦想,如果想学,可以继续看下去,文章有点长,希望你可以耐心看到最后!1、Web安全相关概念(2周)·熟悉基本概念(SQL注入、上传、XSS、、CSRF、一句话木马......
  • c++基础语法知识
    基础当VS中一个项目下有两个及以上的源文件时,编译会产生错误:main已经在test.obj中定义;找到一个或多个多重定义的符号。**解决办法:**将不需要编译的源文件排除:右键“属性”,将“从生成中排除”选择“是”,保存后再运行需要运行的源文件就可以成功,且被排除的文件右下角有红标......
  • 网络安全最厉害五个专业(非常详细),零基础入门到精通,看这一篇就够了
    文章目录1.网安方向介绍01、密码学与应用安全02、量子信息安全03、数据安全04、系统安全05、网络安全2.就业前景分析01、大厂安全部门02、安全公司03、高校==零基础入门黑客技术/网络安全==【----帮助网安学习,以下所有学习资料文末免费领取!----】大纲学习教程面试刷......
  • 大语言模型对普通人最实在的帮助(非常详细),零基础入门到精通,看这一篇就够了
    前言记得小时候流行过一类叫《十万个为什么》的书,听名字就知道这些书好像就是一个巨大无比的知识仓库,里面存放着无穷无尽的知识,可以满足孩子们的一切好奇心——但我小时候从没买过,可能没有什么求知欲吧。现在的孩子,似乎更没有必要买入一本《十万个为什么》了,并不是因为没......
  • 对vue响应式数据的理解(vue基础,面试,源码级讲解)
    首先我们要知道哪些数据可以劫持。  是否可以劫持:在JavaScript等动态语言中,字符串和数字虽然是基本数据类型(也称为原始数据类型),但它们可以包装成对象(如String对象和Number对象)进行处理。当它们被包装成对象后,就可以使用对象的方法,包括Object.defineProperty等方法进行数据......