关于webgis:或许是-WebGIS-下一代的数据规范-OGC-API-系列

1. 前言1.1. 经典的 OGC 规范回顾直至今日,GeoServer 仍在发挥作用,WebGIS 的几大服务规范仍在利用: WMS,网络地图服务WMTS,网络瓦片地图服务WFS,网络因素服务这三个应该是耳熟能详的了,还有其它的就不列举了,本篇的重点并不是介绍这些现行标准,下面三个规范的速查可参考我往期的文章。 1.2. 独特特点与时代变动现有规范,有一些独特的特点。比方,申请行为较为依赖 XML —— 起因之于“大前端”还未流行的年代,后端罕用 XML,前端就只能用浏览器 API 解析返还的 XML。譬如,WFS 的批改因素的事务操作(Transaction,个别称之为 WFS-T),那写在申请体中的 XML 应用 JavaScript 来编写,就显得比拟干燥简短。 而当初,前后端职能拆散,前端倒退也引人注目,地图开发中,前端大多数时候更心愿发送、失去的是 JS 引擎更容易解析的 JSON,而不是 XML。 明天要介绍的这一套 OGC API,是 OGC 组织在 2 年前就始终在致力、下功夫的,他们把原来的 OGC 官网域名改了,LOGO 换了,甚至为这套 API 开拓了一个新的网站。 1.3. 免责申明本文书写于 2022 年 7 月,这套 API 仍未齐全落地,本文仅作为疏导作用,并不能作为指导作用,所有以读者所在工夫点的状况为准,我介绍这套 API 仅仅是为了这个风尚塌实的行业带来点音讯,毕竟 OGC 官网这么大动作,国内居然找不到一篇文章,哪怕是简略介绍的都好啊。 本文仅保留著作权、解释权,欢送具名转载。 2. 什么是 OGC API2.1. OGC API 是一个凋谢、动静的标准族OGC API 目前有 13 个子类(含一个公共定义),而在去年的时候只有 9 个。只有合乎 OGC API 公共定义,就能够为行业中新生的数据需要制订网络申请接口标准。 ...

July 20, 2022 · 4 min · jiezi

关于webgis:OGC-WebGIS-常用服务标准WMSWMTSTMSWFS速查

本文只介绍理论工作中罕用的 WMS、WMTS、WFS、TMS 四种,WCS、WPS 等其它 OGC WebService 类型请自行查阅官网材料。 0. 参数传递形式键值对RESTful APISOAP三种形式对于下文列举的服务并不是全都存在的,例如 WMS 就只有第一种。 本文不介绍 SOAP 形式(因为太简单了)。 1. WMS 速查以 1.1.0 版本为参考。 1.1. 能力GetCapabilitiesGetMapGetFeatureInfo1.2. 获取地图图片举例(GetMap)以这样一个申请地址为例: http://localhost:4800/geoserver/spatial_base/wms?<queryString>queryString 即查问字符串,我把它列成表格: paramvaluedescserviceWMS服务类型version1.1.0服务版本requestGetMap办法layersspatial_base:guangxi_cities哪个图层bbox104.450889587402,20.8992862701416,112.061851501465,26.3855667114258要多大范畴width768要返回的图像像素宽height553要返回的图像像素高srsEPSG:4326用哪个坐标系styles""用什么款式,缺省要给空字符串formatimage/png格局GeoServer 的 layers 参数,是“工作空间名:图层名”这样的组合。那么,它返回的就是一张图: 这是最惯例的应用“键值对”,也就是 queryString 来申请地图的 WMS 用法。 1.3. 在 CesiumJS 和 OpenLayers6 中应用 GeoServer WMS在 CesiumJS 中: new Cesium.WebMapServiceImageryProvider({ url: 'http://localhost:4800/geoserver/spatial_base/ows', layers: 'spatial_base:guangxi_cities', parameters: { transparent: true, format: 'image/png', },})只须要保障坐标系适合即可,当然,url 的 ows 也能够改为 wms。 OWS 只是 GeoServer 上的一个通配符,如果你晓得你想用的是什么服务,能够不写 ows,例如本例,能够间接写 'http://localhost:4800/geoserv...'在 OpenLayers6 中: ...

July 19, 2022 · 5 min · jiezi

关于webgis:OpenLayers-613-新特性

1 概述6.13 版本带来了一些新个性: 对于每个图层对象,你能够应用 layer.getData() 办法来获取它的像素数据类 ol/style/Text 反对了富文本标签,能够在一个标签中用不同的字体、款式了模块 ol/proj 中,useGeographic() 和 setUserProjection() 办法当初曾经是官网 API 了,这两个办法使得地理坐标或部分投影坐标系的应用更简略改良晋升了 WebGL 瓦片和点图层改善了 ol/Feature 的性能,当其没有回调时防止事件的创立降级 geotiff.js 到第二版,修复了一些社区反馈的问题修复了主动生成的 Typescript 类型2 细节2.1 新办法 - layer.getData()栅格图层(动态图像、影像瓦片、数据瓦片)当初都领有了 layer.getData(pixel) 办法,能返回给定 pixel 处的像素数据。返回值取决于图层的数据类型。 例如,GeoTIFF 返回的是 Float32Array,即每个波段一个值;而对于 PNG 动态图片渲染的瓦片图层,则返回代表了 RGBA 值的 Uint8ClampedArray 数组。 如果你之前应用的是 map.forEachLayerAtPixel() 办法,那么你就应该用这个新的办法作为代替。旧的这个办法是从多个图层取值并合成一个变量返回的,并且仅限于 RGBA 数值。新的办法不仅批改了这个问题,而且性能更好。 2.2 弃用办法 - map.forEachLayerAtPixel()map.forEachLayerAtPixel() 办法将于下个次要发行版本中移除。

March 2, 2022 · 1 min · jiezi

关于webgis:Web-GIS原理与应用开发读书笔记8

以下均掺杂集体了解书目:Web GIS 原理与利用开发 —— 刘光 曾敬文 曾庆丰 著 第九章 Web因素服务为了标准通过Web服务发送矢量数据的过程,OGC制订了Web因素服务(WFS)标准。 9.1 WFSWeb GIS服务器除了能返回一张地图图像之外,也能够返回绘制该地图图像所应用的的实在天文数据。这类返回天文因素数据的标准称为Web因素服务。 WMS是由服务器将一地图图像发送给客户端 而WFS是服务器将矢量数据发送给客户端 应用WMS时地图由服务器绘制,应用WFS时地图由客户端绘制。 9.1.1 WFS申请与响应的格局与WMS相似,WFS也反对一些操作,如:GetCapabilities、DescribeFeatureType、GetFeature 其中GetFeature操作用于获取因素数据 例:http://suite.opengeo.org/geos...:states&featureid=states.23 该申请中,service=wfs示意应用WFS服务,version=1.1.0示意应用1.1.0版本,request=GetFeature示意执行GetFeature操作,typename=usa:states示意针对的是GeoServer服务器中USA工作区的名为states的图层,featureid=states.23示意要获取的因素的ID为23 WFS应用天文标记语言(Geography Markup Language,GML)返回数据。GML能够同时蕴含图形与属性信息。因为GML是基于XML的,因而比GeoJSON要简短得多。 9.1.2 WFS服务器与客户端ESRI应用本身的因素服务,与WFS性能相似,但不是规范的WFS 对于大多数Web地图API,能够将WFS作为一个图层 不过Leaflet以及许多其余轻量级的开源Web地图API中,并不反对WFS 客户端GIS软件个别都能查看WFS服务 9.2 事务性WFS与基于Web的数据编辑WFS标准同时定义了因素编辑的规定 通过WFS服务对源数据库中的数据进行更改称为事务性WFS或WFS-T 启用事务性能后,WFS客户端就能够应用事务性WFS办法更改天文数据库中的数据。 利用更改示例: WFS客户端连贯到启用事务的已公布WFS服务在服务器上锁定所编辑的因素和行(可应用GetFeatureWithLock申请执行此操作)在WFS客户端上应用WFS编辑器执行编辑随后在服务器上利用编辑(可应用事务性WFS办法执行此操作)因素被锁定后,其余WFS编辑器就无奈对其进行编辑了,直到编辑实现或者工夫超时解除锁定。 插入事务不要求锁定因素,因为现有因素不能被批改(更新或删除),所以不用调用GetFeatureWithLock。 任何要求更新或删除的事务申请必须有锁定ID 事务性WFS可用来减少、删除或者批改加载的因素,更重要的是能将该操作提交并保留到数据源中。因而,数据源必须存储在空间数据库中,而不能存储在文件中。 第十章 WCS及多维数据对于栅格数据服务,OGC制订的是WCS(Web Coverage Services,网络覆盖服务)。WCS服务所返回的数据可作为剖析和建模操作的输出参数。通过WCS服务获取的栅格数据集被称为笼罩。 10.1 WCS及其操作WCS是由OGC创立的用于在Web上共享笼罩地理信息的凋谢标准。 笼罩指示意空间变动景象的地理信息 尽管WCS和WMS从服务器上返回的都是图像,然而WCS能更多的详细信息。 WCS反对操作: 申请服务级别元数据和数据的简要形容——GetCapabilities申请一个或多个笼罩的残缺形容——DescribeCoverage以熟知的格局申请笼罩——GetCoverage10.1.1 GetCapabilities操作GetCapabilities操作用于失去WCS服务器所反对的操作和服务(能力)的列表。 例:http://www.example.com/wcs?se... 通过申请获取笼罩的ID之后,便可执行DescribeCoverage操作了。 要留神的是:版本不同,返回的id的参数名可能不同,要查看数据确定其参数名 10.1.2 DescribeCoverage操作DescribeCoverage操作容许客户端申请某个WCS服务的一个或多个栅格图层的全副形容信息。 服务器会返回形容所申请的笼罩图层详细信息的XML文档。 次要申请参数: 申请参数是否必须形容service=WCS是服务类型request=DescribeCoverage是申请名称version是申请的WCS服务的版本identifiers是指定所要申请的图层例:http://localhost:8080/geoserver/ows?service=WCS&version=1.1.1&request=DescribeCoverage&identifiers=nruc:mosaic 10.1.3 GetCoverage操作通过GetCapabilities和DescribeCoverage能够理解服务器端容许哪些申请以及哪些数据是能够获取的,而后进行GetCoverage操作,该操作最终返回指定天文范畴内指定域值内的某栅格数据。 除了service、request、version、identifiers参数值之外,还须要蕴含: domainSubset参数:该参数定义所要申请笼罩的时空范畴。它又蕴含boundingBox(必选)和temporalSubset(可选)两个参数。 boundingBox:指定天文范畴temporalSubset:指定工夫范畴output参数:指定输入设置。该参数又包含: GridCRS:返回数据的天文参照零碎,可选format:返回数据的格局,必选store:“true”示意须要服务器把返回数据的所有内容存储在一个网络地位,并返回其URL;“false”示意须要服务器间接返回数据;二者可选例:http://localhost:8080/geoserver/ows?service=WCS&Version=1.1.1&REQUEST=GetCoverage&Identifier=nruc:mosaic&BoundingBox=36.492,6.346,46.591,20.83,urn:orc:def:crs:EPSG::4326&Format=image/png&Store=true 因为版本问题,可能导致openlayer在加载WCS时,图像的坐标轴发生变化(图像旋转90度) 解决方案:在申请参数中增加GridBaseCRS参数 例:http://localhost:8080/geoserver/ows?service=WCS&Version=1.1.1&REQUEST=GetCoverage&Identifier=nruc:mosaic&BoundingBox=36.492,6.346,46.591,20.83,urn:orc:def:crs:EPSG::4326&GridBaseCRS=EPSG:4326&Format=image/png&Store=true 10.2 多维数据与图像镶嵌插件天文数据,特地是遥感数据,通常是多维的。如:多波段,多时段,多高程等 ...

March 16, 2021 · 1 min · jiezi

关于webgis:Web-GIS原理与应用开发读书笔记7

第七章 在客户端绘制矢量数据以下均掺杂集体了解书目:Web GIS 原理与利用开发 —— 刘光 曾敬文 曾庆丰 著 HTML5的呈现为浏览器提供了一系列全新的性能。Canvas的问世晋升了GIS在web端的用户体验。 客户端绘制专题图层:将原始数据发送到客户端,由客户端负责绘制。所有的简单符号零碎和地图绘制性能将转移到客户端,使服务器只须要提供原始的矢量数据和属性数据。这意味着在地图引擎能够更无效地响应,以加强交互性以及晋升性能。 7.1 在客户端绘制矢量数据的劣势和挑战浏览器并没有GIS的概念,但其能够绘制矢量图形。绘制矢量数据其实是将屏幕坐标与符号连贯的过程。 7.1.1 客户端绘制矢量数据的劣势Web赌徒用户与数据的交互十分迅速,不会有任何提早地图上的各类事件能够由浏览器间接解决,无需再向服务器发送申请。 加强零碎的稳定性如果每次鼠标悬停都向服务器发送申请,拜访数量过多时,应用程序必然会陷入瘫痪。 7.1.2 客户端绘制矢量数据的挑战如果须要同时绘制成千盈百个因素,或者绘制蕴含大量结点的多边形,服务器仍是最佳抉择。起因:如果浏览器一次绘制的矢量图形过多,响应速度会变得及其迟缓。 解决方案:针对每个比例尺(至多是小比例尺),将要在客户端绘制的图层数据尽可能的进行综合(设置数据的显示范畴) 标注的渲染问题起因:浏览器没有弱小的标注地位搁置算法,后果可能是标注互相叠加。 解决方案:通过交互发现标注(如点击因素弹出窗口或者在div中显示其信息) Web浏览器提供的符号的抉择比拟根本7.1.3 客户端如何绘制矢量数据对于一些简略的独立的矢量因素:OpenLayers中的Markers类对于简单的图层:Leaflet的FeatureGroup类、ESRI的FeatureLayer类、OpenLayers的Vector类7.1.4 从服务器获取数据的办法OpenLayers中的Fixed策略 在图层加载时获取所有的数据。该办法在初始化时性能会有所损失,然而尔后再也不须要向服务器发送其余申请,因而确保了应用程序随后的响应速度。该办法不适宜十分大的数据量。OpenLayers中的BBOX策略 只获取以后地图视图范畴内的数据。当地图视图扭转时,再向服务器发送新的申请。对于数据量大的数据,一次性申请过去不事实,能够采纳此办法按需申请。疾速缩放或者平移时,应用程序无奈快速反应。OpenLayers中的Filter策略 依据过滤或查问条件只从数据集中获取局部因素的矢量数据。该办法能放大申请数据的范畴。既防止了下载所有的数据,又保留了Fixed策略的高响应成果。OpenLayers中的Refresh策略 改良版本。在指定工夫距离内从新获取所有数据。表白一直变动的数据时十分无效(如航班、汽车地位等)更多详细信息拜访:http://dev.openlayers.org/doc... 7.2 应用KML矢量数据KML能够由因素和栅格元素组成,这些元素包含点、线、面和影像,以及图像、图片、属性和HTML等相干内容。 单个KML文件能够蕴含不同类型的因素,并可蕴含影像。 KML中最重要的XML标签是地标(placemark),它定义了一些天文因素、一些符号以及其余一些可显示在弹出窗口中的额定信息。 // 在openlayers中应用KMLconst sundials = new OpenLayers.Layer.Vector("KML", { projection: map.displayProjection, strategies: [new OpenLayers.Strategy.Fixed()], protocol: new OpenLayers.Protocol.HTTP({ url: "kml地址", format: new OpenLayers.Format.KML({ extractStyle: true, extractAttribute: true }) })})map.addLayers([wms, sundials])7.3 应用GeoJSONGeoJSON的次要特点是基于JavaScript对象表示法,这样就十分不便解析其几何图形与字段。 GeoJSON相比于KML要小很多,加载速度较快。然而不像KML蕴含款式信息,须要自行编写款式代码。 // 在openlayers中应用GeoJSONconst vector = new OpenLayers.Layer.Vector("GeoJSON", { projection: "EPSG:4326", strategies: [new OpenLayers.Strategy.Fixed()], protocol: new OpenLayers.Protocol.HTTP({ url: "GeoJSON文件地址", format: new OpenLayers.Format.GeoJSON() })})

March 9, 2021 · 1 min · jiezi

关于webgis:Web-GIS原理与应用开发读书笔记6

第六章 应用Web地图API拜访地图服务以下均掺杂集体了解书目:Web GIS 原理与利用开发 —— 刘光 曾敬文 曾庆丰 著 6.1 Web地图APIAPI:Application Programming Interface,利用程序接口。是编写程序的一个框架,蕴含了一组封装了底层代码的类与性能。 API并不是一种编程语言,只是某种语言或者某些语言可调用的一组类和性能 6.1.1 Web地图API的抉择运行在挪动端或者pc端应用程序或者是浏览器查看开发与保护的难度开源API或者是商业API等等方面6.1.2 次要FOSS类型的Web地图API6.1.2.1 OpenlayersOpenlayers采纳面向对象形式开发,并应用来自Prototype.js和Rico中的一些组件。 较为成熟,尽管文档较难了解,然而有大量的实例,还有社区。 6.1.2.2 Leaflet玲珑不便,易于上手,在挪动设施上有良好的体验。 强调应用切片地图以及客户端的矢量图<u>绘制</u>。 实例较少 6.1.2.3 D3罕用于绘制图表 将数据绑定到页面的DOM(文档对象模型)上,而后利用数据驱动转换到文档(页面元素),从而实现数据灵便地动画与变换成果。 6.1.2.4 Polymaps在地图风格化方面有一个相似于CSS的选择器 6.1.3 次要的商业Web地图API6.1.3.1 谷歌地图与必应地图API6.1.3.2 ArcGIS APIs6.2 应用Web地图API的根本步骤尽管API应用办法不尽相同,每种API都是本人的长处和毛病,然而这个API都有一些通用模式与过程。 该形式为HTML页面援用形式,若应用框架开发,还需理解框架的具体操作办法。 6.2.1 援用Javascript与款式文件在应用前,须要在html的head标签内,对API进行援用。 须要留神的是:援用的js越多,页面加载工夫越长(页面的js是通过网络申请获取到的) 援用API的形式: 将API下载并部署到本人的服务器上,这样做的益处是将加载工夫减到最小,而且能够自定义API。援用别人服务器上的API。内容散发网络(Content Delivery Network ,CDN)站点专门用于存储通用API。对于Web地图API,在援用js文件的同时,个别会有配套的款式文件(css)须要援用。 6.2.2 地图div与对象在创立地图对象前,须要在页面创立一个div元素,用于显示地图,一个div对应一个地图对象,个别通过id属性进行绑定。 6.2.3 Layer对象在某种意义上,图层就代表WMS或者切片地图的一个Web服务,它自身也能够蕴含许多数据图层 图层对象通常是一个抽象类,提供一系列通用的属性办法,开发人员不能间接对其进行实例化,而是实例化它的子类(如ArcGIS APIs中的WMSLayer、FeatureLayer、GraphicsLayer等等) 创立好Layer对象后,不要遗记将其增加至地图对象中 6.2.4 图层款式化机制对于从服务端获取的地图元素来说,款式曾经提前定义好了,而对于在客户端动静绘制的地图元素,咱们须要为其定义款式,API会提供一些定义款式的办法,包含符号、填充色彩、填充款式等等。 6.2.5 事件与交互元素最罕用的交互有两类,一类为鼠标或键盘事件,一类为图层显示管制 API会提供地图的事件监听,创立监听对象时能够定义事件产生的回调函数 图层显示管制即管制某个图层的显示与暗藏。须要留神的是,切片服务无法控制外部某个图层,只能管制整体 6.2.6 异步解决在Web地图API中,大部分操作都是异步的,这就要求咱们解决好代码运行的先后问题。 若没有解决好,在运行过程中通常会呈现的情况是某后果变量为undefined。 最根底的解决方案是在回调函数中定义回调函数,若回调过长会呈现回调天堂,大大降低代码可浏览性。 较好的解决方案为应用promise或promise配合es6的async函数。 有些API也提供链式调用的计划。

March 8, 2021 · 1 min · jiezi

关于webgis:Web-GIS原理与应用开发读书笔记5

第五章 切片地图以下均掺杂集体了解书目:Web GIS 原理与利用开发 —— 刘光 曾敬文 曾庆丰 著 如果要进步Web地图的访问速度,应用地图切片的十分无效的办法。 地图切片就是在多个比例尺下配置地图,提前把每个比例尺下的地图绘制成小块图片,保留在服务器上的缓存目录中 5.1 为什么应用切片地图为了使Web GIS更加贴近桌面零碎。Web GIS有桌面零碎所没有的劣势,但其渲染能力以及加载速度却不迭桌面零碎。 切片地图采纳的是金字塔模型,是一种多分辨率层次模型,从切片金字塔的底层到顶层,比例尺越来越小,分辨率越来越低,但示意的天文范畴不变。(比方校园范畴的切片,放大看清晰了即比例尺增大分辨率进步,但其范畴仍是这个校园) 切片地图通常都带有一个级别、行、与列的编号计划,以便将来自多个切片地图服务的切片搁置到正确的地位。 Web GIS利用由此分为两类: 一类是具备图层排序与调整符号色彩等性能,但响应十分缓慢的俊俏的地图利用。一类是没有图层管制,但具备惊人好看并且疾速响应的地图利用。如果一个Web GIS利用有成千上万用户并发拜访,那么切片地图是惟一的正当解决方案 目前的计划之前也介绍过,将图层分为根底底图和专题图层,根底底图应用地图切片,专题图层应用动静服务。 5.2 何时应用地图切片若心愿根底底图可能疾速漫游或者多并发拜访,应该应用地图切片 若专题图层中地物因素的地位与属性不常常变换,也可应用地图切片 之前提到过地图切片只反映生成切片时的状况,这就要求咱们必须定期创立新的切片 对于一些大规模的切片,管理员只针对比变换畛域更新切片,这就须要记录编辑过的中央或者比照几个版本的数据 5.2.1 是否有满足需要的切片地图创立切片底图须要大量丰盛的数据、高端的地图制作软件和制图技巧,以及潜在的大量工夫和磁盘空间。 如果决定创立本人的根底底图,那么对于制图有教训的制图人员是必不可少的,地图都该当有适合的符号、色彩以及相应的具体水平。 如果底图中还有影像图,则须要新创建一套适配影像图的符号零碎。 5.2.2 投影创立地图切片能够应用任何坐标系,然而如果想要将专题图层叠加在根底底图上,则要求其天文参考统一,否则会产生偏移(没有偏移是因为目前很多API会帮忙咱们动静投影) 目前的OpenStreetMap、谷歌、微软、ERSRI切片地图应用的是web墨卡托投影(EPSG:3785) !须要留神的是web墨卡托投影下不能使用量测性能,包含线的长度以及多边形的面积。即便是在中纬度地图,后果偏差依然惊人,甚至能够偏差一倍。 解决方案参考博客:https://www.esri.com/arcgis-b... 解决方案:在拉框获取待测图形(graphic)之后,发送往服务器之前,对图形做一步投影转换的操作(能够封装成为一个函数) 5.2.3 比例尺根底底图与专题图层叠加时不仅要思考投影,还要思考比例尺,因为地图切片的比例尺是确定的 对于比例尺:最小比例尺是将整个世界 搁置在2×2的网格中,每个网格的大小是256像素×256像素,即1:295829355.45。这样的数字不便于应用,所以对比例尺进行了分级(1级-23级),下表仅列举了局部 级别地图高和宽(像素)高空分辨率(米/像素)地图比例尺(96 dpi)151278271.51701:295829355.45581924891.96981:18489334.7210262144152.87411:577791.711583886084.77731:18055.99202684354560.14931:564.252321474836480.01871:70.535.3 创立与提供切片地图服务的策略地图切片个别都采纳简略的文件夹构造,以便提供服务 以后根本有两种形式组织: 将切片图像以文件夹的构造放在服务器上,用户间接申请文件长处:只须要将独自的切片图像组织在代表比例级别、行和列的文件夹构造中,API通过拜访蕴含代表级别、行和列构造的URL进行拜访(http://{s}.somedomain.com/.../{z}/{x}/{y}.png 示意拜访z比例下x行y列的切片) 毛病:服务器切片构造裸露在外 将切片以Web服务的形式提供拜访长处:文件的组织模式对用户是不可见的(http://somedomain.com/.../?qt... 示意拜访10比例下123行456列的切片) 毛病:比间接应用文件夹的模式简单,延时较长 5.3.1 创立切片地图的策略提出问题切片地图中的不同地图蕴含信息不同,因此受欢迎程序不同(如城区拜访次数高,而海域拜访次数低) 咱们是否有必要节约存储空间对其进行切片 计划 须要进行按需切片,第一个漫游到该地区的用户须要期待服务器进行切片,之后的用户再次拜访该地区则不须要期待,被拜访到的地区有切片,而素来没有被拜访过的地区是没有切片的。采纳“没有数据”图片,表明该地图无切片数据5.3.2 创立开源软件创立切片GeoWebCache、TileCache、TileStache、TileMill等等

March 6, 2021 · 1 min · jiezi

关于webgis:Web-GIS原理与应用开发读书笔记4

第四章 应用WMS在服务器端绘制与查问地图以下均掺杂集体了解书目:Web GIS 原理与利用开发 —— 刘光 曾敬文 曾庆丰 著 WMS是OGS制订的一类地图服务标准 4.1 动静绘制地图服务在网页浏览器中显示地图的办法 将服务器中当时绘制好的地图图像(地图切片)发送给浏览器从服务器上返回一串代表空间图形与属性的文本,在浏览器端绘制在服务器端依据申请的内容绘制一个地图图像,而后返回给客户端。因为每次都是用户发送不同申请,服务器端依据申请绘制地图,反映数据的最新状况,所以称之为动态地图服务。(而切片只能反映生成地图切片时的状况) 4.1.1 动静绘制地图的长处实时反映数据比起切片,更不便存储与保护能够应用多样化的符号(相比浏览器绘制)4.1.2 动静绘制地图的毛病期待服务器绘制地图须要工夫多用户同时申请地图,动态地图服务容易超负荷运行如果晓得只有无限的用户拜访,则可抉择动态地图服务,从而省去生成切片的工夫。4.1.3 动静绘制地图的相干服务器软件开源:GeoServer、QGIS Server、MapServer、deegree 商业:ArcGIS Server、SuperMap Server 4.2 WMS标准根底为了保障Web服务的跨平台性,申请和响应的语法须要保持一致,能够参阅标准文档查看申请参数(文档第七局部) 文档地址:http://portal.opengeospatial.... (咱们在日常二次开发中对申请稍作理解即可,咱们的应用办法是调用封装好的办法) WMS服务次要反对操作: 申请服务的元数据:GetCapabilities申请地图图像:GetMap申请对于地图因素的信息:GetFeatureInfo(可选)申请图例符号操作:GetLegendGraphic(可选)申请用户定义的款式:GetStyles(可选)4.2.1 应用GetCapabilities操作申请服务元数据书中提供了欧洲土壤数据中心WMS服务的元数据地址(我关上始终重定向): http://eusoils.jrc.ec.europa.... ?后示意参数,SERVICE=WMS示意服务是WMS、REQUEST=GetCapabilities示意申请的是GetCapabilities操作。 申请失去一个XML <Service>该服务的名称、关键词以及分割信息</Service><Capability> 该服务反对的操作以及蕴含的图层 <Request> 该服务反对的操作 <GetMap> <Format>GetMap申请所反对的返回图片格式</Format> </GetMap> </Request> <Layer>该服务所蕴含的所有图层数据</Layer></Capability>4.2.2 应用GetMap操作申请地图仍旧是书中提供的地址 http://eusoils.jrc.ec.europa....:3035&BBOX=1988372,1400000,6411627,5400000&FORMAT=image/png&WIDTH=1200&HEIGHT=900 SERVICE=WMS示意应用WMS服务 VERSION=1.3.0示意应用1.3.0版本 REQUEST=GetMap示意执行GetMap操作 LAYER=OCTOP80示意申请图层为OCTOP80 STYLES=示意应用默认款式绘制 CRS=EPSG:3035示意应用坐标参照零碎为EPSG:3035 BBOX=1988372,1400000,6411627,5400000示意绘制的地图范畴(minX,minY,maxX,maxY) FORMAT=image/png示意返回的地图图片格式为PNG WIDTH=1200、HEIGHT=900示意返回图像的宽高(px) 4.2.3 应用GetFeatureInfo操作申请地图因素信息!GetFeatureInfo操作仅仅反对可查属性(queryable)等于1的图层 参数表 申请参数是否必须形容VERSION=version是申请版本号REQUEST=GetFeatureInfo是申请名称<map_request_copy>是GetMap申请参数的局部正本,决定在哪个地图图片上查问QUERY_LAYERS=layer_list是查问的图层列表,图层之间用逗号隔开INFO_FORMAT=output_format是因素信息的返回格局FEATURE_COUNT=number否要返回信息的因素的数量(默认为1)I=pixel_column是以像素示意的因素X坐标J=pixel_row是以像素示意的因素Y坐标EXCEPTIONS=exception_format否WMS的异样错误报告格局4.3 WMS的款式与符号一个款式化图层描述符形容了符号的大小、色彩和标记。 规范化文档:https://www.ogc.org/standards... 款式可由服务发布者或者用户设计,通过DescribeLayer操作实现 应用路径: 将其搁置在Web服务器中,而后在GetMap申请中将STYLE参数指向文件的URL在GetMap申请中可选SLD_BODY参数中间接设置对应的XML文件(将使URL十分长且须要大量本义)

March 5, 2021 · 1 min · jiezi

现代WebGIS开发教程之ES6基础1环境配置1

缘起 打算开坑,这个坑是我以前想开的,因为以下几点: 学校学习偏学术,以至于到单位的新人需要从基础培养,缺少实用教材。网络的文章,不系统,以讹传讹多WebGIS开发人员很多满足于肤浅的api使用,对开发知识学习不够深入当前传统WebGIS开发人员对Web新技术了解太少 学习WebGIS第一步要打好基础,不要一开始做网页看个地图,那样虽说有了兴趣,但是头绪太多,javascript、html、css、还有各种api(openlayers、leaflet、arcgis js api、mapbox-gl),容易浮在表面api的使用忽略了设计、架构以及原理性的知识,我不希望我的组员是一名只会调用api的开发人员。因此,我想开个坑,一方面是之前学习和指导开发人员的技术总结,一方面也是给自己备份些心得。 基本环境 ES6基础系列以ES6语法和库为主,不打算和网页结合,例子以命令行为主要形式,因此本文的环境知识满足以上需求而配置 闲话休提,我们不用浏览器怎么运行javascript,就像运行java需要jre一样,我们需要一个运行时来运行javascript,这就是Node.js,相信大家都听说过这个。下载嘛https://nodejs.org/ ,懒人这个最方便,当然linux有dnf、yum啥的谁用谁知道。版本嘛LTS的技术保守点,贵在稳定,有bug会长期有人修复。Current,嗯,我这种不折腾不舒服的人最喜欢。总之看个人喜好了,安装完了咋知道,命令行很重要,在win cmd,在li terminal,在mac 嗯,还是terminal,打开后敲入命令: node -v 然后呢,看到版本号,就是装成功了 这两年的Node.js会把副产品带上,这个附产品很有用叫npm,所有的项目都是通过npm去创建的,还是在命令行,敲以下命令: npm -v 于是能看到npm的版本。 恭喜你,装好了第一句代码 环境好了,照惯例,有个Hell, World!才算是真的好,那咱们就来吧,命令行(真的很重要,bash要学好),输入命令 node 就会出现交互式界面,有提示符> 我们第一句代码就是打印Hello, World!,在提示符后敲入代码 console.log('Hello, World!'); 再看看有什么结果 嗯,确实打印了Hello, World!,完美,我学会javascript。 然鹅,你就这么忽略了后面的undefined么?相信很多人都会选择忽略。出现undefined的原因是什么呢?node交互时界面返回的是输入语句返回值,打印出Hello, World是console.log执行的操作,但是console.log的返回值是undefined,因此才会有这两行输出。 凡事不要大而化之,差不离,一定要深究,这才是学习的态度 最后退出环境,在命令行输入: .exit 如图退出 以上,各位算是javascript入门了,后面我将逐步讲解ES6的相关知识,希望大家关注。

July 11, 2019 · 1 min · jiezi

Openlayers中数字比例尺的实现方法

1.比例尺分类(1)数字式,用数字的比例式或分数式表示比例尺的大小。例如地图上1厘米代表实地距离500千米,可写成:1∶50 000 000或写成:五千万分之一。(2)线段式(也叫直线式),在地图上画一条线段,并注明地图上1厘米所代表的实际距离。(3)文字式,在地图上用文字直接写出地图上1厘米代表实地距离多少千米,如:图上1厘米相当于地面距离10千米。 2.openlayers中比例尺介绍openlayers中默认地图比例尺为直线式,如图该比例尺存在精确测量无法读取比例尺实际值的缺点。因此有必要将直线比例尺转换成数字比例尺。 3.实现方法 地图比例尺、分辨率、dpi关系 openlayers背景地图多为瓦片地图,瓦片地图分辨率(resolution)是非常重要的参数,其原理参考瓦片地图分辨率介绍; 地图比例尺受到分辨率,像素dpi以及地图投影关系等影响,他们之间的关系参考地图比例尺,分辨率,dpi之间的关系 因此根据这三者的关系得到数字比例尺(digitalScale)的换算公式:digitalScale=dpi/0.0254*resolution实现代码<div id="map"> <div id="digitalScale"><span>比例尺1:</span><span id="zoom"></span></div></div><script> var scaleLineControl=new ol.control.ScaleLine();//定义比例尺控件 // 实例化地图 var map=new ol.Map({ layers:[ new ol.layer.Tile({ source:new ol.source.OSM() }) ], target:'map', view:new ol.View({ center:ol.proj.transform([104,30],'EPSG:4326','EPSG:3857'), zoom:10 }), controls:ol.control.defaults().extend([scaleLineControl])//加载比例尺控件 }); // 监听分辨率变化,通过dpi和像素关系(比例尺=dpi/0.0254*分辨率)输出比例尺 map.getView().on('change:resolution', function(){ document.getElementById('zoom').innerHTML = (this.getResolution())*3779.5275590551;//这里使用了View中的getResolution方法获得当前View的分辨率。 });</script>最终效果

May 13, 2019 · 1 min · jiezi