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

Monocle2在R 4.3环境下的终极避坑指南:从安装到可视化全流程解析

本文提供了在R 4.3环境下安装和运行Monocle2的完整解决方案,重点解决了依赖包兼容性、源码修改及BEAM分析报错等关键问题。文章详细解析了从环境准备、依赖包处理、源码安装验证到从Seurat对象转换、拟时轨迹构建、高级可视化及性能优化的全流程,旨在帮助用户顺利完成单细胞拟时分析。

weixin_29206669的博客 1355

京东联盟API实战:5分钟搞定商品返利链接生成(附Python代码)

本文详细介绍了如何利用京东联盟API快速构建自动化商品返利链接生成系统。通过Python代码实战,从API申请、环境配置到核心功能封装,手把手教你实现批量商品信息查询与推广链接生成,帮助内容创作者和开发者大幅提升电商推广效率。

weixin_29216957的博客 674

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

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

@必意玲 8008

高德地图JSAPI中旋转Marker点标签图片时候,且不旋转lable内容方法。

高德地图JSAPI中旋转Marker点标签图片时候,且不旋转lable内容方法

weixin_42960380的博客 2500

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

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

不睡觉的怪叔叔的博客 4568

【AUTOSAR-E2E】-1.4-详述E2E Transformer解决方案

共13页精讲 目录 1“Data Transformation”介绍 1.1 基于SOME/IP Transformer 1.2 基于COM Based Transformer 2 ComXf(COM Based Transformer)介绍 2.1 ComXf(COM Based Transformer)功能规范 2.2 ComXf(COM Based Transformer)提供的服务 2.3 配置注意事项 3 E2EXf(E2E Transformer)介绍 3.1 E2EX...

「汽车电子助手」的博客 4700

Prism 入门02,区域介绍

什么是区域(Region)?区域,在Prism 框架中,区域是模块化的核心的功能之一,其主要作用是降低应用程序和模块之间的耦合度。使用方式:在应用程序的界面中,划分出某块区域,并为这个区域定义一个唯一的区域名称。那么通过这个区域名称,应用程序就可以找到指定的区域。并为这个区域动态放置一些容器或控件,从而呈现在界面中。

build2024 1126

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

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

mr_jhc的博客 1万+

MCP+A2A:从实验室到生产环境的落地之旅

本文通过实际项目中的落地案例,展示了 MCP+A2A 协议结合使用的强大功能和广泛适用性。同时,我们也探讨了开发者社区的贡献、与其他技术的融合,以及未来技术趋势的展望。希望本文能够帮助读者更好地理解如何将这一架构从实验室推向生产环境,推动 AI 技术的实际应用。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1494

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

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

GIS工具 2468

新手强化学习—深入解析 YOLOv13 项目包中的文件结构和各文件作用

YOLOv13是YOLO系列最新发布的计算机视觉模型。在这篇博客中,我将深入分析YOLOv13中各个文件的作用,对整个项目的文件结构有更清晰的认识。

Limiiiing的博客 482

【技术科普】破解政务跨系统数据壁垒!亘川一网统管平台多源数据同步技术解析

本文解析亘川一网统管平台多源数据同步技术,针对政务跨系统数据壁垒难题,介绍组件的数据采集、校验、审计留痕等核心能力,结合营商环境项目落地案例,对比传统开发模式差异,讲解开源组件的实践价值,为政务项目开发者提供落地参考。

weixin_67440240的博客 635

OpenLayers 3加载矢量地图源

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

大树 2128

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

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

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

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

不睡觉的怪叔叔的博客 3972

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

使用openlayers加载离线地图

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

weixin_43239880的博客 1万+

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、付费专栏及课程。

余额充值