Openlayers使用地图数据5_第1页
Openlayers使用地图数据5_第2页
Openlayers使用地图数据5_第3页
Openlayers使用地图数据5_第4页
免费预览已结束,剩余1页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Openlayers 使用地图数据OpenLayers是由MetaCarta公司开发白用于 WebGIS客户端的JavaScript 包。它实现访问地理空间数据的方法都符合行业标准,比如OpenGIS的 WM序口 WFSM范,OpenLayers 采用纯面向对象的 JavaScript方式开发,同时借用了Prototype 框架和 Rico 库的一些组件。采用OpenLayers 作为客户端不存在浏览器依赖性。由于OpenLayers 采用JavaScript语言实现,而应用于WetftJ览器中的DOM(文档对象模型)由JavaScript 实现,同时,Web&iJ览器(比如 IE ,

2、FF等)都支持 DOMOpenLayersAPIs 采用动态类型脚本语言JavaScript 编写, 实现了类似与Ajax 功能的无刷新更新页面,能够带给用户丰富的桌面体验(它本身就有一个Ajax类,用于实现Ajax 功能) 。目前,OpenLayers 所能够支持的Format 有:XML、 GML、 GeoJSON、 GeoRS、S JSON、 KML、 WFS、 WKT(Well-Known Text) 。在 OPenlayers.Format 名称空间下的各个类里,实现了具体读写这些Format 的解析器。OpenLayers 所能够利用的地图数据资源,在这方面提供给拥护较多的选择,比

3、如WM、S WFS、 GoogleMap、 KaMap、 MSVirtualEarth 、 WorldWind等。也可以用简单的图片作为源。在做GIS项目时一个地图能使得应用程序变得更漂亮,对于一些小型的应用程序就不必花大笔的钱去购买地图数据。我们可以采用以下的方式来实现。如果想从本地访问瓦片数据的话,首先需要解决的问题是从一些公共地图服务中获取瓦片数据。在这里将使用工具http:/daogle/?page_id=66 下载地图的瓦片数据。瓦片数据下载到本地之后,可以看到瓦片的数据命名“ m_14_13519_6253.pn0 ,其中m后面的 14代表的目前的缩放级别,“13519”代表的是瓦

4、片数据的横坐标,“ 6253”代表的是瓦片数据的纵坐标。对于Google maps 用的是墨卡托投影方式,将地图投影成了一个 40075016.685578488?m的正方形坐标的形式,然后根据缩放级别将这个正方形分割成不不同粒度的小正方形,这种分割的形式采用的是四叉树索引的方式进行。具体的分割如下图所示。首先在 level 0 级别的时候,就是将这个正方形划分为一个256 像素的图片,如果化成米的形式的话,就是40075016.685578488 的正方形,从这里可以计算出比例为:40075016.685578488/256 = 156543.033928041(米 / 像素) 。对于 le

5、vel 1 级别时,然后再将这个正方形划分为一个4 个256像素的正方形,此时计算出的比例为:40075016.685578488/512 =78271.51696402(米 /像素) 。对于OpenLayers来说,首先会向 wms服务发送一个请求,这个请求会有一个bbox 参数,参数的形式是这个box 的左上角坐标和右下角坐标的值,对于后来服务来说,就是将这个box 的图片发送到前台去显示。对于要使用本地的瓦片数据,根据上面对于瓦片数据的命名方式我们可以知道需要求三个参数:缩放级别zoom、横坐标x和纵坐标的值y。而对于请求来说,只有bbox 的值,所以需要根据根据bbox 的值来求出x,

6、 y 和缩放级别的值zoomo首先从前台来说,展现的总图片应该是一个360° X360°的正方形的图片,这是对于缩放级别为一级的来说的;对于一个 bbox 中的经纬度,可以计算出缩放级别:Java 代码:double mapUnit = 360/(x1-x0);/156543.033929687double z = Math.log(mapUnit)/Math.log(2);long zoom = Math.round(z);计算出缩放级别之后,然后根据公式x = (20037508.343 * 2 * ( x0+ 180 ) / 360 ) / pixelResoluti

7、on)/256可以计算出x 的坐标,同理根据公式 y = (20037508.343 * 2 * ( y0 + 90 ) / 360 ) /pixelResolution)/256 可以计算出y 的坐标, 根据计算结果,可以直接访问到这个缩放级别的的256X256的图片,然后用openlayer将图片展现到前天的界面中来。关于JavaScript 代码如下:JavaScript Code :function init()map = new OpenLayers.Map( “ map” ,numZoomLevels :5,minScale:216281restricte

8、dExtent: extentmap.maxExtent = new OpenLayers.Bounds(-180, -90, 180, 270);var ol_wms = new OpenLayers.Layer.WMS("basic map","test",layers: "basic",format: "image/png",transitionEffect:resize'map.addLayers(ol_wms);selectControl = new OpenLayers.Control.Sele

9、ctFeature(layer);map.addControl(selectControl);selectControl.activate();map.addControl(new OpenLayers.Control.LayerSwitcher();map.zoomToMaxExtent();如上述代码所属,在前台添加一个 wsm的图层,他会想后台发送一个 请求,这个请求参数是一个 bbox,然后根据请求过来的参数进行分析,计 算出需要返回给前台的图片的名称。上述过程能够完成一个地图底图的应用,如果需要将显示相关信息的话,可以将点信息存数到数据库中或者是文本文件中,然后在使用openlaye

10、r 的 vector 图层添加上去。var layer = new OpenLayers.Layer.Vector( “ POIs” , strategies:new OpenLayers.Strategy.BBOX(resFactor:1.1),protocol: new OpenLayers.Protocol.HTTP(url: “ TextLayer ” ,format: new OpenLayers.Format.Text()如果是wgs1984的坐标体系的话,需要将坐标进行简单的转换,对于经度来说,和之前的一样,而对于纬度来说,首先换算成莫非托投影形式,然后将换成-180,90,180,270 的坐标形式,转换算法如下:x = Math.Log(Math.Tan(90 + latitude) * Math.PI / 360) /(Math.PI / 180) * 20037508.343 / 180x = x+ 20037508.343) * 360 / (20037508.343 * 2)?C 90最后这些都会添加到地图上,形式一个与业务相关的地图信息系统。这样的实现方式可以满足一些只

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论