使用openlayers调用本地瓦片数据方案.doc

使用openlayers调用本地瓦片数据方案.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用openlayers调用本地瓦片数据方案

 HYPERLINK /laomi/archives/251 使用openlayers调用本地瓦片数据方案 身边经常有一些朋友在与GIS项目的时候抱怨没有地图数据,而实际上他们在做具体的应用的时候常常仅仅是需要一个地图来使得应用程序变得更漂亮。以 前自己也遇到过一些这些问题,在08年公司做兼职的时候,就行开发一个离线的GIS数据包,这些的话,对于一些小型的应用程序就不用花大笔的钱去购买地图 数据。 对于以上的问题,大家常常采用的是两种解决方案:一种解决方案就是直接使用一些第三方数据服务,例如Google maps 或者是MapABC的API来实现自己的功能,这种方法开发比较简单,很容易上手,但是一个重要问题就是给一些不能上网的客户来说,这样的开发方式就不适 合了;另外一种方式就是让客户购买地图数据去支持应用程序,这样的方式用户需要花一些钱去购买地图数据(我以前在做项目的过程中,由于地图数据量不是很 大,所以也可以用一些基础图层,然后再加上一些影像数据进行数字化)。其实上述的两种方式是目前大多数应用程序解决地图数据的主要方法,下面本片文章介绍 第三种方式来实现(特在此申明,文章中提出的方法仅仅是提供交流和学习使用,如果使用商业用途用户自行负责)。 如果想从本地访问瓦片数据的话,首先需要解决的问题是从一些公共地图服务中获取瓦片数据。在这里将使用工具 HYPERLINK /?page_id=66 /?page_id=66下 载地图的瓦片数据。瓦片数据下载到本地之后,可以看到瓦片的数据命名“m_14_13519_6253.png”,其中m后面的14代表的目前的缩放级 别,“13519”代表的是瓦片数据的横坐标,“6253”代表的是瓦片数据的纵坐标。对于Google maps用的是墨卡托投影方式,将地图投影成了一685578488?m的正方形坐标的形式,然后根据缩放级别将这个正方形分割成不 不同粒度的小正方形,这种分割的形式采用的是四叉树索引的方式进行。具体的分割如下图所示。 首先在level 0级别的时候,就是将这个正方形划分为一个256?像素的图片,如果化成米的形式的话,就685578488的正方形,从这里可以计 算出比例为685578488/256 = 156543.033928041 (米/像素)。对于level 1级别时,然后再将这个正方形划分为一个4个256像素的正方形,此时计算出的比例为685578488/512 = 78271(米/像素)。 对于OpenLayers来说,首先会向wms服务发送一个请求,这个请求会有一个bbox参数,参数的形式是这个box的左上角坐标和右下角坐标 的值,对于后来服务来说,就是将这个box的图片发送到前台去显示。对于要使用本地的瓦片数据,根据上面对于瓦片数据的命名方式我们可以知道需要求三个参 数:缩放级别 zoom、横坐标 x和纵坐标的值 y。而对于请求来说,只有bbox的值,所以需要根据根据bbox的值来求出x,y和缩放级别的值zoom。首先从前台来说,展现的总图片应该是一个 360°×360°的正方形的图片,这是对于缩放级别为一级的来说的;对于一个bbox中的经纬度,可以计算出缩放级别: Java代码: double mapUnit = 360/(x1-x0);//156543.033929687 double z = Math.log(mapUnit)/Math.log(2); long zoom = Math.round(z); 计算出缩放级别之后,然后根据公式x = (343 * 2 * ( x0 + 180 ) / 360 ) / pixelResolution)/256可以计算出x的坐标,同理根据公式y = (343 * 2 * ( y0 + 90 ) / 360 ) / pixelResolution)/256可以计算出y的坐标,根据计算结果,可以直接访问到这个缩放级别的的256×256的图片,然后用 openlayer将图片展现到前天的界面中来。关于JavaScript代码如下: JavaScript Code : function init(){ map = new OpenLayers.Map(“map”,{numZoomLevels : 5,minScale:216281restrictedExtent: extent }); map.maxExtent = new OpenLayers.Bounds(-180, -90, 180, 270); var ol_wms = new OpenLay

文档评论(0)

qwd513620855 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档