OpenLayers学习笔记中级篇(二、对矢量地图的操作)

openlayers6【二】Map地图详解,初始化一个map地图 openlayers 6【二】vue 初始化map地图详解 阅读详情

这一节我们主要对上一节我们加载的json格式的矢量地图数据进行一些操作。首先我们来看一下如何获取矢量地图的一些features。话不多说,直接上代码:

1、获取features:

<!doctype html>
<html xmlns=http://www.w3.org/1999/xhtml>
<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 3地图加载</title>
    <link href="css/ol.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="js/ol.js" charset="utf-8"></script>
</head>

<body>
	<div>矢量地图Feature总数: <span id="count"></span></div>
    <div id="map" style="width: 100%"></div>
	
	
	
	<script type="text/javascript">
		var bounds = [73.62004852302096, 3.8378885148431436,
                    134.7684631352655, 53.553741455004214];

    	//创建地图
	    var map = new ol.Map({
	        layers: [
	            new ol.layer.Tile({
	                source: new ol.source.OSM()
	            })
	        ],
	        view: new ol.View({ 
	            center: [-72.980624870461128, 48.161307640513321],
            	zoom: 8,
	            projection: 'EPSG:4326'
	        }),
	        target: 'map'
	    });

	    var vectorLayer = new ol.layer.Vector({
	        source: new ol.source.Vector({
	            url: 'img/china.json', // 地图来源
	            format: new ol.format.GeoJSON()
	        })
	    });

	    // 因为是异步加载,所以要采用事件监听的方式来判定是否加载完成
	    var listenerKey = vectorLayer.getSource().on('change', function(){
	        if (vectorLayer.getSource().getState() === 'ready') {    // 判定是否加载完成
	            document.getElementById('count').innerHTML = vectorLayer.getSource().getFeatures().length;
	        }
	    });

   		map.addLayer(vectorLayer);
    	// 如果在此处调用vectorLayer.getSource().getFeatures()是完全有可能获取不到任何Feature的,这是常犯错误
    	
    	 map.getView().fit(bounds, map.getSize());
</script>
</body>

</html>

首先来看一下代码运行后的效果:

这里我们不仅加载了中国矢量地图的json格式地图,而且获取了矢量地图中features的数量,具体使用的方法就是:vectorLayer.getSource().getFeatures().length; 

不过要注意的是因为我们加载json格式的地图数据时是异步加载,所以要采用事件监听的方式来判定是否加载完成,所以有时我们如果没有使用监听的方式来判断是否加载完成就直接调用getFeatures方法会报错的!

2、我们现在可以获取features了,那么我们现在来尝试改变features,直接上代码如下图:

<!doctype html>
<html xmlns=http://www.w3.org/1999/xhtml>
<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>修改矢量地图</title>
    <link href="css/ol.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="js/ol.js" charset="utf-8"></script>
</head>

<body>
	<div>矢量地图Feature总数: <span id="count"></span></div>
    <div id="map" style="width: 100%"></div>
	
	
	
	<script type="text/javascript">
		var bounds = [73.62004852302096, 3.8378885148431436,
                    134.7684631352655, 53.553741455004214];

    	//创建地图
	    var map = new ol.Map({
	        layers: [
	            new ol.layer.Tile({
	                source: new ol.source.OSM()
	            })
	        ],
	        view: new ol.View({ 
	            center: [-72.980624870461128, 48.161307640513321],
            	zoom: 8,
	            projection: 'EPSG:4326'
	        }),
	        target: 'map'
	    });

	    var vectorLayer = new ol.layer.Vector({
	        source: new ol.source.Vector({
	            url: 'img/china.json', // 地图来源
	            format: new ol.format.GeoJSON()
	        }),
	        // 设置样式,颜色为红色,线条粗细为1个像素
	        style: new ol.style.Style({
	            stroke: new ol.style.Stroke({
	                color: 'red',
	                size: 1
	            })
        	})
	    });

	    // 因为是异步加载,所以要采用事件监听的方式来判定是否加载完成
	    var listenerKey = vectorLayer.getSource().on('change', function(){
	        if (vectorLayer.getSource().getState() === 'ready') {    // 判定是否加载完成
	            document.getElementById('count').innerHTML = vectorLayer.getSource().getFeatures().length;
	        }
	    });

   		map.addLayer(vectorLayer);
    	// 如果在此处调用vectorLayer.getSource().getFeatures()是完全有可能获取不到任何Feature的,这是常犯错误
    	
    	 map.getView().fit(bounds, map.getSize());
</script>
</body>

</html>

先来运行代码看一下效果:

大家可以看到,与我们上面的demo的最大区别就是地图的颜色改变了,这里我们是设置了矢量地图layer的样式,这样比较简单,当然大家也可以设置features的样式,只不过这样比较复杂一点,必须先获取到所有加载的feature,大家可以自己尝试一下!

好了,本节就先到这儿了,下一节我将跟大家一块学习分辨率和瓦片的计算方面的知识,大家加油! 

WebGIS编程:Openlayers地图打印 主要介绍webGIS开发中使用地图框架打印地图的过程 阅读详情

相关推荐

openlayers自适应视图 (十三)

在开发gis应用中,经常碰到需要改变视图来展示某个区域,比如切换每个城市,以前我的方法是通过区划数据计算出中心点和缩放等级设置给视图,如: let center = [x, y] let zoom = 15 map.getView().setCenter(center) map.getView().setZoom(zoom) 后来我就想,能不能去自适应center和zoom,通过翻官方文档,找到了view中的fit方法,来看一下官方文档的介绍: fit方法可以传2个参数。 第一个是几何图形或者范围,其实

吴佩佩佩佩的博客 6026

openlayers view fit 到范围的问题

今天在项目里使用openlayers写点击事件切换矢量图层并定位到范围时遇到了一个奇怪的现象,点击第一次的时候正常,第二次后就不正常了,网上的答案说是openlayers分辨率的问题,测试了一下果然是这样,至于为什么会出现这样的问题,我想可能是这个框架本身的原因吧,具体原因就不深究了,这里方向问题图片和解决方案。 第一次点击 第二次点击 打印一下视图分辨率的值,可以看到结果不一样 解决方案就是重新计算一下分辨率的值 let resolution = map.getView().g

wangfengquan_的博客 3736

Openlayers之地图标注

1、标注的简介 标注简单点说就是通过图标、文字等方式将我们想展示的内容显示在地图上,着重突出人们所关注的专题内容,从而为用户提供个性化的地图服务; 2、标注方式 在Openlayers3里面,有两种对地理位置点进行标注的方法,一种是通过创建矢量图层然后设置其样式的方法,还有一种就是创建Overlay覆盖层的方法;对于第一种方式,本质上创建的还是一个矢量对象,只是将其表现形式更换了一下,用St

SmileCoffin的博客 1万+

openlayers 5.0 两种居中方式

1. map.getView().setCenter([data.x,data.y]);//居中到某点 2. map.getView().fit(webgissource.POLYGONLayerAllshi.getExtent(), map.getSize());//居中到geometry视野中

weixin_38190600的博客 1716

OpenLayers 3 之 地图矢量图层(ol.layer.Vector)详解

在 GIS 中,地图一般分为两大类:栅格地图和矢量地图,栅格地图其实就是数码照片,只不过有的是卫星拍的。它们有一个共同特征,就是它们都是由很多个像素组成,像素大小是一致的,行高和列宽是一致的,从这个角度看,一幅遥感影像就像栅格。      矢量地图,是由很多要素组成的,每个要素都有自己的地理坐标,基于数学规则,无论矢量地图怎么放大,地图都不会失真。它是 OpenLayers 中非常重要的一种图层类型

研究与专注 2万+

A010:vue+openlayers中根据地图上的矢量地块定位

vue+openlayers中根据地图上的矢量地块定位

jiadsadfasfs的博客 996

OpenLayers学习笔记中级篇(一、各种地图的加载)

学习了前面的初级篇,相信大家对OplenLayers已经有了一个初步的认识,下面我们再继续深入学习OpenLayers的相关功能! 我们这节主要是加载各种各样的地图,包括在线服务的地图,比如天地图、高德、OSM等,还有一些我们自己使用地图服务器发布的地图,比如使用Geoserver发布的wms地图服务,最后还介绍了常用矢量地图数据的加载,好了,让我们开始吧! 首先我们再来深入学习一下Sourc...

MagicMHD的博客 4590

Openlayers 教程 25 - 高德腾讯(火星坐标-GCJ-02)、百度(BD09)、天地图坐标(CGCS2000)相互转换

Openlayers 高德腾讯、百度、天地图坐标相互转换

非科班Java出身GISer的博客 9428

OpenLayers学习笔记初级篇(一、地图加载)

开源的地图包做的比较优秀比较好的就是OpenLayers了,下面我将用我的学习笔记带领一些没接触过OpenLayers的同学进行学习,目前初步将学习笔记分为初级基础篇,中级进阶篇和高级应用篇,我将通过一个个小的demo进行学习,比较有助于大家加深记忆和动手编码能力,下面我们进行初级基础的学习! 1、OpenLayers 3简介 OpenLayers 3简称ol3,它是一个开源的Web GIS引...

MagicMHD的博客 3205

利用 Docker Distribution 搭建私有的 Docker Registry

1、拓扑

weixin_44983653的博客 1067

三角洲行动交易行自动化脚本

DFMarketBot - 三角洲行动自动交易助手 DFMarketBot是一款专为三角洲行动游戏设计的交易行自动化工具,通过OCR识别和鼠标模拟实现自动补卡、补子弹功能。项目采用Python开发,支持Windows平台,主要功能包括: 自动检测并购买指定物品(房卡/子弹) 价格监控与智能购买(低于设定价格自动下单) 自定义购买数量与次数限制 支持窗口/无窗口两种游戏模式 使用前需安装Tesseract OCR引擎并配置游戏为1920*1080分辨率。通过JSON文件可灵活配置监控物品清单、理想价格和购买策

愤怒的阿木木的博客 3万+

openlayers6【十三】地图矢量图层 Vector 详解

文章目录1. 认识什么是矢量地图2. 矢量图层的构成3. 矢量图层的常用参数4. 初始化一个矢量图层5. 总结 1. 认识什么是矢量地图 在 GIS 中,地图一般分为两大类:栅格地图和矢量地图 栅格地图:它们有一个共同特征,就是它们都是由很多个像素组成,像素大小是一致的,行高和列宽是一致的,从这个角度看,一幅遥感影像就像栅格。我们可以把一幅栅格图像考虑为一个矩阵,矩阵中的任一元素对应于图像中的一个点,而相应的值对应于该点的灰度级,数字矩阵中的元素叫做像素。 矢量地图:矢量图使用直线和曲线来描述图形,这些图形

@必意玲 8008

RAGFlow源码解析-2、从源码构架ragflow v0.25.0镜像

本文详细记录了从零开始构建自定义RAGFlow镜像lt/ragflow:0.25.0的全过程。首先介绍了环境准备,包括检查Node.js、Docker版本和项目结构。然后详细说明了构建步骤:编译前端、创建自定义Dockerfile、构建镜像和验证。接着讲解了docker-compose配置修改要点,包括网络定义、MySQL依赖处理等。最后总结了部署过程中遇到的五个关键问题及解决方案,包括networks未定义、MySQL服务依赖、tiktoken文件缺失、数据库配置错误和端口映射问题。通过完整的操作流程和问

liutao841204的专栏 364

OpenLayers之多源数据加载七:矢量地图

一、矢量地图介绍     矢量地图的图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。由于矢量图形可通过公式计算获得,所以矢量图形文件体积一般较小。     矢量图形最大的优点是无论放大、缩小或旋转等图形都不会失真。矢量地图在地图项目中存在着大量的应用,是地图数据中非常重要的组成部分。     为了便于存储、传递、使用,矢量地图会按照一定的格式来表达,比如常...

不睡觉的怪叔叔的博客 4568

Win10系统内存占用异常飙升?三步排查法快速定位问题根源

本文针对Win10系统内存占用异常飙升问题,提供了一套三步排查法。首先利用任务管理器和资源监视器进行深度系统体检,定位隐形内存消耗者;其次通过干净启动和禁用非必要后台服务,揪出导致内存泄漏的第三方软件或驱动;最后进行终极深度清理,包括检查内存完整性、调整虚拟内存设置以及更新关键驱动程序,帮助用户快速恢复系统流畅运行。

weixin_29251567的博客 195

基于STM32的RS485土壤氮磷钾与PH传感器数据采集与OLED显示实战(附完整代码)

本文详细介绍了基于STM32单片机通过RS485协议采集土壤氮磷钾与PH传感器数据的实战项目。涵盖硬件选型、连接方法、Modbus-RTU通信协议解析、STM32程序实现及OLED显示,提供完整代码和调试技巧,适用于农业物联网环境监测系统。

kotlin6android的博客 336

基于openlayers、cesium实现二、三维地图切换

本文介绍如何在普通2d的gis项目里实现地图的二、三维切换。二维地图引擎市面上比较多,比较有代表性的像openlayers、leaflet等。三维地图目前比较流行的开源方案有cesium,它本身是基于webGL实现的地图引擎。 我之前写过一篇总结,是基于vuecli2.0实现的。按步骤一步步实现,问题不大。如果你是用vuecli3搭建的项目,这里有篇文章介绍用vuecli3实现引用cesium。如果要实现二三维地图切换,难点是地图引擎的转换,有个插件已经帮忙实现了这个工作:ol-cesium。 场景需求 好

mr_jhc的博客 1万+

Modbus4J vs EasyModbus4J:哪个Java库更适合你的工业项目?

本文深入对比了Java领域两大Modbus通信库Modbus4J与EasyModbus4J。Modbus4J设计稳健、类型安全,适合复杂业务集成;EasyModbus4J基于Netty,在高并发场景下性能更优。文章从架构、性能、API及生产环境多维度分析,为工业物联网项目选型提供决策依据。

weixin_28475533的博客 310

利用OPENLAYERS将矢量数据叠加到在线地图上

在日常GIS的应用中经常需要我们将已有的矢量数据叠加到在线地图上(如:高德、谷歌地图),以便利用在线地图作为背景更好的展示我们的数据。下面我们以谷歌地图为例具体讲述如何操作。 具体做法是:我们利用QGIS叠加在线地图和已有数据,并生成一个OPENLAYERS的WEBGIS应用。将我们的已有数据叠加到谷歌地图上进行展示。但进行自有数据叠加会遇到一个重要的问题,即:由于国内在线地图基本都是...

GIS工具 2468

C# 实现鼠标轨迹录制与回放自动化功能(附源码)

通过本文的介绍,相信大家已经掌握了鼠标轨迹录制与回放功能的实现方式。该功能在自动化测试和重复性工作中具有重要应用价值。后续可以进一步优化,增加更多扩展功能,形成一个完整的自动化工具。

weixin_72139050的博客 1755

YOLOv8改进:全网原创首发 | 新颖的多尺度卷积注意力(MSCA),即插即用,助力小目标检测 | NeurIPS2022

多尺度卷积注意力(MSCA),有效地提取上下文信息;1)作为注意力MSCA使用;

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 3844

OpenLayers 3加载矢量地图源

OpenLayers 3加载矢量地图源 一、矢量地图 矢量图使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。由于矢量图形可通过公式计算获得,所以矢量图形文件体积一般较小。矢量图形最大的优点是无论放大、缩小或旋转等不会失真。在地图中存在着大量的应用,是地图数据中非常重要的组成部分。 为了便于存储,传递,使用,矢量地图会按照一定的格式来表达,比如常见的GeoJSON,TopoJSON,GML,KML,ShapeFile等等。 除了最后一个Shap

大树 2128

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

OpenLayers教程十五:多源数据加载之矢量地图

目录 一、矢量地图简介 二、在OpenLayers中直接组织矢量数据 三、通过url加载矢量数据 四、样式设置 一、矢量地图简介 前面介绍的瓦片地图将地理信息以一块块瓦片的形式进行组织并渲染,瓦片的本质是图片,因此不能对瓦片地图进行修改样式、空间分析等操作,而且瓦片不包含属性信息,隐含的空间信息也不能直接获取使用。 矢量数据使用矢量数据模型来组织地理信息,矢量数据模型...

不睡觉的怪叔叔的博客 3972

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

使用openlayers加载离线地图

使用openlayers加载离线地图2.选择需要下载的离线地图的瓦片(注意啊,这里的地图只能选高德地图的瓦片,其他地图的瓦片要么没有,要么就对不上号,会导致加载图片失败。很坑,一开始我以为是我代码的问题,结果并不是。这里我是先尝试,所以先下一个高德地图的瓦片试试,后面再用其他工具下天地图的瓦片,把瓦片换成天地图的瓦片,一样的)另外https://blog.csdn.net/qq_32077521/article/details/123224974这篇文章也说了怎么样自定义离线地图颜色的

weixin_43239880的博客 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Vue+OpenLayers学习系列(七)OpenLayers 加载GeoServer发布的矢量切片地图

一、首先要切片 注意首先要下载 GeoServer 的矢量切片插件(参见:https://zhuanlan.zhihu.com/p/62751184) 安装完矢量切片插件后,发布吐槽时,需要勾选如下: 然后找到发布的矢量切片图层 打开预览,并且查看浏览器中的源码,查看它的调用方式(在后面OpenLayers调用它时可以用同样的方式去调用): 二、OpenLayers 调用 <template> <div> <div id="map" ref

Ocean111best的博客 3062

OpenLayers3, 设置地图背景

本文基于OpenLayers3,实现地图加入背景图的功能。以上为基于openlayer3 实现设置地图背景图的简单案例,希望对您有帮助~

我哎GIS博客 1803
上一篇: OpenLayers学习笔记中级篇(一、各种地图的加载)
下一篇: OpenLayers学习笔记中级篇(三、地图的分辨率设置)
MagicMHD
博客等级 码龄9年 503粉丝 78原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值