用OpenLayers3实现自定义地图切片的发布
2016-01-11 11:10
267 查看
以前做WebGIS开发时,一直采用的是OpenLayers2.13.1版本,2.X版本推出已有些年头,在各行各业应用非常广泛。在该版本发布自定义切片的主要代码如下:
其中,get_tms_url函数如下:
在OpenLayers3中,架构变化很大,不建议将已有项目迁移到OL3。OpenLayers3不仅添加了对地图旋转以及动画的支持,还支持更多的切片数据源及矢量数据格式。同时以后还会利用WebGL支持3D地图及矢量大数据。现在,我们显示一幅分级的自定义分辨率及命名规则的切片栅格地图。这里,图层的数据源选用TileImage,并且实现自定义的tileUrlFunction,以下是采用V3.12.1实现的主要代码:
显示结果如下:
map = new OpenLayers.Map(mapContainerName, { controls: [new OpenLayers.Control.PanZoomBar({ zoomWorldIcon: true, position: new OpenLayers.Pixel(5, 22) }), new OpenLayers.Control.Navigation(), new OpenLayers.Control.TouchNavigation({ dragPanOptions: { enableKinetic: true } }), new OpenLayers.Control.ScaleLine({ topOutUnits: "公里", topInUnits: "米", bottomOutUnits: "", bottomInUnits: "" }), new OpenLayers.Control.MousePosition({ prefix: "经度:", separator: ",纬度:" }), new OpenLayers.Control.Attribution({ separator: '_@_@_' }), new OpenLayers.Control.KeyboardDefaults() ], units: scaleLineUnits, projection: toProj, displayProjection: fromProj, maxResolution: mapConfigObj.resolutions.split(",")[0], resolutions: mapConfigObj.resolutions.split(","), maxExtent: mapBounds }); var tileLayer = new OpenLayers.Layer.TMS( mapName, TILE_HANDLER_URL, { layername: "BaseLayer", 'type': mapConfigObj.type, 'getURL': get_tms_url }, { transitionEffect: 'resize' }); tileLayer.tileOrigin = new OpenLayers.LonLat(mapConfigObj.boundsArray[0], Math.max(mapConfigObj.boundsArray[1], mapConfigObj.boundsArray[3]));
其中,get_tms_url函数如下:
function get_tms_url(bounds) { bounds = this.adjustBounds(bounds); var res = this.map.getResolution(); var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w)); var y = Math.round((this.maxExtent.top - bounds.top) / (res * this.tileSize.h)); var z = this.map.getZoom(); var url = this.url; var m = this.name; var f = this.type; var path = "m=" + m + "&l=" + z + "&r=" + y + "&c=" + x + "&f=" + f; if (url instanceof Array) { url = this.selectUrl(path, url); } return url + "?" + path; }
在OpenLayers3中,架构变化很大,不建议将已有项目迁移到OL3。OpenLayers3不仅添加了对地图旋转以及动画的支持,还支持更多的切片数据源及矢量数据格式。同时以后还会利用WebGL支持3D地图及矢量大数据。现在,我们显示一幅分级的自定义分辨率及命名规则的切片栅格地图。这里,图层的数据源选用TileImage,并且实现自定义的tileUrlFunction,以下是采用V3.12.1实现的主要代码:
var mapExtent = [115.397235, 39.369633, 117.530304, 41.098667]; var mapResolutions = [0.00249998, 0.00124999, 0.000624995, 0.000249998, 0.000124999, 0.0000624995, 0.0000249998, 0.0000124999, 0.000004499991]; var tileGrid = new ol.tilegrid.TileGrid({ extent: mapExtent, origin: [mapExtent[0], mapExtent[3]], resolutions: mapResolutions, tileSize: [256, 256] }); var attribution = new ol.Attribution({ html: "<a href='http://www.map1000.com/' target='_blank'>千图网</a>" }); var urlTemplate = "http://www.map1000.com/MapSite/TileHandlerTest.ashx?m=beijing&l={z}&r={y}&c={x}&f=image/png"; var map = new ol.Map({ target: 'mapDiv', layers: [ new ol.layer.Tile({ source: new ol.source.TileImage({ attributions: [attribution], tileUrlFunction: function (tileCoord, pixelRatio, projection) { var z = tileCoord[0]; var x = tileCoord[1]; var y = -tileCoord[2] - 1; return urlTemplate.replace('{z}', z.toString()).replace('{y}', y.toString()).replace('{x}', x.toString()); }, tileGrid: tileGrid }) }) ], view: new ol.View({ projection: 'EPSG:4326', zoom: 0, center: [(mapExtent[2] + mapExtent[0]) / 2, (mapExtent[3] + mapExtent[1]) / 2], resolutions: mapResolutions }) });
显示结果如下:
相关文章推荐
- 对需要聚类的数据使用canopy做初步的计算
- Linux(centos)的常用基本命令
- 在Windows基础上(硬盘)安装Linux操作系统(CentOS/RedHat)
- Linux挂载U盘
- 配置非安装版tomcat服务
- hadoop集群配置
- 新书《开源安全运维平台OSSIM最佳实践》亮相2016北京图书订货会
- 完美解决 Linux 下 Sublime Text 中文输入
- Linux下的多进程编程初步(转载)
- linux C下的setjmp与longjmp介绍
- Linux 下smi/mdio总线通信
- apache-common pool的使用
- Nginx Load Balancing
- TOMCAT 优化设置
- tar包在linux下 java安装
- tar包在linux下 java安装
- linux的top命令参数详解
- 每天一个Linux命令 - 【chkconfig】
- win7的目录和vbox的共享,linux中没有权限打开
- Centos 6.5系统下搭建Git服务器--失败历程