Openlayers教程

合集下载

openlayers视频教程第一讲-概述

openlayers视频教程第一讲-概述

名称
ARC/INFO
开发单位 美国环境系 统研究所 (ESRI) 美国 MapInfo Corporation 美国 INTERGRA PH(鹰图)公 司 加拿大阿 波罗科技集 团、北京东 方泰坦科技 有限公司 美国 Caliper公司
简介
影响广、功能强、市场占有率高。ARC/INFO可运行于各种平台上,包括 SUN Solaris、SGI IRIX、DigitaI Unix、HP UX、IBM AIX、Windows NT (Intel/Alpha)等。在各种平台上可直接共享数据及应用。 ARC/INFO实行 全方位的汉化,包括图形、界面,数据库,并支持NLS(Native Language System),实现可重定义的自动语言本地化。 完善丰富的产品线;稳定的产品性能;广泛的业界支持;广大的用户群 体;良好的易用性,产品贴近用户;与其他技术的良好融合;良好的可持续 发展;极高的新技术敏感度;良好的本地化技术支持;极高的性价比。 提供了一整套功能强大的分析工具,包括属性和空间查询、缓冲区、空 间叠加和专题分析。使用GeoMedia 的数据库服务器技术,你可以方便的对 多种空间数据格式同时进行分析。GeoMedia 是唯一适合进行 what-if分析的 工具,因为它可以让你在同一个分析管道中使用多个操作,该管道中的数据 发生任何变化,分析结果都会自动变更。
a.什么都不输入直接查询所有车辆及设备的最后位置状态 b.输入设备安装绑定的手机号查询该设备的最后位置状态
c.输入设备安装绑定的手机号及时间段查询该设备的位置轨迹

1.采用互联网公开地图服务◦ 地图,高德地图,google地图,QQ地图,世纪高通地图,阿里云地图,51 地图,搜狗地图。内网安全及断网问题无法解决。

如何用OpenLayers开源地图引挚发布离线地图

如何用OpenLayers开源地图引挚发布离线地图

如何用OpenLayers开源地图引挚发布离线地图这里以吉林省吉林市地图为例,说明如何用OpenLayers开源地图引挚发布离线谷歌卫星地图。

在万能地图下载器中,选择吉林省吉林市显示行政区划,然后点击“下载”按钮,可以新建任务。

在新建任务对话框中选择需要下载的级别,一般是从当前行政区划显示的级别开始选择(这里是第9级),一直接选择到第19级(国内19级清晰度效果最佳,19级以上基于19级放大),由于数据量非常大,这里只为了说明如何用OpenLayers开源地图引挚发布离线卫星地图的方法,因此这里以选择到第13级为例。

在“新建任务”对话框中,点击“导出设置”可以设置相关导出参数,我们可以选择导出大图、导出瓦片和导出离线包等三种方式。

由于这里我们用OpenLayers开源地图引挚发布离线卫星地图需要用的是瓦片格式,因此这里选择“导出瓦片”选项。

新建任务详细参数说明,请参阅:新建地图下载任务参数说明在“导出瓦片”选项的相关参数中,我们选择瓦片格式为“TMS瓦片”、文件格式为PNG,坐标坐标投影为墨认的“WGS84 Web 墨卡托投影”,选择“边界范围裁剪”,背景颜色为“透明”背景。

导出瓦片详细参数说明,请参阅:导出瓦片参数说明分别点击“确定”按钮开始下载任务,下载并自动导出后可以看到导出的瓦片目录为8到12级而不是我们选择的9到13级,这是因为软件中的级别编号是从1开始,而标准的TMS瓦片命名规则都是从0开始,因此该情况属于正常情况,瓦片的行列号编号规则同理。

将下载的地图瓦片目录复制到OpenLayers开源地图引挚发布离线地图的源码示例中。

用专业的WebGIS开发工具Visual Studio Code可以打开源代码进行功能开发。

Visual Studio Code下载安装教程,请参阅:如何安装WebGIS开发工具Visual Studio Code双击OpenLayers开源地图引挚发布离线地图源码中的“map.html”文件,可以在浏览器中打开查看在线地图。

openlayers 的circle方法

openlayers 的circle方法

文章标题:深度探索openlayers中的circle方法1. 引言在前端地图开发领域,openlayers是一个非常优秀,功能强大的地图开源库。

其中的circle方法作为其中的一个重要功能,可以在地图上绘制圆形要素,并进行相关的交互和样式设置。

本文将深入探讨openlayers中的circle方法,从基础知识到高级应用,全面解读这一功能的用法和潜力。

2. 基础知识在openlayers中,使用circle方法可以绘制一个圆形要素。

通过指定圆心坐标、半径距离等参数,可以轻松创建一个定位精准的圆形要素,并将其添加到地图上进行展示。

对于地图展示中需要标注特定区域的场景,这一功能非常实用,可以帮助用户快速定位和识别地理位置。

3. 高级应用除了基本的绘制功能之外,circle方法还支持丰富的交互和样式设置。

可以通过设置不同的样式、颜色、透明度等属性,让圆形要素在地图上呈现出不同的视觉效果。

还可以添加交互事件,实现对圆形要素的点击、悬浮等操作,为用户提供更加丰富和直观的地图体验。

4. 深入理解通过对circle方法的深入使用,可以发现它在地图展示和交互方面有着非常大的潜力。

可以结合动态数据,实时更新圆形要素的位置和属性,实现实时监控和展示;还可以结合其他图层,实现更加复杂的地图数据展示和切换。

circle方法不仅仅是简单的绘图工具,更是一个可以灵活运用的地图开发利器。

5. 个人观点作为openlayers中的重要功能之一,circle方法在地图开发中有着举足轻重的地位。

其简单易用的特点,加上丰富的扩展能力,使得它成为了开发者们实现地图展示需求的利器。

在今后的开发过程中,我将更加深入地学习和使用这一功能,结合实际项目需求,发挥出它的最大潜力。

6. 总结通过本文对openlayers中circle方法的深度探索,我们不仅了解了其基础知识和使用方法,还深入理解了其高级应用和潜力。

在地图开发中,灵活运用circle方法将为我们带来更加丰富和多样的地图展示效果,为用户提供更加直观和便捷的地理信息展示和交互体验。

openlayers5-距离测量和面积量测

openlayers5-距离测量和面积量测

openlayers5-距离测量和⾯积量测升级到最新版openlayers5.2,重新写量测⽅法,官⽹examples⾥⾯有实现好的代码,但是项⽬是基于vue的模块化开发,官⽹的例⼦直接引⼊不是很合适,并且官⽹的例⼦是可以⼀直连续的测量,⽽项⽬中需要测量⼀次的⽅法,所以需要对官⽹例⼦做⼀些改进,在此mark⼀下,有同样需要的朋友们直接拿⾛不谢o( ̄︶ ̄)o效果图如下所⽰:实现Measure.jsimport Draw from 'ol/interaction/Draw'import VectorSource from 'ol/source/Vector';import VectorLayer from 'ol/layer/Vector';import TileLayer from 'ol/layer/Tile';import OSM from 'ol/source/OSM';import {unByKey} from 'ol/Observable.js';import Overlay from 'ol/Overlay';import {getArea,getLength} from 'ol/sphere.js';import View from 'ol/View';import {LineString,Polygon} from 'ol/geom.js';import {Circle as CircleStyle,Fill,Stroke,Style} from 'ol/style.js';export default{measure(map, measureType) {/*** Currently drawn feature.* @type {module:ol/Feature~Feature}*/var sketch;/*** The help tooltip element.* @type {Element}*/var helpTooltipElement;/*** Overlay to show the help messages.* @type {module:ol/Overlay}*/var helpTooltip;/*** The measure tooltip element.* @type {Element}*/var measureTooltipElement;/*** Overlay to show the measurement.* @type {module:ol/Overlay}*/var measureTooltip;/*** Message to show when the user is drawing a polygon.* @type {string}*/var continuePolygonMsg = '继续点击绘制多边形';/*** Message to show when the user is drawing a line.* @type {string}*/var continueLineMsg = '继续点击绘制线';createMeasureTooltip();createHelpTooltip();/*** Handle pointer move.* @param {module:ol/MapBrowserEvent~MapBrowserEvent} evt The event. */var pointerMoveHandler = function (evt) {if (evt.dragging) {return;}/** @type {string} */var helpMsg = '请点击开始绘制';if (sketch) {var geom = (sketch.getGeometry());if (geom instanceof Polygon) {helpMsg = continuePolygonMsg;} else if (geom instanceof LineString) {helpMsg = continueLineMsg;}}helpTooltipElement.innerHTML = helpMsg;helpTooltip.setPosition(evt.coordinate);helpTooltipElement.classList.remove('hidden');};map.on('pointermove', pointerMoveHandler);map.getViewport().addEventListener('mouseout', function () {helpTooltipElement.classList.add('hidden');});var draw;var formatLength = function (line) {var length = getLength(line);var output;if (length > 100) {output = (Math.round(length / 1000 * 100) / 100) +' ' + 'km';} else {output = (Math.round(length * 100) / 100) +' ' + 'm';}return output;};var formatArea = function (polygon) {var area = getArea(polygon);var output;if (area > 10000) {output = (Math.round(area / 1000000 * 100) / 100) +' ' + 'km<sup>2</sup>';} else {output = (Math.round(area * 100) / 100) +' ' + 'm<sup>2</sup>';}return output;};var source;// var layer ;// 获取存放feature的vectorlayer层。

openlayers4官方例子学习---DAY2

openlayers4官方例子学习---DAY2

openlayers4官⽅例⼦学习---DAY2加载OSM地图<body><a class="skiplink" href="#map">Go to map</a><div id="map" class="map" tabindex="0"></div><button id="zoom-out">Zoom out</button><button id="zoom-in">Zoom in</button><script>var map = new ol.Map({layers: [new yer.Tile({source: new ol.source.OSM()})],target: 'map',controls: ol.control.defaults({attributionOptions: /** @type {olx.control.AttributionOptions} */ ({collapsible: false})}),view: new ol.View({center: [0, 0],zoom: 2})});document.getElementById('zoom-out').onclick = function() {//缩⼩var view = map.getView();var zoom = view.getZoom();view.setZoom(zoom - 1);};document.getElementById('zoom-in').onclick = function() {//放⼤var view = map.getView();var zoom = view.getZoom();view.setZoom(zoom + 1);};</script></body>使⽤⼀个动态ArcGIS REST MapService,这个源类型⽀持地图和图像服务,动态 ArcGIS服务。

OpenLayers二维地图使用教程

OpenLayers二维地图使用教程

OpenLayers1 OpenLayers简介OpenLayers是由MetaCarta公司开发的,用于WebGIS客户端的JavaScript包。

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

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

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

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

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

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

OpenLayers所能够利用的地图数据资源“丰富多彩”,在这方面提供给拥护较多的选择,比如WMS、WFS、GoogleMap、KaMap、MSVirtualEarth、WorldWind等等。

当然,也可以用简单的图片作为源。

在操作方面,OpenLayers 除了可以在浏览器中帮助开发者实现地图浏览的基本效果,比如放大(Zoom In)、缩小(Zoom Out)、平移(Pan)等常用操作之外,还可以进行选取面、选取线、要素选择、图层叠加等不同的操作,甚至可以对已有的OpenLayers 操作和数据支持类型进行扩充,为其赋予更多的功能。

例如,它可以为OpenLayers 添加网络处理服务WPS 的操作接口,从而利用已有的空间分析处理服务来对加载的地理空间数据进行计算。

openlayers 的 readfeatures

openlayers 的 readfeatures

OpenLayers 是一个开源的地图 JavaScript 库,它提供了一系列强大的地图显示和交互功能。

在 OpenLayers 中,readfeatures 方法是一个用于读取地图中用户绘制的要素的函数。

本文将从以下几个方面详细介绍 openlayers 的 readfeatures 方法:一、readfeatures 方法的基本介绍readfeatures 方法是 OpenLayers 中用于读取用户绘制的要素的函数。

用户在地图上进行绘制操作后,readfeatures 方法可以将绘制的要素读取出来,以便进行后续的操作。

readfeatures 方法一般接受一个参数,该参数是一个包含要素信息的对象。

二、readfeatures 方法的使用示例下面是一个简单的示例,演示了如何在 OpenLayers 中使用readfeatures 方法读取用户绘制的要素:```javascript// 创建一个绘制要素的交互对象var draw = new ol.interaction.Draw({source: source,type: 'Point'});// 将绘制要素的交互对象添加到地图中map.addInteraction(draw);// 绑定 drawend 事件,该事件在绘制结束时触发draw.on('drawend', function(event) {// 从绘制的要素中获取要素信息var feature = event.feature;// 调用 readfeatures 方法读取要素信息var features = readfeatures(feature);// 在控制台输出读取到的要素信息console.log(features);});```以上示例中,首先创建了一个绘制要素的交互对象 draw,并将其添加到地图中。

然后绑定了 drawend 事件,当用户完成绘制操作时会触发该事件。

openlayers的类与方法

openlayers的类与方法

openlayers 中的一些方法yer:initialize:创建层Div,注册事件destroy:注销clone:克隆当前层setName:设置层nameaddOptions:添加附属属性onMapResize:虚函数。

由子函数实现。

redraw:重画moveTo:移动。

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

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

瓦片尺寸、地图最大范围、弹出窗口边界、主题样式、创建地图Dom元素、创建视窗Div、创建层容器Div、更新地图Div尺寸、注册事件、添加Controldestroy:销毁Control、销毁层、移除视口Div、注销监听事件setOptions:设置附件参数getTileSize:返回瓦片尺寸getBy:使用指定的规则对队列的某属性匹配出一组对象getLayersBy:使用指定的规则对地图的层的某属性匹配出一组对象getLayersByName:使用指定的规则对地图的层的名字匹配出一组对象getLayersByClass:使用指定的规则对地图的层的类名匹配出一组对象getControlsBy:使用指定的规则对地图的control匹配出一组对象getControlsByClass:使用指定的规则对地图的control的类名匹配出一组对象getLayer:根据id由层堆栈中检索层setLayerZIndex:设置z轴值resetLayersZIndex:重置所有层的z轴值(按其在堆栈中的位置设置)addLayer:增加层addLayers:批量增加层removeLayer:移除层getNumLayers:返回层数目getLayerIndex:返回指定层在地图的层堆栈中的位置setLayerIndex:设置指定层在地图的层堆栈中新的位置(ZIndex),并触发层次序改变事件raiseLayer:向上或下调整层的次序setBaseLayer:设置新的BaseLayer,隐藏原BaseLayeraddControl:添加ControladdControlToMap:将Control加进地图getControl:返回指定id的ControlremoveControl:移除ControladdPopup:新增弹出窗口。

openlayers arcgis调用方法

openlayers arcgis调用方法

openlayers arcgis调用方法(实用版4篇)目录(篇1)1.OpenLayers 简介2.ArcGIS Server 离线瓦片服务的概念与应用3.使用 OpenLayers 加载 ArcGIS Server 离线瓦片服务的方法4.实例:HerryDong 的博客中的离线瓦片服务应用5.结论:OpenLayers 在离线瓦片服务加载方面的优势与意义正文(篇1)1.OpenLayers 简介OpenLayers 是一款开源的 JavaScript 库,用于在网页上展示地图。

它允许用户在网页上快速、方便地搭建地图应用,提供了丰富的地图功能和控件。

OpenLayers 支持多种地图数据源,如 ArcGIS Server、Google Maps 等,为用户提供了灵活的选择空间。

2.ArcGIS Server 离线瓦片服务的概念与应用ArcGIS Server 是 Esri 公司推出的一款地图服务器产品,提供了丰富的地图数据处理和发布功能。

离线瓦片服务是 ArcGIS Server 的一种地图数据发布方式,它将地图数据预先切片并存储为图像文件,用户可以在不需要连接到地图服务器的情况下加载和显示地图。

离线瓦片服务具有减轻服务器负担、提高地图加载速度等优点。

3.使用 OpenLayers 加载 ArcGIS Server 离线瓦片服务的方法要使用 OpenLayers 加载 ArcGIS Server 离线瓦片服务,需要按照以下步骤操作:(1)创建一个 HTML 文件,引入 OpenLayers 的 CSS 和JavaScript 库。

(2)在 HTML 文件中创建一个地图容器(map container),设置地图容器的尺寸和背景颜色。

(3)创建一个地图对象(map object),设置地图的投影、中心点和缩放级别等参数。

(4)使用 OpenLayers 的瓦片加载器(tile loader)加载 ArcGIS Server 离线瓦片服务。

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)来承载地图容器中的图层。

Openlayers测量距离与面积的实现方法

Openlayers测量距离与面积的实现方法

Openlayers测量距离与⾯积的实现⽅法本⽂实例为⼤家分享了Openlayers测量距离与⾯积的具体代码,供⼤家参考,具体内容如下1、地图测量功能⼀般的地图的测量功能主要表现在两个⽅⾯,⼀是测量距离,⼀是测量⾯积;⾯积的测量是根据⿏标绘制的范围,通过地理坐标系的转换⽽计算出实际⾯积⼤⼩,距离的测量是根据⿏标在地图上绘制的点,实时计算出两点之间的实际距离,下⾯我们就在Openlayers3中来实现这⼀功能;2、代码实现<!DOCTYPE html><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title></title><script src="../lib/ol/ol.js"></script><link href="../css/ol.css" rel="stylesheet" /><script src="../lib/jquery/jquery-1.8.2.js"></script><link href="../css/bootstrap.min.css" rel="stylesheet" /><script src="../lib/bootstrap/bootstrap.min.js"></script><style type="text/css">#map {width: 100%;height: 100%;position: absolute;}#menu {float: left;position: absolute;bottom: 10px;left: 10px;z-index: 2000;}.checkbox {left: 20px;}/*** 提⽰框的样式信息*/.tooltip {position: relative;background: rgba(0, 0, 0, 0.5);border-radius: 4px;color: white;padding: 4px 8px;opacity: 0.7;white-space: nowrap;}.tooltip-measure {opacity: 1;font-weight: bold;}.tooltip-static {background-color: #ffffff;color: black;border: 1px solid white;}.tooltip-measure:before,.tooltip-static:before {border-top: 6px solid rgba(0, 0, 0, 0.5);border-right: 6px solid transparent;border-left: 6px solid transparent;content: "";position: absolute;bottom: -6px;margin-left: -7px;left: 50%;}.tooltip-static:before {border-top-color: #ffffff;}float: left;margin-bottom: 10px;}</style><script type="text/javascript">$(function () {//初始化地图var map = new ol.Map({target: 'map',layers: [new yer.Tile({source:new ol.source.OSM()})],view: new ol.View({center: new ol.proj.fromLonLat([114.4250, 23.0890]),zoom: 18,maxZoom: 20})});//定义⽮量数据源var source = new ol.source.Vector();//定义⽮量图层var vector = new yer.Vector({source: source,style: new ol.style.Style({fill: new ol.style.Fill({color:'rgba(255,255,255,0.2)'}),stroke: new ol.style.Stroke({color: '#e21e0a',width:2}),image: new ol.style.Circle({radius: 5,fill: new ol.style.Fill({color:'#ffcc33'})})})});//将⽮量图层添加到地图中map.addLayer(vector);//添加⽐例尺控件var scaleLineControl = new ol.control.ScaleLine({units: 'metric',target: 'scalebar',className: 'ol-scale-line'});map.addControl(scaleLineControl);//创建⼀个WGS84球体对象var wgs84Sphere = new ol.Sphere(6378137);//创建⼀个当前要绘制的对象var sketch = new ol.Feature();//创建⼀个帮助提⽰框对象var helpTooltipElement;//创建⼀个帮助提⽰信息对象var helpTooltip;//创建⼀个测量提⽰框对象var measureTooltipElement;//创建⼀个测量提⽰信息对象var measureTooltip;//继续绘制多边形的提⽰信息var continuePolygonMsg = 'Click to continue drawing the polygon';//继续绘制线段的提⽰信息var continueLineMsg = 'Click to continue drawing the line';//⿏标移动触发的函数var pointerMoveHandler = function (evt) {//Indicates if the map is currently being dragged.//Only set for POINTERDRAG and POINTERMOVE events. Default is false. //如果是平移地图则直接结束if (evt.dragging) {return;}//帮助提⽰信息var helpMsg = 'Click to start drawing';//Get the feature's default geometry.//A feature may have any number of named geometries.//获取绘图对象的⼏何要素var geom = sketch.getGeometry();//如果当前绘制的⼏何要素是多边形,则将绘制提⽰信息设置为多边形绘制提⽰信息 //如果当前绘制的⼏何要素是多线段,则将绘制提⽰信息设置为多线段绘制提⽰信息 if (geom instanceof ol.geom.Polygon) {helpMsg = continuePolygonMsg;} else if (geom instanceof ol.geom.LineString) {helpMsg = continueLineMsg;}}//设置帮助提⽰要素的内标签为帮助提⽰信息helpTooltipElement.innerHTML = helpMsg;//设置帮助提⽰信息的位置//The coordinate in view projection corresponding to the original browser event.helpTooltip.setPosition(evt.coordinate);//移除帮助提⽰要素的隐藏样式$(helpTooltipElement).removeClass('hidden');};//触发pointermove事件map.on('pointermove', pointerMoveHandler);//当⿏标移除地图视图的时为帮助提⽰要素添加隐藏样式$(map.getViewport()).on('mouseout', function () {$(helpTooltipElement).addClass('hidden');});//获取⼤地测量复选框var geodesicCheckbox = document.getElementById('geodesic');//获取类型var typeSelect = document.getElementById('type');//定义⼀个交互式绘图对象var draw;//添加交互式绘图对象的函数function addInteraction() {// 获取当前选择的绘制类型var type = typeSelect.value == 'area' ? 'Polygon' : 'LineString';//创建⼀个交互式绘图对象draw = new ol.interaction.Draw({//绘制的数据源source: source,//绘制类型type: type,//样式style: new ol.style.Style({fill: new ol.style.Fill({color:'rgba(255,255,255,0.2)'}),stroke: new ol.style.Stroke({color: 'rgba(0,0,0,0.5)',lineDash: [10, 10],width:2}),image: new ol.style.Circle({radius: 5,stroke: new ol.style.Stroke({color:'rgba(0,0,0,0.7)'}),fill: new ol.style.Fill({color: 'rgba(255,255,255,0.2)'})})})});//将交互绘图对象添加到地图中map.addInteraction(draw);//创建测量提⽰框createMeasureTooltip();//创建帮助提⽰框createHelpTooltip();//定义⼀个事件监听var listener;//定义⼀个控制⿏标点击次数的变量var count = 0;//绘制开始事件sketch = evt.feature;//提⽰框的坐标var tooltipCoord = evt.coordinate;//监听⼏何要素的change事件//Increases the revision counter and dispatches a 'change' event.listener = sketch.getGeometry().on('change', function (evt) {//The event target.//获取绘制的⼏何对象var geom = evt.target;//定义⼀个输出对象,⽤于记录⾯积和长度var output;if (geom instanceof ol.geom.Polygon) {map.removeEventListener('singleclick');map.removeEventListener('dblclick');//输出多边形的⾯积output = formatArea(geom);//Return an interior point of the polygon.//获取多变形内部点的坐标tooltipCoord = geom.getInteriorPoint().getCoordinates();} else if (geom instanceof ol.geom.LineString) {//输出多线段的长度output = formatLength(geom);//Return the last coordinate of the geometry.//获取多线段的最后⼀个点的坐标tooltipCoord = geom.getLastCoordinate();}//设置测量提⽰框的内标签为最终输出结果measureTooltipElement.innerHTML = output;//设置测量提⽰信息的位置坐标measureTooltip.setPosition(tooltipCoord);});//地图单击事件map.on('singleclick', function (evt) {//设置测量提⽰信息的位置坐标,⽤来确定⿏标点击后测量提⽰框的位置 measureTooltip.setPosition(evt.coordinate);//如果是第⼀次点击,则设置测量提⽰框的⽂本内容为起点if (count == 0) {measureTooltipElement.innerHTML = "起点";}//根据⿏标点击位置⽣成⼀个点var point = new ol.geom.Point(evt.coordinate);//将该点要素添加到⽮量数据源中source.addFeature(new ol.Feature(point));//更改测量提⽰框的样式,使测量提⽰框可见measureTooltipElement.className = 'tooltip tooltip-static';//创建测量提⽰框createMeasureTooltip();//点击次数增加count++;});//地图双击事件map.on('dblclick', function (evt) {//根据var point = new ol.geom.Point(evt.coordinate);source.addFeature(new ol.Feature(point));});}, this);//绘制结束事件draw.on('drawend', function (evt) {count = 0;//设置测量提⽰框的样式measureTooltipElement.className = 'tooltip tooltip-static';//Set the offset for this overlay.//设置偏移量measureTooltip.setOffset([0, -7]);//清空绘制要素sketch = null;//清空测量提⽰要素measureTooltipElement = null;//创建测量提⽰框createMeasureTooltip();//Removes an event listener using the key returned by on() or once(). //移除事件监听ol.Observable.unByKey(listener);//移除地图单击事件map.removeEventListener('singleclick');}, this);function createHelpTooltip() {//如果已经存在帮助提⽰框则移除if (helpTooltipElement) {helpTooltipElement.parentNode.removeChild(helpTooltipElement);}//创建帮助提⽰要素的divhelpTooltipElement = document.createElement('div');//设置帮助提⽰要素的样式helpTooltipElement.className = 'tooltip hidden';//创建⼀个帮助提⽰的覆盖标注helpTooltip = new ol.Overlay({element: helpTooltipElement,offset: [15, 0],positioning:'center-left'});//将帮助提⽰的覆盖标注添加到地图中map.addOverlay(helpTooltip);}//创建测量提⽰框function createMeasureTooltip() {//创建测量提⽰框的divmeasureTooltipElement = document.createElement('div');measureTooltipElement.setAttribute('id','lengthLabel');//设置测量提⽰要素的样式measureTooltipElement.className = 'tooltip tooltip-measure';//创建⼀个测量提⽰的覆盖标注measureTooltip = new ol.Overlay({element: measureTooltipElement,offset: [0, -15],positioning:'bottom-center'});//将测量提⽰的覆盖标注添加到地图中map.addOverlay(measureTooltip);}//测量类型发⽣改变时触发事件typeSelect.onchange = function () {//移除之前的绘制对象map.removeInteraction(draw);//重新进⾏绘制addInteraction();};//格式化测量长度var formatLength = function (line) {//定义长度变量var length;//如果⼤地测量复选框被勾选,则计算球⾯距离if (geodesicCheckbox.checked) {//Return the coordinates of the linestring.//获取坐标串var coordinates = line.getCoordinates();//初始长度为0length = 0;//获取源数据的坐标系var sourceProj = map.getView().getProjection();//进⾏点的坐标转换for (var i = 0; i < coordinates.length - 1; i++) {//第⼀个点var c1 = ol.proj.transform(coordinates[i], sourceProj, 'EPSG:4326');//第⼆个点var c2 = ol.proj.transform(coordinates[i + 1], sourceProj, 'EPSG:4326');//获取转换后的球⾯距离//Returns the distance from c1 to c2 using the haversine formula.length += wgs84Sphere.haversineDistance(c1,c2);}} else {//Return the length of the linestring on projected plane.//计算平⾯距离length = Math.round(line.getLength() * 100) / 100;}//定义输出变量var output;//如果长度⼤于1000,则使⽤km单位,否则使⽤m单位if (length > 1000) {output = (Math.round(length / 1000 * 100) / 100) + ' ' + 'km'; //换算成KM单位 } else {output = (Math.round(length * 100) / 100) + ' ' + 'm'; //m为单位}return output;};//定义⾯积变量var area;//如果⼤地测量复选框被勾选,则计算球⾯⾯积if (geodesicCheckbox.checked) {//获取初始坐标系var sourceProj = map.getView().getProjection();//Make a complete copy of the geometry.//Transform each coordinate of the geometry from one coordinate reference system to another.//The geometry is modified in place. For example, a line will be transformed to a line and a circle to a circle. //If you do not want the geometry modified in place, first clone() it and then use this function on the clone. //克隆该⼏何对象然后转换坐标系var geom = polygon.clone().transform(sourceProj, 'EPSG:4326');//Return the Nth linear ring of the polygon geometry.//Return null if the given index is out of range.//The exterior linear ring is available at index 0 and the interior rings at index 1 and beyond.//获取多边形的坐标系var coordinates = geom.getLinearRing(0).getCoordinates();//Returns the geodesic area for a list of coordinates.//获取球⾯⾯积area = Math.abs(wgs84Sphere.geodesicArea(coordinates));} else {//获取平⾯⾯积area = polygon.getArea();}//定义输出变量var output;//当⾯积⼤于10000时,转换为平⽅千⽶,否则为平⽅⽶if (area > 10000) {output = (Math.round(area/1000000*100)/100) + ' ' + 'km<sup>2</sup>';} else {output = (Math.round(area*100)/100) + ' ' + 'm<sup>2</sup>';}return output;};//添加交互绘图对象addInteraction();});</script></head><body><div id="map"><div id="menu"><label>测量类型选择</label><select id="type"><option value="length">长度</option><option value="area">⾯积</option></select><label class="checkbox"><input type="checkbox" id="geodesic" />使⽤⼤地测量</label></div></div><div id="scalebar"></div></body></html>3、结果展⽰测量距离测量⾯积此外,还能勾选使⽤⼤地测量的复选框,进⾏球⾯距离和⾯积的测量以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

OpenLayers 3 入门教程

OpenLayers 3 入门教程

OpenLayers 3 入门教程Derect By: 黄进摘要OpenLayers 3对OpenLayers网络地图库进行了根本的重新设计。

版本2虽然被广泛使用,但从JavaScript开发的早期发展阶段开始,已日益现实出它的落后。

OL3已运用现代的设计模式从底层重写。

最初的版本旨在支持第2版提供的功能,提供大量商业或免费的瓦片资源以及最流行的开源矢量数据格式。

与版本2一样,数据可以被任意投影。

最初的版本还增加了一些额外的功能,如能够方便地旋转地图以及显示地图动画。

OpenLayers 3同时设计了一些主要的新功能,如显示三维地图,或使用WebGL快速显示大型矢量数据集,这些功能将在以后的版本中加入。

目录基本概念4 Map 4 View 4 Source 5 Layer 5总结6Openlayers 3实践7 1 地图显示71.1创建一副地图71.2 剖析你的地图81.3 Openlayers的资源112 图层与资源122.1 网络地图服务图层122.2 瓦片缓存142.3 专有栅格图层(Bing)182.4 矢量图层202.5 矢量影像233 控件与交互243.1 显示比例尺243.2 选择要素263.3 绘制要素293.4 修改要素314 矢量样式33 4.1矢量图层格式33 4.2矢量图层样式35 4.3 设置矢量图层的样式38基本概念MapOpenLayers 3的核心部件是Map (ol.Map )。

它被呈现到对象target 容器(例如,包含在地图的网页上的div 元素)。

所有地图的属性可以在构造时进行配置,或者通过使用setter 方法,如setTarget ()。

<div id ="map" style ="width: 100%, height: 400px"></div> <script>var map = new ol.Map({target: 'map'}); </script>Viewol. View 负责地图的中心点,放大,投影之类的设置。

OpenLayers入门(一)

OpenLayers入门(一)

OpenLayers⼊门(⼀)OpenLayers简介有如下特点:1. ⽀持任何XYZ⽡⽚资源,同时也⽀持OGC的WMTS规范的⽡⽚服务以及ArcGIS规范的⽡⽚服务2. ⽀持⽮量切⽚,包括pbf、GeoJSON、TopoJSON格式3. ⽀持⽮量图层,能渲染GeoJSON、TopoJSON、KML、GML和其他格式的⽮量数据4. ⽀持OGC制定的WMS、WFS等GIS⽹络服务规范5. ⽀持在移动设备上运⾏6. 可以通过css来为地图控件设置样式7. ⾯向对象开发⽅式,在OpenLayers中万物皆对象和另⼀个流⾏的地图库leaflet不同,openLayers完全是⽤⾯向对象的⽅式开发的,且⼏乎内置了所有地图开发需要的功能,⽽leaflet核⼼库只提供基本功能,其他功能都是通过第三⽅插件进⾏扩展。

使⽤上来说leaflet更容易上⼿,OpenLayers上⼿难度⽐较⼤,所以业务可预见较为简单的建议采⽤leaflet。

OpenLayers虽然很强⼤,但是因为⼀切皆对象,所以使⽤起来很⿇烦,再加上⽆⽐难看的⽂档,所以对新⼿极其不友好,这也是本系列⽂章的初衷,旨在基于实际业务开发的场景下来沉淀⼀些内容,来帮助新⼿使⽤OpenLayers。

这是本系列的第⼀篇,主要介绍地图的实例化、基本的要素操作,后续不定期更新。

本⽂基于OpenLayers v6+版本,代码基于Vue。

安装npm i ol实例化地图<div class="ol-map" ref="olMap"></div>import Map from 'ol/Map'import View from 'ol/View'import { Tile as TileLayer } from 'ol/layer'import {XYZ, OSM} from 'ol/source'import { fromLonLat } from 'ol/proj'// fromLonLat⽅法能将坐标从经度/纬度转换为其他投影// 使⽤内置的OSM//const tileLayer = new TileLayer({// source: new OSM()//})// 使⽤⾼德const tileLayer = new TileLayer({source: new XYZ({url: 'https:///appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}'})})let map = new Map({layers: [tileLayer],view: new View({center: fromLonLat([120.771441, 30.756433]),//地图中⼼点zoom: 15,// 缩放级别minZoom: 0,// 最⼩缩放级别maxZoom: 18,// 最⼤缩放级别constrainResolution: true// 因为存在⾮整数的缩放级别,所以设置该参数为true来让每次缩放结束后⾃动缩放到距离最近的⼀个整数级别,这个必须要设置,当缩放在⾮整数级别时地图会糊 }),target: this.$refs.olMap// DOM容器})这样就可以显⽰⼀个基本的地图:可以拖动和缩放,但是不能旋转,如果需要⽀持旋转,需要加上旋转交互:import {defaults as defaultInteractions,DragRotateAndZoom,} from 'ol/interaction'let map = new Map({// ...interactions: defaultInteractions().extend([new DragRotateAndZoom()])})这样就可以按住shift键时通过⿏标来进⾏旋转地图。

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二维地图使用教程

OpenLayers1 OpenLayers简介OpenLayers是由MetaCarta公司开发的,用于WebGIS客户端的JavaScript包。

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

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

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

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

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

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

OpenLayers所能够利用的地图数据资源“丰富多彩”,在这方面提供给拥护较多的选择,比如WMS、WFS、GoogleMap、KaMap、MSVirtualEarth、WorldWind等等。

当然,也可以用简单的图片作为源。

在操作方面,OpenLayers 除了可以在浏览器中帮助开发者实现地图浏览的基本效果,比如放大(Zoom In)、缩小(Zoom Out)、平移(Pan)等常用操作之外,还可以进行选取面、选取线、要素选择、图层叠加等不同的操作,甚至可以对已有的OpenLayers 操作和数据支持类型进行扩充,为其赋予更多的功能。

例如,它可以为OpenLayers 添加网络处理服务WPS 的操作接口,从而利用已有的空间分析处理服务来对加载的地理空间数据进行计算。

openlayers addfeature方法

openlayers addfeature方法

openlayers addfeature方法(原创实用版4篇)《openlayers addfeature方法》篇1OpenLayers 是一款开源的JavaScript 库,用于在网页上展示地图。

addFeature 方法是OpenLayers 中用于向地图添加地图特征(如点、线、面等)的方法。

要使用addFeature 方法,首先需要创建一个地图对象(Map Object),然后创建一个特征对象(Feature Object),最后将特征对象添加到地图对象中。

下面是一个简单的示例:```javascript// 创建一个地图对象var map = new ol.Map({target: "map", // 地图容器,这里为ID 为"map" 的HTML 元素layers: [ // 添加地图图层new yer.Tile({source: new ol.source.OSM() // 使用OSM 图层})],tools: [ // 添加地图工具new ol.feature.Feature.Draw({radius: 10, // 半径featureType: "water", // 类型,可以是"water" 或"land"enable dragging: true // 是否允许拖动}),new ol.feature.Feature.Draw({radius: 10,featureType: "land",enable dragging: true})]});// 创建一个特征对象var feature = new ol.feature.Feature();feature.setGeometry(new ol.geom.Point(ol.proj.fromLonLat([104, 36]), {radius: 5})); // 以经纬度创建一个点特征// 将特征对象添加到地图对象中map.addFeature(feature);```在这个示例中,我们创建了一个OpenLayers 地图对象,添加了一个OSM 图层和一个水图层。

openlayers 解析 geojson readfeatures

openlayers 解析 geojson readfeatures

在OpenLayers中,可以使用GeoJSON格式来读取和解析地理数据。

你可以使用ol.format.GeoJSON类来读取GeoJSON数据并将其转换为OpenLayers的几何对象。

下面是一个示例代码片段,演示如何使用OpenLayers读取GeoJSON数据并获取其中的要素:javascript复制代码import {Map, View, GeoJSON, Vector as VectorSource} from'ol';import {Feature, Point, Polygon} from'ol/geom';import {Style} from'ol/style';import {Vector as VectorLayer} from'ol/layer';// 创建地图和视图const map = new Map({target: 'map',layers: [new VectorLayer({source: new VectorSource({features: []})})],view: new View({center: [0, 0],zoom: 2})});// 读取GeoJSON数据fetch('path/to/geojson/file.geojson').then(response => response.json()).then(data => {const format = new GeoJSON();const features = format.readFeatures(data);// 遍历要素并将它们添加到地图中features.forEach(feature => {const geometry = feature.getGeometry();const style = new Style({fill: new ol.style.Fill({color: 'rgba(255, 255, 255, 0.1)'}),stroke: new ol.style.Stroke({color: '#ffcc33', width: 2}),image: new ol.style.Circle({radius: 7, fill: new ol.style.Fill({color:'#ffcc33'})})});feature.setStyle(style);map.getLayers().item(0).getSource().addFeature(feature);});});在上面的代码中,我们首先创建了一个空的地图和一个视图。

openlayers5-webpack入门开发系列结合turf.js实现等值线(附源码下载)

openlayers5-webpack入门开发系列结合turf.js实现等值线(附源码下载)

openlayers5-webpack⼊门开发系列结合turf.js实现等值线(附源码下载)前⾔openlayers5-webpack ⼊门开发系列环境知识点了解:webpack 打包管理⼯具需要依赖 node 环境,所以 node 安装包必须安装,上⾯链接是官⽹下载地址详细的 webpack ⽂档配置介绍,适合新⼿查看,我也是边看边学,我这边⽤ vscode⼯具编译开发前端项⽬,个⼈觉的这款⼯具还不错,详细介绍 openlayers5 每个类的函数以及属性等等内容概览openlayers5 结合 turf.js 实现等值线源代码 demo 下载效果图如下:关键函数 turf.pointGrid,从边界框,FeatureCollection 或 Feature创建点⽹格关键函数turf.isolines,采⽤具有z值和值中断数的 Point 要素的⽹格 FeatureCollection 并⽣成等值线关键函数 turf.bezierSpline,通过应⽤ Bezier 样条算法获取⼀条线并返回弯曲版本核⼼代码如下:import {Map, View} from 'ol';import TileLayer from 'ol/layer/Tile';import XYZ from 'ol/source/XYZ';import 'ol/ol.css';import Style from 'ol/style/Style';import Fill from 'ol/style/Fill';import Stroke from 'ol/style/Stroke';import CircleStyle from 'ol/style/Circle';import GeoJSON from 'ol/format/GeoJSON';import VectorSource from 'ol/source/Vector';import VectorLayer from 'ol/layer/Vector';import * as turf from "@turf/turf";/**根据要素feature动态渲染样式符号*/function styleFunction(feature) {var tem = feature.get("temperature");//获取属性temperature值var colors = ["#5a9fdd", "#f7eb0c", "#fc9e10", "#f81e0d", "#aa2ab3"];//定义颜⾊分组var color = colors[parseInt(tem/2)];//根据属性值来计算对应的颜⾊值return new Style({fill: new Fill({color: color}),stroke: new Stroke({color: color,width: 4}),image: new CircleStyle({radius: 5,fill: new Fill({color: color}),stroke: new Stroke({color: '#fff',width: 1})})});}var extent = [72.8613, 20.0559, 133.9453, 54.5721];//⽹格点插值范围经纬度var cellWidth = 3;//等距点,单位为经纬度var pointGrid = turf.pointGrid(extent, cellWidth, {units: 'degrees'});//创建等距点的⽹格,单位为经纬度for (var i = 0; i < pointGrid.features.length; i++) {pointGrid.features[i].properties.temperature = Math.random() * 10;//随机0-10之间随机赋值温度属性值temperature }……完整demo源码见⼩专栏⽂章尾部:⽂章尾部提供源代码下载,对本专栏感兴趣的话,可以关注⼀波。

openlayers foreachfeature 用法 -回复

openlayers foreachfeature 用法 -回复

openlayers foreachfeature 用法-回复OpenLayers是一个开源的JavaScript库,用于显示地理空间数据在Web 上进行交互。

其提供了丰富的功能和工具,包括地图展示、标注、交互、空间查询等。

本文将重点介绍OpenLayers中的foreachFeature方法的用法和功能。

foreachFeature方法是OpenLayers中一个非常有用的方法,它可以轻松地对地图中的每个要素进行迭代并执行相应的操作。

无论是在初始化地图时加载要素,还是在用户与地图进行交互时更新要素,foreachFeature 方法都可以帮助开发者处理要素数据。

下面我们将一步一步回答有关foreachFeature方法的用法和使用步骤。

第一步:创建地图对象和要素图层。

在使用foreachFeature方法之前,我们首先需要创建一个OpenLayers 地图对象,并创建一个要素图层用于存储要素数据。

要素图层可以包含多个要素。

javascriptvar 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: 4})});var vectorLayer = new yer.Vector({source: new ol.source.Vector()});map.addLayer(vectorLayer);第二步:创建要素并加入要素图层。

接下来,我们可以创建一些要素,并将它们添加到要素图层中。

要素可以是点、线、面等地理空间对象。

javascriptvar features = [new ol.Feature({geometry: new ol.geom.Point(ol.proj.transform([0, 0],'EPSG:4326', 'EPSG:3857')),name: 'Point 1'}),new ol.Feature({geometry: new ol.geom.Point(ol.proj.transform([10, 10], 'EPSG:4326', 'EPSG:3857')),name: 'Point 2'}),new ol.Feature({geometry: new ol.geom.Point(ol.proj.transform([20, 20], 'EPSG:4326', 'EPSG:3857')),name: 'Point 3'})];vectorLayer.getSource().addFeatures(features);第三步:使用foreachFeature方法迭代要素并执行操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

OpenLayers教程1开始使用openlayers1.1设置先到它的官方网站下载他的压缩包,解压。

拷贝目录下的OpenLayer.js、根目录下的lib目录、根目录下的img目录到你网站的Scripts目录下(当然,这个只是例子,您网站的目录结构您自己说得算,只要保证OpenLayers.js,/lib,/img在同一目录中即可)。

然后,创建一个****.html作为查看地图的页面。

2试验openlayers环境:geoserver1.7Openlayers2.4Dreamviever82.1第一个地图窗口目标:用openlayers加载geoserver wms。

步骤:(1)空白html文件(2)插入div-map(3)为div付风格以上为未加载地图的静态页面代码为:效果为:(4)插入openlayers代码引用<link rel="stylesheet" type="text/css" href="../theme/default/style.css"/><script src="OpenLayers.js" type="text/javascript"></script>(5)写js代码,主要是init()第一个地图窗口就完成了注1.js中defer的作用是页面加载完成后,执行脚本。

注2.2222.2控制地图与div的占据区域目标:让地图默认占满展现区方法:设置map的options,由其中两个因素决定:maxExtent-最大地图边界;maxResolution-最大解析度。

当maxExtent设置为地图的最大边界后,maxResolution设置为auto,那地图就占满DIV。

var options = { controls: [],maxExtent: bounds,maxResolution: "auto",projection: "EPSG:4326",numZoomLevels: 7,units: 'degrees'};map = new OpenLayers.Map('map',options);2.3地图控制-尺度缩放目标:填加尺度缩放控件步骤:(1)map初始化赋参数var options = {controls: [],//scales: [50000000, 30000000, 10000000, 5000000],maxExtent: bounds,maxResolution: "auto",projection: "EPSG:4326",numZoomLevels: 7, (表示有几个缩放级别)units: 'degrees'};map = new OpenLayers.Map('map',options);(2)填加控件,代码map.addControl(new OpenLayers.Control.PanZoomBar({position: new OpenLayers.Pixel(2, 15)(右边距,上边距)}));思考:级别的计算,个人推测由(maxResolution- minResolution)/ numZoomLevels,但是默认值是书面日后再细究。

2.4地图控制-鼠标坐标拾取目标:地图上鼠标移动拾取步骤:map.addControl(new OpenLayers.Control.MousePosition());注1.Control的构造函数可以带参数,var control = new OpenLayers.Control({div: myDiv});例如:map.addControl(newOpenLayers.Control.MousePosition({element: $('location')}));就是制定在页面的location元素位置显示坐标。

注2.2注3.22.5地图控制-其他几个常用控件初次、初级使用初次使用,就只写下代码与作用,至于参数以后用到进行研究。

(1)鼠标拖动、滚轴放大缩小,自带一个拉框放大。

map.addControl(new OpenLayers.Control.MouseToolbar());(2)图层控制map.addControl(new yerSwitcher({'ascending':false}));(3)填加永久链接map.addControl(new OpenLayers.Control.Permalink());(4)鹰眼窗口map.addControl(new OpenLayers.Control.OverviewMap());(5)默认的键盘操作支持,比如pageup、 等map.addControl(new OpenLayers.Control.KeyboardDefaults());1Openlayers关于数据加载1.1GML目标:加载GML图层步骤:gmlLayer=new yer.GML("GML","gml/polygon.xml",{isBaseLayer: true} );//map.addLayers([untiled,gmlLayer]);map.addLayer(gmlLayer);注1.isBaseLayer属性确定该图层是否是基础图层。

1.2其他类型数据加载目前还不需要深究,暂不研究。

2要素编辑关于openlayers里的要素编辑,就是客户端的操作,因此分为操作和保存两个环节研究。

2.1关于矢量要素的填加分为点、线、多边形以一段例子来说明要素的填加。

<html xmlns="/1999/xhtml"><head>……<script src="OpenLayers.js"></script><script type="text/javascript">var map, drawControls;OpenLayers.Feature.Vector.style['default']['strokeWidth'] = '2';//****************************************************************** **********①初始化函数,填加一个基础图和一个矢量图层//****************************************************************** **********function init(){map = new Ope-nLayers.Map('map');var wmsLayer = new yer.WMS("OpenLayers WMS","/wms/vmap0",{layers: 'basic'});var vectors = new yer.Vector("Vector Layer");map.addLayers([wmsLayer, vectors]);//****************************************************************** **********②定义一个Control参数对{point:画要素点,line:画线,polygon:画多边形,select:要素选择,selecthover:要素选择}-//****************************************************************** **********drawControls = {point: new OpenLayers.Control.DrawFeature(vectors, OpenLayers.Handler.Point),line: new OpenLayers.Control.DrawFeature(vectors, OpenLayers.Handler.Path),polygon: new OpenLayers.Control.DrawFeature(vectors, OpenLayers.Handler.Polygon),select: new Open―――Layers.Control.SelectFeature(vectors,{clickout: false, toggle: false,multiple: false, hover: false,toggleKey: "ctrlKey", // ctrl key removes from selectionmultipleKey: "shiftKey", // shift key adds to selectionbox: true}),selecthover: new OpenLayers.Control.SelectFeature(vectors,{multiple: false, hover: true,toggleKey: "ctrlKey", // ctrl key removes from selectionmultipleKey: "shiftKey" // shift key adds to selection})};//****************************************************************************③控制动作选择//****************************************************************** **********for(var key in drawControls) {map.addControl(drawControls[key]);}map.setCenter(new OpenLayers.LonLat(0, 0), 3);}function toggleControl(element) {for(key in drawControls) {var control = drawControls[key];if(element.value == key && element.checked) {control.activate();} else {control.deactivate();}}}//****************************************************************** **********④控制撤销选择动作//****************************************************************** **********function update() {var clickout = document.getElementById("clickout").checked;drawControls.select.clickout = clickout;var hover = document.getElementById("hover").checked;drawControls.select.hover = hover;drawControls.select.box = document.getElementById("box").checked;if(drawControls.select.active) {drawControls.select.deactivate();drawControls.select.activate();}}</script></head><body onload="init()"><h1 id="title">OpenLayers Select Feature Example</h1><p id="shortdesc">Select a feature on hover or click with the Control.SelectFeature on avector layer.</p><div id="map" class="smallmap"></div><ul id="controlToggle"><li><input type="radio" name="type" value="none" id="noneToggle"onclick="toggleControl(this);" checked="checked" /><label for="noneToggle">navigate</label></li><li><input type="radio" name="type" value="point" id="pointToggle"onclick="toggleControl(this);" /><label for="pointToggle">draw point</label></li>。

相关文档
最新文档