OpenLayer2 Openlayer3经典案例总结

合集下载

OpenLayers-3-入门教程

OpenLayers-3-入门教程
注:这些步骤的顺序很重要,OpenLayers 库必须在在自定义脚本执行之前加载,在此示例中,
OpenLayers 库在文档的<head>部分加载(<script src="ol3/ol.js"></script>)。同样的,在文档中作为显示 容器的元素(该实例中为<div id="map"></div>)准备好之前,自定义地图初始化代码是不能执行的,将初 始化代码添加到文档中<body>的后面,我们能在地图生成前,确保库已加载,显示容器已准备好。
<link rel="stylesheet" href="ol3/ol.css" type="text/css"> <style> #map {
height: 256px; width: 512px; } </style> <title>OpenLayers 3 example</title> <script src="ol3/ol.js" type="text/javascript"></script> </head> <body> <h1>My Map</h1> <div id="map"></div> <script type="text/javascript"> var map = new ol.Map({ target: 'map', layers: [ new yer.Tile({

OpenLayers心得

OpenLayers心得

OpenLays学习笔记目录(一)项目介绍 (2)(二)源代码总体结构分析 (5)(三)BaseTypes :定义底层类与定制JS内置类 (9)(四)BaseTypes: OpenLayers中定制JavaScript内置类 (14)(五)空间数据的组织与实现 (19)(六)OpenLayers 数据解析—以GML为例 (22)(七)数据渲染分析 (26)(八)地图表现 (29)(九)地图表现 (34)(十)OpenLayers中的控件 (37)(十一)OpenLayers事件机制分析 (42)(十二)体系结构 (45)OpenLayers项目分析(一)项目介绍OpenLayers 是由MetaCarta公司开发的,用于WebGIS客户端的JavaScript 包,目前的最高版本是2.5 V,通过BSD License 发行。

它实现访问地理空间数据的方法都符合行业标准,比如OpenGIS的WMS和WFS规范, OpenLayers 采用纯面向对象的JavaScript方式开发,同时借用了Prototype框架和Rico库的一些组件。

采用OpenLayers作为客户端不存在浏览器依赖性。

由于OpenLayers采用JavaScript语言实现,而应用于Web浏览器中的DOM(文档对象模型)由JavaScript实现,同时,Web浏览器(比如IE,FF等)都支持DOM 。

OpenLayers APIs采用动态类型脚本语言JavaScript编写,实现了类似与Ajax 功能的无刷新更新页面,能够带给用户丰富的桌面体验(它本身就有一个Ajax 类,用于实现Ajax功能)。

目前,OpenLayers所能够支持的Format有:XML、GML、GeoJSON、GeoRSS、JSON、KML、WFS、WKT(Well-Known Text)。

在OPenlayers.Format名称空间下的各个类里,实现了具体读/写这些Format的解析器。

OpenLayers实现点要素图层的聚合显示的方法

OpenLayers实现点要素图层的聚合显示的方法

OpenLayers实现点要素图层的聚合显⽰的⽅法⽬录1、前⾔2、点要素图层的聚合3、聚合特殊处理⼀4、聚合特殊处理⼆5.、结语1、前⾔在很多情况下,点要素图层中的要素数量可能会成百上千,这时候如果不做任何处理直接加载到地图上不仅会使⽤户视觉体验下降,⽽且也会造成地图界⾯的卡顿。

下⾯这段代码创建了1000个随机点进⾏显⽰:<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta charset="utf-8" /><title>OpenLayers</title><style>html, body, #map {width: 100%;height: 100%;margin: 0;padding: 0;}</style><link href="libs/ol/ol.css" rel="stylesheet" /><script src="libs/ol/ol.js"></script></head><body><div id="map"></div><script>// 随机创建1000个要素var source = new ol.source.Vector();for (var i = 1; i <= 200; i++) {var coordinates = [120.00 + Math.random(), 30.00 + Math.random()];var feature = new ol.Feature(new ol.geom.Point(coordinates));source.addFeature(feature);}for (var i = 1; i <= 200; i++) {var coordinates = [120.01 + Math.random(), 30.01 + Math.random()];var feature = new ol.Feature(new ol.geom.Point(coordinates));source.addFeature(feature);}for (var i = 1; i <= 200; i++) {var coordinates = [120.02 + Math.random(), 30.02 + Math.random()];var feature = new ol.Feature(new ol.geom.Point(coordinates));source.addFeature(feature);}for (var i = 1; i <= 200; i++) {var coordinates = [120.03 + Math.random(), 30.03 + Math.random()];var feature = new ol.Feature(new ol.geom.Point(coordinates));source.addFeature(feature);}for (var i = 1; i <= 200; i++) {var coordinates = [120.04 + Math.random(), 30.04 + Math.random()];var feature = new ol.Feature(new ol.geom.Point(coordinates));source.addFeature(feature);}// 创建图层var layer = new yer.Vector({source: source,style: function (feature, resolution) {var style = new ol.style.Style({image: new ol.style.Icon({src: 'img/location.png'})})return style;}});// 创建地图var map = new ol.Map({target: 'map',layers: [new yer.Tile({source: new ol.source.OSM()}),layer],view: new ol.View({projection: 'EPSG:4326',center: [120, 30],zoom: 10,minZoom: 5,maxZoom: 14})});</script></body></html>运⾏结果如下图所⽰:这么多点挤在⼀起,是不是感觉很恶⼼?⼀般来说,如果⼀个点要素图层中的点数量很多,我们就会采取图层聚合的⽅式对其进⾏处理。

openlayers经典例子

openlayers经典例子

Openlayers经典例子案例地址 (2)一. Popup (2)二、图层叠加 (3)三、编辑功能 (5)四、鹰眼 (7)五、书签及样式 (7)六、改变显示内容 (9)七、SLD (9)八、动画效果 (10)九、获得属性 (11)十、局部放大 (12)十一、记录上次操作历史 (12)十二、鼠标滚轮 (13)十三、鼠标坐标 (13)十四、标签 (14)十五、全屏 (14)十六、显示缩放比例 (15)案例地址/releases/OpenLayers-2.10/examples/ /dev/examples/一.Popup/dev/examples/sundials.html/dev/examples/sundials-spherical-mercator.html/dev/examples/select-feature-openpopup.html 二、图层叠加/dev/examples/layerswitcher.html/dev/examples/wmts-getfeatureinfo.html/dev/examples/wmts-capabilities.html/dev/examples/wmst.html三、编辑功能/dev/examples/wfs-snap-split.html/dev/examples/snap-split.html四、鹰眼五、书签及样式/dev/examples/styles-unique.html/dev/examples/styles-context.html六、改变显示内容七、SLD/dev/examples/SLDSelect.html八、动画效果/dev/examples/rotate-features.html 九、获得属性/dev/examples/osm-layer.html 十、局部放大/dev/examples/navtoolbar.html 十一、记录上次操作历史/dev/examples/navigation-history.html 十二、鼠标滚轮/dev/examples/mousewheel-interval.html 十三、鼠标坐标/dev/examples/mouse-position.html 十四、标签/dev/examples/mm.html十五、全屏十六、显示缩放比例/dev/examples/fractional-zoom.html。

openlayer开发完全解读

openlayer开发完全解读

看好多人都‎写Open‎L ayer‎s的一些说‎明,但总感‎觉没有具体‎事例解释,‎不太爽。

抽‎点时间从O‎p enLa‎y ers官‎方网站上找‎些例子具体‎解释一下M‎a p、Ve‎c tor、‎F eatu‎r e类的简‎单用法。

有‎些东西是自‎己工作经验‎的理解,没‎完全按英文‎解释来理解‎,希望不会‎对大家造成‎误解。

工作‎太忙,以后‎又时间和精‎力就不断地‎解释点,目‎前有100‎多个例子呢‎。

以下程‎序拷到本机‎应该就能直‎接应用,我‎是在Geo‎s erve‎r中运转地‎。

<h‎t ml x‎m lns=‎"http‎://ww‎w.w3.‎o rg/1‎999/x‎h tml"‎>‎<hea‎d>‎‎<tit‎l e>创建‎不同的Fe‎a ture‎类实例—‎———在‎电子地图上‎绘制Fea‎t ure对‎象实例的方‎式有两种,‎一种是使用‎默认方式(‎但在相应的‎C SS表中‎也可以更换‎图片),另‎一种是自己‎做图片,并‎根据用户选‎择来响应在‎电子地图上‎创建的不同‎F eatu‎r e类实例‎请求</t‎i tle>‎‎ <‎l ink ‎r el="‎s tyle‎s heet‎" hre‎f="..‎/them‎e/def‎a ult/‎s tyle‎.css"‎type‎="tex‎t/css‎" />‎‎ <!‎--本页中‎的样式表-‎->‎‎<sty‎l e ty‎p e="t‎e xt/c‎s s">‎‎‎‎<!--‎显示电子地‎图DIV的‎样式控制-‎->‎‎‎#map ‎{widt‎h: 51‎2px;h‎e ight‎: 512‎p x;bo‎r der:‎1px ‎s olid‎gray‎;}‎‎‎<!--R‎e diod‎对象的样式‎表,是用来‎判断用户请‎求状态的R‎e adio‎-->‎‎‎#con‎t rolT‎o ggle‎li {‎l ist-‎s tyle‎: non‎e;}‎‎‎p {w‎i dth:‎512p‎x;}‎‎ </s‎t yle>‎‎ <‎!--引入‎O penL‎a yers‎.js文件‎的路径地址‎,就像使用‎P orto‎t ype.‎j s一样-‎->‎‎<scr‎i pt s‎r c="O‎p enLa‎y ers.‎j s"><‎/scri‎p t>‎‎ <sc‎r ipt ‎t ype=‎"text‎/java‎s crip‎t">‎‎‎var ‎m ap, ‎d rawC‎o ntro‎l s;‎‎‎Open‎L ayer‎s.Uti‎l.onI‎m ageL‎o adEr‎r orCo‎l or =‎"tra‎n spar‎e nt";‎‎‎‎‎‎//自动加‎载的函数开‎始‎‎ f‎u ncti‎o n in‎i t(){‎‎‎‎ map‎= ne‎w Ope‎n Laye‎r s.Ma‎p('ma‎p');/‎/必须实例‎化的Map‎对象,是电‎子地图成图‎和其它一切‎用户请求和‎服务器相应‎的前提。

openlayer绘制矩形的方法

openlayer绘制矩形的方法

OpenLayers绘制矩形的方法OpenLayers是一个开源的JavaScript库,用于在Web浏览器上展示地理信息。

它提供了丰富的功能,包括地图显示、地图交互和地图绘制等。

在本文中,我们将探讨如何使用OpenLayers绘制矩形。

1. 准备工作在开始绘制矩形之前,我们需要进行一些准备工作。

首先,我们需要引入OpenLayers库。

你可以通过下载OpenLayers库,或者使用CDN来引入它。

下面是一个使用CDN引入OpenLayers的例子:<!DOCTYPE html><html><head><title>OpenLayers绘制矩形</title><link rel="stylesheet" href="" type="text/css"><script src=""></script></head><body><div id="map" style="width: 100%; height: 400px;"></div><script>// 在这里编写绘制矩形的代码</script></body></html>2. 创建地图在绘制矩形之前,我们需要创建一个地图。

可以使用OpenLayers的Map类来创建地图。

在创建地图时,我们需要指定地图容器的ID,以及地图的视图和图层。

下面是一个创建地图的例子:var map = new ol.Map({target: 'map',layers: [new yer.Tile({source: new ol.source.OSM()})],view: new ol.View({center: ol.proj.fromLonLat([0, 0]),zoom: 2})});在上面的例子中,我们创建了一个包含一个OSM图层的地图,并设置了地图的初始视图。

基于OpenLayers3的WebGIS系统 报告

基于OpenLayers3的WebGIS系统 报告

《网络GIS设计与实现》课程大作业报告2019-2020学年第2学期专业:班级:姓名:学号:指导教师:二零二零年六月一、解题思路(1)放大、缩小、漫游、控件加载(鹰眼图、比例尺、缩放按钮);(2)多图层加载、多图层切换显示,其中,要加载显示的图层包括但不限于谷歌地图、OSM地图、GeoJSON矢量数据等。

(3)左右地图双窗口联动显示:开发功能按钮,控制右边地图窗口的显示与关闭。

(4)图像绘制功能,要求实现点、线、面(矩形、多边形、圆形)等不同图形的绘制。

(5)对于面要素图形的绘制,要求能够编写样式设置面板(开发功能按钮,控制该面板的显示与关闭),自定义地设置边框的颜色、宽度,以及填充颜色。

二、实验代码1.界面HTML结构布局界面布局采用DIV盒模型布局,利用HTML进行结构控制,JavaScript实现页面自适应,工具条、图层控制及样式面板以Position:absoluted绝对定位的方式显示在界面上,默认隐藏状态,点击工具条可进行控制显示。

2.功能JavaScript实现:(1)地图联动自适应与浏览器界面自适应功能实现:通过获取浏览器的宽高大小,利用jQuery选择器对CSS样式进行控制,监听浏览器尺寸改变,实现容器随浏览器及联动地图的变化而改变。

(2)地图加载及联动:地图采用EPSG:4326坐标系,坐标中心[118,39],缩放级别6级,通过定义相同的View实现地图联动交互,图层加载通过yer。

Tile的方式调用在线地图,代码如下图。

(3)实例化地图基本空间,如鹰眼、比例尺等。

(4)放大、缩小、漫游功能实现:通过View的缩放级别Zoom控制实现放大缩小,漫游需要改变鼠标样式。

(5)图形绘功能、停止绘制、清除图层功能实现:通过参数传递到Draw函数中,实现不同选择绘制不同的图形,并添加监听事件,停止绘制时只需要移除监听事件,清除图层需要将矢量图层的源Source置空。

(6)图层控制功能实现:通过获取图层的name属性,利用Javascript动态控制Html生成图层切换面板。

OpenLayers3实现图层控件功能

OpenLayers3实现图层控件功能

OpenLayers3实现图层控件功能本⽂实例为⼤家分享了OpenLayers3实现图层控件的具体代码,供⼤家参考,具体内容如下1. 前⾔在实际应⽤中,我们将加载到地图容器中的图层通过图层显⽰的控件功能,来显⽰加载的图层,便于⽤户查看与操作,OpenLayers 3 中并没有提供类似的图层控件,但是他的 API 却提供了该功能的相关接⼝,我们可以通过调⽤相关的接⼝,实现该功能。

2. 实现思路(1)新建⼀个⽹页,参考前⾯的⽂章加载OSM⽡⽚图层的⽅法,加载OSM⽡⽚、MapQuest 影像、JSON 与KML 格式的⽮量图。

(2)在地图容器中新建⼀个div 层,⽤于显⽰图层列表,在图层列表div 中,添加⼀个列表头部div 、图层列表 ul ,并通过 css 控制他的样式。

(3)编写加载图层列表的功能函数,在地图加载后,调⽤该⽅法,实现图层列表的展⽰。

3. 实现图层列表功能的代码如下:html:<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>加载图层控件</title><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><link rel="stylesheet" href="css/ol.css" ><link rel="stylesheet" href="css/bootstrap.min.css" ><link rel="stylesheet" href="css/ZoomSlider.css" ><script src="js/ol.js"></script><script src="js/loadLayersControl.js"></script><style>body,html,div,ul,li,iframe,p,img {border: none;padding: 0;margin: 0;font-size: 14px;font-family: "微软雅⿊";}#map {width: 100%;height: 100%;position: absolute;}/* 图层控件层样式设置 */.layerControl {position: absolute;bottom: 5px;min-width: 200px;max-height: 200px;right: 0px;top: 5px;z-index: 2001;/*在地图容器中的层,要设置z-index的值让其显⽰在地图上层*/color: #ffffff;background-color: #4c4e5a;border-width: 10px;/*边缘的宽度*/border-radius: 10px;/*圆⾓的⼤⼩ */border-color: #000 #000 #000 #000;/*边框颜⾊*/}.layerControl .title {font-weight: bold;font-size: 15px;margin: 10px;}.layerTree li {list-style: none;margin: 5px 10px;}/* ⿏标位置控件层样式设置 */#mouse-position {float: left;position: absolute;bottom: 5px;width: 200px;height: 20px;z-index: 2000;/*在地图容器中的层,要设置z-index的值让其显⽰在地图上层*/}</style></head><body onload="init()"><div id="map"><div id="layerControl" class="layerControl"><div class="title"><label>图层列表</label></div><ul id="layerTree" class="layerTree"></ul></div></div></body></html>代码解析:创建⼀个id为 layerControl 的 div 作为显⽰图层列表,通过设置 z-index 让其显⽰到地图的上⽅,以及通过图层列表容器中新建⼀个列表(id为layerTree的ul)来承载地图容器中的图层。

(word完整版)OpenLayers接口文档

(word完整版)OpenLayers接口文档

OpenLayers由于OpenLayers是采用JavaScript实现的,不存在包的概念,但是它可以通过命名空间来实现类似包的功能。

另外,JavaScript不存在继承的概念,也不存在私有、公有、保护等概念,OpenLayers中所谓的继承其实就是将基类中的所有属性和方法复制到子类中去。

OpenLayers的命名空间如下:一、OpenLayers命名空间:如上图所示,OpenLayers是整个webgis系统的最外层命名空间,所有的地理信息系统相关web程序都在此命名空间下,在此命名空间下又创建了其他的命名空间来管理相关功能的类。

在这个命名空间下定义了一些基础类和基类来构建整个框架.1、class OpenLayers。

MapMap类将div DOM元素实例化的对象为地图容器,可以向地图容器中添加图层和控件。

2、class OpenLayers。

Map2基于OpenLayers.Map封装,将自有地图图层和常用控件都已经加载在地图当中,用户无需关心地图数据源等问题,简化了用户的地图调用.实例化该类后即可创建一个可查看和使用的地图对象,其方法和属性与OpenLayers。

Map一致,见OpenLayers.Map类。

2、class OpenLayers。

MarkerOpenLayers命名空间下的Marker类可以被实例化为marker对象,用于标注地图上的位置,marker对象是由LonLat对象和Icon对象组合而成的.markers一般被添加到一个叫做yer。

Markers的特殊图层中。

需要注意的是,如果你在一个marker中使用了一个icon,也就是说,你不能在其他的marker中在使用它-—一旦你使用了这个icon,你应该clone()这个icon然后在另外的marker中使用这个icon。

3、class OpenLayers。

PopupPopup类实例化一个弹出窗口,通常被添加到地图容器中。

Openlayer参考文档介绍

Openlayer参考文档介绍

Maps............................................................................................................................................................................ 24 Raster Layers ............................................................................................................................................................... 24 Marker Layers ............................................................................................................................................................. 24 Events and Controls .................................................................................................................................................... 24 Vector Layers .............................................................................................................................................................. 25 Editing Tools ................................................................................................................................................................ 25

openlayers3实现车辆轨迹回放

openlayers3实现车辆轨迹回放

openlayers3实现车辆轨迹回放本⽂实例为⼤家分享了openlayers 3实现车辆轨迹回放的具体代码,供⼤家参考,具体内容如下先上效果:利⽤ openlayers 3地图的 postcompose 事件监听地图的重绘注意:此代码是我在Vue 的methods ⾥⾯写的测试⽅法,并不能直接运⾏,请在理解的基础上测试。

vm 为vue的this对象注释已经很丰富了,先做个备份,后期会编辑加⼊⼀点详解。

实现代码:html:<div id="menu"><label for="speed" style="font-weight: bold;">运动速度:&nbsp;<input id="speed" type="range" min="1" max="20" step="1" value="10" /></label><button id="start-animation">开始运动</button></div><!-- 注:此代码仅为上⾯速度条和按钮--核⼼代码:startMove:function () {var vm=this;var map=vm.map;vm.clearOverlayers("beijing_sq");//中间站var stops=[[12909554.6597,4933234.84552], //14[12909824.6852,4931594.7854], //43[12910026.8837,4930523.89946], //63[12910870.563,4929357.26511] //85];var stopMakers = new Array();for(var i=0;i<4;i++){var s = new ol.Feature({type: 'stop',geometry: new ol.geom.Point(stops[i])});stopMakers.push(s);}var Coordinates=vm.path;//将离散点构建成⼀条折线var route = new ol.geom.LineString(Coordinates);//获取直线的坐标var routeCoords = route.getCoordinates();var routeLength = routeCoords.length;var routeFeature = new ol.Feature({type: 'route',geometry: route});var geoMarker = new ol.Feature({type: 'geoMarker',geometry: new ol.geom.Point(routeCoords[0])});var startMarker = new ol.Feature({type: 'icon',geometry: new ol.geom.Point(routeCoords[0])});var endMarker = new ol.Feature({type: 'icon',geometry: new ol.geom.Point(routeCoords[routeLength - 1])});var styles = {'route': new ol.style.Style({stroke: new ol.style.Stroke({width: 6,color: '#F2C841'}),fill:new ol.style.Fill({color:"#F6E3A3"})}),/*'icon': new ol.style.Style({image: new ol.style.Icon({anchor: [0.5, 1],src: require()})}),*/'geoMarker': new ol.style.Style({/*image: new ol.style.Circle({radius: 7,snapToPixel: false,fill: new ol.style.Fill({ color: 'black' }),stroke: new ol.style.Stroke({color: 'white',width: 2})})*/image: new ol.style.Icon({src: require('../../assets/map/left_red_car.png'),rotateWithView: false,rotation: -Math.atan2(routeCoords[0][1]-routeCoords[1][1], routeCoords[0][0]-routeCoords[1][0]), scale:0.3,})}),'stop':new ol.style.Style({image:new ol.style.Circle({radius:10,snapToPixel:false,fill:new ol.style.Fill({ color:'red'}),stroke:new ol.style.Stroke({color:'white',width:2})})})};var animating = false;var speed, now;var speedInput = document.getElementById('speed');var startButton = document.getElementById('start-animation');var vectorLayer = new yer.Vector({id:'carLayer',source: new ol.source.Vector({features: [routeFeature, geoMarker, startMarker, endMarker,stopMakers[0],stopMakers[1],stopMakers[2],stopMakers[3]] }),style: function (feature) {//如果动画是激活的就隐藏geoMarkerif (animating && feature.get('type') === 'geoMarker') {return null;}return styles[feature.get('type')];}});//var center = ol.proj.fromLonLat([115.981,40.451]);map.addLayer(vectorLayer);// 要素移动var moveFeature = function (event) {var vectorContext = event.vectorContext; //HTML5 Canvas context,ol.render.canvas.Immediate的对象var frameState = event.frameState; //freme 的状态if (animating) {var elapsedTime = frameState.time - now; //elapsedTime 已过时间//通过增加速度,来获得lineString坐标var index = Math.round(speed * elapsedTime / 1000); //已经⾛了多少个点//console.log("#########",routeCoords[index]);if (index >= routeLength) {stopAnimation(true);return;}//fixme ---------------if( index < 14){flashFeature(0);}if( index == 14){changeStyle(0, 1);}if(index > 14 && index <43){flashFeature(1);}if(index == 43){changeStyle(1, 2);}if(index > 43 && index <63){flashFeature(2);}if(index == 63){changeStyle(2, 3);}if(index > 63 && index <85){flashFeature(3);}if(index == 85){changeStyle(3, 3);}//fixme--------------------var dx,dy,rotation,carStyle;if(routeCoords[index] && routeCoords[index+1]){dx=routeCoords[index][0]-routeCoords[index+1][0];dy=routeCoords[index][1]-routeCoords[index+1][1];rotation = Math.atan2(dy,dx);//console.log("***********",rotation);carStyle= new ol.style.Style({image: new ol.style.Icon({src: require('../../assets/map/left_red_car.png'),rotateWithView: false,rotation: -rotation,scale:0.3,})});var currentPoint = new ol.geom.Point(routeCoords[index]); //当前点var feature = new ol.Feature(currentPoint);//Render a feature into the canvas.// Note that any zIndex on the provided style will be ignored - features are rendered immediately in the order that this method is called. // If you need zIndex support, you should be using an yer.Vector insteadvectorContext.drawFeature(feature, carStyle);}}//继续动画效果map.render();};function changeStyle(previous,next) {//console.log(stopMakers[previous]);stopMakers[previous].setStyle(new ol.style.Style({image: new ol.style.Circle({radius: 10,snapToPixel: false,fill: new ol.style.Fill({color: 'green'}),stroke: new ol.style.Stroke({color: 'white',width: 2})})}));}var colors=['red','green'];var colorIndex=0;function flashFeature(index) {var color;colorIndex++;colorIndex=colorIndex % 30;if(colorIndex < 15){color=colors[0];}else {color = colors[1];}stopMakers[index].setStyle(new ol.style.Style({image: new ol.style.Circle({radius: 10,snapToPixel: false,fill: new ol.style.Fill({color: color}),stroke: new ol.style.Stroke({color: 'white',width: 2})})}));}function startAnimation() {if (animating) {stopAnimation(false);} else {animating = true;now = new Date().getTime(); /** 开始时的时间*/speed = speedInput.value;startButton.textContent = '结束运动';//隐藏geoMarkergeoMarker.setStyle(null);//设置显⽰范围//map.getView().setCenter(center);map.on('postcompose', moveFeature); /** postcompose事件-- 地图渲染时都会触发 */map.render();}}/*** @param {boolean}结束动画*/function stopAnimation(ended) {animating = false;startButton.textContent = '开始运动';//如果动画取消就开始动画var coord = ended ? routeCoords[routeLength - 1] : routeCoords[0];/** @type {ol.geom.Point} */(geoMarker.getGeometry()).setCoordinates(coord);//移除监听map.un('postcompose', moveFeature); /** 解除postcompose 事件 */}startButton.addEventListener('click', startAnimation, false);}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

openlayers方法总结

openlayers方法总结

openlayers⽅法总结openlayers中的⼀些⽅法;yer:;initialize:创建层Div,注册事件;destroy:注销;clone:克隆当前层;setName:设置层name;addOptions:添加附属属性;onMapResize:虚函数;redraw:重画;moveTo:移动;setMap:设置层所属的地图;removeMap:移除地openlayers 中的⼀些⽅法yer:initialize:创建层Div,注册事件destroy:注销clone:克隆当前层setName:设置层nameaddOptions:添加附属属性onMapResize:虚函数。

由⼦函数实现。

redraw:重画moveTo:移动。

(未实现有意义动作)setMap:设置层所属的地图removeMap:移除地图。

虚函数,由⼦函数实现getImageSize:返回图⽚尺⼨setTileSize:设置⽡⽚尺⼨和图⽚尺⼨getVisibility:返回层可见性setVisibility:设置层的可见性display:显⽰或隐藏层calculateInRange:本层分辨率是否在地图分辨率容纳范围内setIsBaseLayer:设置或取消该层为BaseLayerinitResolutions:初始化分辨率相关数据getResolution:取当前分辨率getExtent:取地图当前范围getZoomForExtent:由尺⼨范围得缩放级别getDataExtent:取本层的范围边界,虚函数由⼦函数实现getResolutionForZoom:由缩放级别得分辨率getZoomForResolution:由分辨率得缩放级别getLonLatFromViewPortPx:视⼝坐标转经纬度getViewPortPxFromLonLat:经纬度转视⼝坐标setOpacity:设置层的透明度(包括其所以⼦节点,即图⽚)setZIndex:设置层的z轴值adjustBounds:边界校正---------------------------OpenLayers.Map:initialize:初始化。

OpenLayers学习心得

OpenLayers学习心得

OpenLays学习笔记目录(一)项目介绍 (2)(二)源代码总体结构分析 (5)(三)BaseTypes :定义底层类与定制JS内置类 (9)(四)BaseTypes: OpenLayers中定制JavaScript内置类 (14)(五)空间数据的组织与实现 (19)(六)OpenLayers 数据解析—以GML为例 (22)(七)数据渲染分析 (26)(八)地图表现 (29)(九)地图表现 (34)(十)OpenLayers中的控件 (37)(十一)OpenLayers事件机制分析 (42)(十二)体系结构 (45)OpenLayers项目分析(一)项目介绍OpenLayers 是由MetaCarta公司开发的,用于WebGIS客户端的JavaScript 包,目前的最高版本是2.5 V,通过BSD License 发行。

它实现访问地理空间数据的方法都符合行业标准,比如OpenGIS的WMS和WFS规范, OpenLayers 采用纯面向对象的JavaScript方式开发,同时借用了Prototype框架和Rico库的一些组件。

采用OpenLayers作为客户端不存在浏览器依赖性。

由于OpenLayers采用JavaScript语言实现,而应用于Web浏览器中的DOM(文档对象模型)由JavaScript实现,同时,Web浏览器(比如IE,FF等)都支持DOM 。

OpenLayers APIs采用动态类型脚本语言JavaScript编写,实现了类似与Ajax 功能的无刷新更新页面,能够带给用户丰富的桌面体验(它本身就有一个Ajax 类,用于实现Ajax功能)。

目前,OpenLayers所能够支持的Format有:XML、GML、GeoJSON、GeoRSS、JSON、KML、WFS、WKT(Well-Known Text)。

在OPenlayers.Format名称空间下的各个类里,实现了具体读/写这些Format的解析器。

vue openlayer例子

vue openlayer例子

1. 概述Vue.js是一种流行的JavaScript框架,用于构建灵活且高效的用户界面。

而OpenLayers则是一个用于地图绘制和交互的JavaScript库。

本文将会展示如何在Vue.js中使用OpenLayers,并给出一个简单的实例。

2. Vue.js和OpenLayers的结合2.1 Vue.jsVue.js是一种流行的JavaScript框架,它的核心聚焦在视图层,同时也是一款非常灵活的框架。

通过使用Vue.js,开发者可以轻松构建交互式的用户界面。

2.2 OpenLayersOpenLayers是一个用于地图绘制和交互的JavaScript库,它提供了丰富的地图功能和交互性。

借助OpenLayers,开发者可以在网页上轻松创建和展示地图,并与用户进行交互。

3. 在Vue.js中使用OpenLayers在Vue.js中使用OpenLayers可以通过安装相应的npm包,然后在Vue组件中进行引入和使用。

以下是一个简单的示例:3.1 安装OpenLayers我们需要通过npm安装OpenLayers依赖包:```jsnpm install ol```3.2 在Vue组件中引入和使用OpenLayers在Vue组件中,我们可以直接引入OpenLayers并使用它来创建地图。

以下是一个简单的示例:```js<template><div id="map" style="width: 100; height: 400px;"></div></template><script>import 'ol/ol.css';import Map from 'ol/Map';import View from 'ol/View';import TileLayer from 'ol/layer/Tile';import OSM from 'ol/source/OSM';export default {mounted() {const map = new Map({target: 'map',layers: [new TileLayer({source: new OSM() })],view: new View({center: [0, 0],zoom: 2})});}}</script><style scoped>#map {width: 100;height: 400px;}</style>```在上面的示例中,我们在Vue组件的mounted()生命周期钩子中创建了一个简单的地图。

layer.open弹出层应用示例

layer.open弹出层应用示例

layer.open弹出层应⽤⽰例1、定义⼀个静态页,⾥⾯存放需要的HTML,如FlightBookChildInsur.html在这个页⾯定义执⾏函数,⽤来返回数据;function callbackdata() {var passengerName = $("#passenger_Name2").val();var passengerCertificate = $("#passenger_Certificate2").val();var passengerCertificateNum = $("#passenger_CertificateNum2").val();var passengerBirthday = $("#passenger_Birthday2").val();var passengerSex = $("#passenger_Sex2").val();var obj = { "Name": passengerName, "Certificate": passengerCertificate, "CertificateNum": passengerCertificateNum, "Birthday": passengerBirthday, "Sex": passengerSex };return JSON.stringify(obj);}2、在⽗页⾯定义调⽤⽅法,如:function SetChildInsurMsg(dataIndex) {layer.open({type: 2, //因为layer弹出层需要⼀个页⾯,所以是iframe弹出层,因此type: 2。

title: "设置投保⼈",shadeClose: true,shade: 0.4,area: ['60%', '40%'],content: "FlightBookChildInsur.html",btn: ['确定', '关闭'],yes: function (index) {var res = window["layui-layer-iframe" + index].callbackdata();var obj = JSON.parse(res);var passengerName = ;var passengerCertificate = obj.Certificate;var passengerCertificateNum = obj.CertificateNum;var passengerBirthday = obj.Birthday;var passengerSex = obj.Sex;if (passengerName.length > 0 && passengerCertificateNum.length > 0 && passengerBirthday.length > 0 &&parseInt(passengerSex)>0) {layer.close(index);}else {layer.alert('请填写必输项。

【整理】【layui】layer.open的常用参数例子

【整理】【layui】layer.open的常用参数例子

【整理】【layui】layer.open的常⽤参数例⼦layer.open({// 基本层类型:0(信息框,默认)1(页⾯层)2(iframe层,也就是解析content)3(加载层)4(tips层)type: 1,title: "标题",// 当type: 2时就是urlcontent: "内容/url",// 宽⾼:如果是100%就是满屏area: ['733px', '450px'],// 坐标:auto(默认坐标,即垂直⽔平居中),具体当⽂档:https:///doc/modules/layer.html#offsetoffset: 'auto',// 按钮:按钮1的回调是yes(也可以是btn1),⽽从按钮2开始,则回调为btn2: function(){},以此类推btn: ['按钮1', '按钮2'],// 关闭按钮:layer提供了两种风格的关闭按钮,可通过配置1和2来展⽰,如果不显⽰,则0closeBtn: 1,// 遮罩:默认:0.3透明度的⿊⾊背景('#000')shade: 0.3,// 是否点击遮罩关闭:默认:falseshadeClose: false,// ⾃动关闭所需毫秒:默认:0不会⾃动关闭time: 0,// 最⼤最⼩化:默认:falsemaxmin: false,// 固定:默认:truefixed: true,// 是否允许拉伸:默认:trueresize: true,// 层叠顺序:默认:19891014,⼀般⽤于解决和其它组件的层叠冲突zIndex: 19891014,// 层弹出后的成功回调⽅法:layero前层DOM,index当前层索引success: function(layero, index){},// 第⼀个按钮事件,也可以叫btn1yes: function (index, layero) {},btn2: function (index, layero) {layer.close(index);},// 右上⾓关闭按钮触发的回调:默认会⾃动触发关闭。

openlayer点集合避让算法

openlayer点集合避让算法

openlayer点集合避让算法【原创实用版】目录1.OpenLayer 简介2.点集合避让算法原理3.OpenLayer 中的点集合避让算法实现4.点集合避让算法的应用案例5.总结正文【1.OpenLayer 简介】OpenLayer 是一款开源的 JavaScript 库,用于在网页上展示地图和地理数据。

它提供了丰富的地图控件和交互功能,使得用户可以方便地创建和操作地图。

OpenLayer 支持多种地图投影和坐标系统,能够满足各种地理信息应用的需求。

【2.点集合避让算法原理】点集合避让算法是一种基于图论的计算方法,用于解决一组点在一个平面上的避让问题。

给定一组点,该算法可以找到一个合适的位置,使得这些点到达这个位置后,彼此之间不会相交。

这种算法在很多场景下有实际应用,例如地图上的标点、机器人路径规划等。

【3.OpenLayer 中的点集合避让算法实现】OpenLayer 中提供了一个名为"tile"的模块,可以实现点集合避让算法。

用户可以通过以下步骤来使用这个模块:1.导入 OpenLayer 库中的"tile"模块。

2.创建一个地图并设置相关参数,如中心点、缩放级别等。

3.创建一个点集合,包含需要避让的各个点。

4.使用"tile"模块中的"getTile"函数,传入点集合,得到避让后的点集合。

5.在地图上绘制避让后的点集合。

【4.点集合避让算法的应用案例】点集合避让算法在地理信息系统、机器人路径规划、物流配送等领域有广泛应用。

例如,在地图软件中,用户可以通过点集合避让算法规划出一条避免拥堵的路径;在物流配送中,点集合避让算法可以帮助配送员规划出一条最优的配送路线,以减少时间和成本。

【5.总结】OpenLayer 是一款功能强大的地图库,支持多种地图投影和坐标系统。

点集合避让算法是一种基于图论的计算方法,可以解决一组点在一个平面上的避让问题。

OpenLayer3动态点线和动态点的扩散实现

OpenLayer3动态点线和动态点的扩散实现

OpenLayer3动态点线和动态点的扩散实现⽆论动态点的实现还是动态线的实现⼤多依靠canvas去是是实现的,其实我们⼀直在独⽴的canvas 的做,OL3中vectorContext⼦类主要为渲染⽮量元素,如果下点共运⽤map 的postcompose事件就可以做许多的动态效果,例如下⾯这⼀段ol3给出代码⽰例:<!DOCTYPE html><html><head><title>动态数据</title><link rel="stylesheet" href="https:///en/v3.13.1/css/ol.css" type="text/css"><script src="https:///en/v3.13.1/build/ol.js"></script></head><body><div id="map" class="map"></div><script>var map = new ol.Map({layers: [new yer.Tile({source: new ol.source.MapQuest({ layer: 'sat' })})],target: 'map',view: new ol.View({center: [0, 0],zoom: 2})});var imageStyle = new ol.style.Circle({radius: 5,snapToPixel: false,fill: new ol.style.Fill({ color: 'yellow' }),stroke: new ol.style.Stroke({ color: 'red', width: 1 })});var headInnerImageStyle = new ol.style.Style({image: new ol.style.Circle({radius: 2,snapToPixel: false,fill: new ol.style.Fill({ color: 'blue' })})});var headOuterImageStyle = new ol.style.Circle({radius: 5,snapToPixel: false,fill: new ol.style.Fill({ color: 'black' })});var n = 200;var omegaTheta = 30000; // Rotation period in msvar R = 7e6;var r = 2e6;var p = 2e6;map.on('postcompose', function (event) {var vectorContext = event.vectorContext;var frameState = event.frameState;console.log(frameState.time);var theta = 2 * Math.PI * frameState.time / omegaTheta;var coordinates = [];var i;for (i = 0; i < n; ++i) {var t = theta + 2 * Math.PI * i / n;var x = (R + r) * Math.cos(t) + p * Math.cos((R + r) * t / r);var y = (R + r) * Math.sin(t) + p * Math.sin((R + r) * t / r);coordinates.push([x, y]);}vectorContext.setImageStyle(imageStyle);vectorContext.drawMultiPointGeometry(new ol.geom.MultiPoint(coordinates), null);var headPoint = new ol.geom.Point(coordinates[coordinates.length - 1]);var headFeature = new ol.Feature(headPoint);vectorContext.drawFeature(headFeature, headInnerImageStyle);vectorContext.setImageStyle(headOuterImageStyle);vectorContext.drawMultiPointGeometry(headPoint, null);map.render();});map.render();</script></body></html>这主要实现动态数据的展⽰,有点3D效果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
loader:function(extent,resolution,projection){
varurl='/geoserver/wfs?service=WFS&'+
'version=1.1.0&request=GetFeature&typename=osm:water_areas&'+
<style>
.map{
height:400px;
width:100%;
}
</style>
<scriptsrc="/en/v3.7.0/build/ol.js"type="text/javascript"></script>
<title>OpenLayers 3 example</title>
map.addControl(newOpenLayers.Control.OverviewMap());
map.addControl(newOpenLayers.Control.PanZoomBar());
varvlayer=yer.Vector("Editable");
'outputFormat=text/javascript&format_options=callback:loadFeatures'+
'&srsname=EPSG:3857&bbox='+extent.join(',')+',EPSG:3857';
// use jsonp: false to prevent jQuery from adding the "callback" //阻止JQuery自己增加callback函数
})
],
view:newol.View({
center:ol.proj.transform([37.41,8.82],'EPSG:4326','EPSG:3857'),
zoom:4
})
});
</script>
</body>
</html>
放大缩小
<script>
varmap=newol.Map({
layers:[
collapsible:false
})
}),
view:newol.View({
center:[0,0],
zoom:2
})
});
document.getElementById('zoom-out').onclick=function(){
varview=map.getView();
varzoom=view.getZoom();
layers:'clabel,ctylabel,statelabel',
transparent:true
},{
opacity:.5
});
map.addLayers([wms_base,wms_labels]);
map.addControl(yerSwitcher({}));
'Specialty/ESRI_StateCityHighway_USA/MapServer';
varlayers=[
yer.Tile({
source:newol.source.MapQuest({layer:'sat'})
}),
yer.Tile({
ቤተ መጻሕፍቲ ባይዱextent:[-13884991,2870341,-7455066,6338219],
</head>
<body>
<h2>My Map</h2>
<divid="map"class="map"></div>
<scripttype="text/javascript">
varmap=newol.Map({
target:'map',
layers:[
yer.Tile({
source:newol.source.MapQuest({layer:'sat'})
// parameter to the URL
$.ajax({url:url,dataType:'jsonp',jsonp:false});
},
strategy:ol.loadingstrategy.tile(ol.tilegrid.createXYZ({
maxZoom:19
}))
});
/**
*JSONP WFS callback function.
</head>
<bodyonLoad="init()">
<divid="map_element"style="width:900px;height:900px"></div>
<scripttype="text/javascript">
varmap;
functioninit(){
map=newOpenLayers.Map('map_element',{
source:newol.source.TileArcGISRest({
url:url
})
})
];
varmap=newol.Map({
layers:layers,
target:'map',
view:newol.View({
center:[-10997148,4569099],
zoom:4
})
});
</script>
map.addLayer(vlayer);
map.addControl(newOpenLayers.Control.EditingToolbar(vlayer));
map.addControl(newOpenLayers.Control.PanZoomBar());
if(map.getCenter()){
* @param {Object} response The response object.
*/
window.loadFeatures=function(response){
vectorSource.addFeatures(geojsonFormat.readFeatures(response)); //读取GeoJSON数据response--->geojson--->feature--->map
controls:[]
});
varwms_base=yer.WMS('Base Layer','/wms/vmap0',{
layers:'basic'
},{
isBaseLayer:true
});
varwms_labels=yer.WMS('Location Labels','/wms/vmap0',{
yer.Tile({
source:newol.source.OSM()
})
],
target:'map',
controls:ol.control.defaults({
attributionOptions:/** @type {olx.control.AttributionOptions} */({
一、OL2
1.Control
<!doctype html>
<html>
<head>
<metacharset="utf-8">
<title>创建一个简单的电子地图</title>
<scripttype="text/javascript"src="/olapi/OpenLayers.js"></script>
WMS
<script>
varlayers=[
yer.Tile({
source:newol.source.TileWMS({
attributions:[newol.Attribution({
html:'&copy; '+
'<a href="http://www.geo.admin.ch/internet/geoportal/'+
map.zoomToMaxExtent();
}
}
</script>
</body>
</html>
二、OL3
/en/v3.7.0/examples/
快速开始
<!doctype html>
<htmllang="en">
<head>
<linkrel="stylesheet"href="/en/v3.7.0/css/ol.css"type="text/css">
view.setZoom(zoom-1);
相关文档
最新文档