OL记载Arcgis Server切片
概述:
本文讲述怎样在OpenLayers中调用Arcgis Server切片并显示。
思路:
在OpenLayers中载入Arcgis Server切片用XYZ图层,Arcgis Server的切片调用地址我们能够看到例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
能够看到,切片的请求地址为http://localhost:6080/arcgis/rest/services/china/MapServer/z/y/x。当中,z为缩放级别,x,y分别为改切片距离tileOrigin的行列号。其计算方式为:
var res = this.getResolution();
var originTileX = (this.tileOrigin.lon + (res * this.tileSize.w/2));
var originTileY = (this.tileOrigin.lat - (res * this.tileSize.h/2));
var center = bounds.getCenterLonLat();
var point = { x: center.lon, y: center.lat };
var x = (Math.round(Math.abs((center.lon - originTileX) / (res * this.tileSize.w))));
var y = (Math.round(Math.abs((originTileY - center.lat) / (res * this.tileSize.h))));
var z = this.map.getZoom();
将之封装为一个OpenLayers扩展类OpenLayers.Layer.AgsTileLayer。该类的代码方式为:
OpenLayers.Layer.AgsTileLayer = OpenLayers.Class(OpenLayers.Layer.XYZ, {
url: null,
tileOrigin: null,
tileSize: new OpenLayers.Size(256, 256),
type: 'png',
useScales: false,
overrideDPI: false,
initialize: function(name, url, options) {
OpenLayers.Layer.XYZ.prototype.initialize.apply(this, arguments);
},
getURL: function (bounds) {
var res = this.getResolution();
var originTileX = (this.tileOrigin.lon + (res * this.tileSize.w/2));
var originTileY = (this.tileOrigin.lat - (res * this.tileSize.h/2));
var center = bounds.getCenterLonLat();
var point = { x: center.lon, y: center.lat };
var x = (Math.round(Math.abs((center.lon - originTileX) / (res * this.tileSize.w))));
var y = (Math.round(Math.abs((originTileY - center.lat) / (res * this.tileSize.h))));
var z = this.map.getZoom();
var url = this.url;
var s = '' + x + y + z;
if (OpenLayers.Util.isArray(url)) {
url = this.selectUrl(s, url);
}
url = url + '/tile/${z}/${y}/${x}';
url = OpenLayers.String.format(url, {'x': x, 'y': y, 'z': z});
return OpenLayers.Util.urlAppend(
url, OpenLayers.Util.getParameterString(this.params)
);
},
CLASS_NAME: 'OpenLayers.Layer.AgsTileLayer'
});
调用方式为:
<script src="AgsTileLayer.js"></script>
var tiled = new OpenLayers.Layer.AgsTileLayer( "AGSCache",
"http://localhost:6080/arcgis/rest/services/china/MapServer", {
isBaseLayer: true,
tileSize: new OpenLayers.Size(256, 256),
resolutions: [
0.07614275218656896,
0.03807137609328448,
0.01903568804664224,
0.00951784402332112,
0.00475892201166056
],
tileOrigin: new OpenLayers.LonLat(-400 , 400),
maxExtent: bounds,
projection: 'EPSG:4326'
});
map.addLayers([tiled]);
代码中涉及到的參数能够从http://localhost:6080/arcgis/rest/services/china/MapServer?f=pjson返回的JSON数据中获取。例如以下:
{
"capabilities" : "Map,Query,Data",
"copyrightText" : "",
"currentVersion" : 10.110,
"description" : "",
"documentInfo" : {
"AntialiasingMode" : "None",
"Author" : "",
"Category" : "",
"Comments" : "",
"Keywords" : "",
"Subject" : "",
"TextAntialiasingMode" : "Force",
"Title" : ""
},
"fullExtent" : {
"spatialReference" : {
"latestWkid" : 4326,
"wkid" : 4326
},
"xmax" : 134.9767976465060,
"xmin" : 73.45100463562233,
"ymax" : 53.53194315222358,
"ymin" : 18.16324718764174
},
"initialExtent" : {
"spatialReference" : {
"latestWkid" : 4326,
"wkid" : 4326
},
"xmax" : 138.0530872970502,
"xmin" : 70.37471498507816,
"ymax" : 55.85657468506156,
"ymin" : 35.30335092712114
},
"layers" : [
{
"defaultVisibility" : true,
"id" : 0,
"maxScale" : 0,
"minScale" : 0,
"name" : "province",
"parentLayerId" : -1,
"subLayerIds" : null
},
{
"defaultVisibility" : true,
"id" : 1,
"maxScale" : 0,
"minScale" : 0,
"name" : "bcity",
"parentLayerId" : -1,
"subLayerIds" : null
},
{
"defaultVisibility" : true,
"id" : 2,
"maxScale" : 0,
"minScale" : 0,
"name" : "bcounty",
"parentLayerId" : -1,
"subLayerIds" : null
}
],
"mapName" : "Layers",
"maxImageHeight" : 2048,
"maxImageWidth" : 2048,
"maxRecordCount" : 1000,
"maxScale" : 1000000,
"minScale" : 32000000,
"serviceDescription" : "",
"singleFusedMapCache" : true,
"spatialReference" : {
"latestWkid" : 4326,
"wkid" : 4326
},
"supportedImageFormatTypes" : "PNG32,PNG24,PNG,JPG,DIB,TIFF,EMF,PS,PDF,GIF,SVG,SVGZ,BMP",
"supportedQueryFormats" : "JSON, AMF",
"supportsDynamicLayers" : false,
"tables" : [],
"tileInfo" : {
"cols" : 256,
"compressionQuality" : 0,
"dpi" : 96,
"format" : "PNG",
"lods" : [
{
"level" : 0,
"resolution" : 0.07614275218656896,
"scale" : 32000000
},
{
"level" : 1,
"resolution" : 0.03807137609328448,
"scale" : 16000000
},
{
"level" : 2,
"resolution" : 0.01903568804664224,
"scale" : 8000000
},
{
"level" : 3,
"resolution" : 0.009517844023321120,
"scale" : 4000000
},
{
"level" : 4,
"resolution" : 0.004758922011660560,
"scale" : 2000000
},
{
"level" : 5,
"resolution" : 0.002379461005830280,
"scale" : 1000000
}
],
"origin" : {
"x" : -400,
"y" : 400
},
"rows" : 256,
"spatialReference" : {
"latestWkid" : 4326,
"wkid" : 4326
}
},
"units" : "esriDecimalDegrees"
}
OL记载Arcgis Server切片的更多相关文章
- (转)OL记载Arcgis Server切片
http://blog.csdn.net/gisshixisheng/article/details/47955787 概述: 本文讲述如何在OpenLayers中调用Arcgis Server切片并 ...
- ArcGIS Server开发教程系列(3)切片
切片工作,我们可以一级一级的切,也可以,所有的一块切,Recreate All Tiles这项是说,在没有进行任何的切片工作时,可以选用这项:Recreate Empty Tiles这项是说,如果之前 ...
- ArcGIS Server较早版本切片迁移注意事项
原创文章,转载须标明出处自: http://www.cnblogs.com/gisspace/p/8286838.html -------------------------------------- ...
- arcgis server 无法手动删除切片
背景 问题 场景如下: 切片放置在专门的文件服务器上,通过unc共享路径对外共享.文件服务器的OS为windows server2008R2 想手动更新切片服务的切片.发现同一切片服务,有的比例级别文 ...
- ArcGIS Server 10.4切片图的制作与发布
场景:有一张遥感卫星图,需要以切片图的形式发布 需要的资料:tif的格式遥感图像 发布步骤: 1.选择Service Editor-->Parameters-->Anti-Aliasing ...
- arcgis server地图服务切片(10.4.1)
首先要发布地图服务,过程略 首先,熟悉arcgis server的人应该知道,最直接的切片方式操作方法是在“服务属性”中设置切片,但这种方式可操作性太差,很多设置无法实现,因此不推荐 下面正式开始,打 ...
- Arcgis, ArcEngine, Arcgis Server使用开发汇总 索引
ArcGIS系列软件license及安装: Arcgis SDE10.1 和 Arcgis server10.1的授权文件license tnt_esri.dat Arcgis8.1安装license ...
- ArcGIS API for JavaScript(2)-ArcGIS Server发布要素图层服务
1.前言 上一篇该系列的文章我们主要讲了一下基础Web地图搭建,这篇我们主要讲一下ArcGIS Server发布服务,并且如何调用服务.将自己的数据加载到Web地图当中来,实现Web端浏览数据. 2. ...
- ArcGIS Server开发教程系列(7)使用ArcGIS API for Javascript-Hello World
ArcGIS API for Javascript API下载地址:http://support.esrichina-bj.cn/2011/0223/960.html 选择最新的下载就好了,目前是3 ...
随机推荐
- CAP定理在分布式系统设计中的最新应用
本文翻译自国外InfoQ和计算机杂志上一篇2012年旧文,本文就有关数据同步进行了讨论,特别关注业务事务的不变性与一致性如何在分布式系统中巧妙保证,探讨了长时间运行的事务的补偿机制.这些对分布式系统设 ...
- 86.express里面的app.configure作用
以下摘自 express 3.0 的 文档 app.configure([env], callback) Conditionally invoke callback when env matches ...
- C#共享WIFI能通过代码控制给连接的移动端分配IP么
用C#创建了一个虚拟WIFI,但是能不能通过代码来给连接上的移动端分配各自的IP.之前都是自动分配的IP.望大神们赐教 C#共享WIFI能通过代码控制给连接的移动端分配IP么 >> csh ...
- App开发Native.js入门指南
概述 Native.js技术,简称NJS,是一种将手机操作系统的原生对象转义,映射为JS对象,在JS里编写原生代码的技术.如果说Node.js把js扩展到服务器世界,那么Native.js则把js扩展 ...
- WLAN HAL
WLAN HAL WLAN 框架具有三个 WLAN HAL 表面,分别由三个不同的 HIDL 软件包表示: 供应商 HAL:Android 专用命令的 HAL 表面.HIDL 文件位于 hardw ...
- 瞎折腾-CentOS 7.4 编译4.16.2版kernel 并安装
CentOS 7.4下 原内核版本: 3.10.0-693.el7.x86_64 改后内核版本: 4.16.2 系统版本: CentOS-7-x86_64-Minimal-1708.iso 运行环境: ...
- 使用sysbench 对mysql进行性能测试
使用sysbench 对mysql进行性能测试 sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有My ...
- Git 内部原理 - (7)维护与数据恢复 (8) 环境变量 (9)总结
维护与数据恢复 有的时候,你需要对仓库进行清理 - 使它的结构变得更紧凑,或是对导入的仓库进行清理,或是恢复丢失的内容. 这个小节将会介绍这些情况中的一部分. 维护 Git 会不定时地自动运行一个叫做 ...
- wall---向系统当前所有打开的终端上输出信息
wall命令用于向系统当前所有打开的终端上输出信息.通过wall命令可将信息发送给每位同意接收公众信息的终端机用户,若不给予其信息内容,则wall命令会从标准输入设备读取数据,然后再把所得到的数据传送 ...
- C++对象模型——效率有了,弹性呢(第七章)
7.4 效率有了,弹性呢 传统的C++对象模型提供有效率的运行期支持.这份效率,再加上与C之间的兼容性,造成了C++的广泛被接受度.然而,在某些领域方面,像是动态共享函数库(dynamicall ...