基于ArcGIS Server 10 在flex瓦片客户端叠加瓦片服务
2010-10-21 17:32
260 查看
1. ArcGIS Server 10 缓存机制
昨天用了ArcGIS 10的时候才发现ArcGIS Server 10引入了新的地图缓存格式,其目的是使得其实用和迁移更加方便。在定义缓存的tiling scheme时,现在可以选择Exploded或者Compact两种格式。以下信息截取自http://www.gisall.com Exploded是以前版本ArcGIS Server中的缓存格式,也就是每个tile以一个单独图片文件来存储。 Compact 是AGS10中的新格式。它并不是将缓存文件进行打包或压缩,而是将它们拼装成更大的bundles格式的文件。一个bundle文件最多可以存储16,000个tile。这样就能大大介绍缓存文件夹中文件的个数。如此便能提高缓存的拷贝速度,尤其适用于在一台服务器上生成缓存之后,需要将其迁移到另一台生产服务器上的情景。 compact存储格式还有一个优点,就是不会浪费磁盘空间。windows平台默认情况下,一个文件最少占用4KB磁盘空间(由簇大小决定),不足4KB的文件则会出现浪费情况。对于传统的地图缓存格式,往往有成千上万个图片文件,此时查看文件夹“大小”和“占用空间”可以发现,后者比前者要大许多,多出来的部分即是空间浪费。 采用compact格式后,缓存文件夹的“大小”和“占用空间”基本一致,因为每个bundle文件浪费的磁盘空间不会超过4KB,而bundle文件的个数比采用传统缓存格式的图片文件个数要少得多。 ArcGIS客户端,包括Web API,知道如何读取compact格式的bundle文件。如果你需要自己利用代码从virtual directory中取出tile文件,那么你只能继续使用传统的exploded格式。因为目前没有开放bundle文件格式的读取办法。
2. ArcGIS 瓦片服务准备
1、制作mxd文档; 2、利用arcgis server manager 或者Catalog来发布服务,并生成相关切片; 具体如何 发布服务和瓦片的切图就不回顾了,但我在使用过程中还是出了一些问题, 建立了地图缓存服务, 使用Titled显示地图服务,运行程序的时候提示“Error: E0005E: Invalid tile service”,在网上搜索了一下,给出了答案: 1、在地址栏键入URL: http://<host>:8399/arcgis/rest/admin 注意,如果是.NET Server请键入URL:http://<host>/arcgis/rest/admin 2、在登陆框中键入用户名和密码,该用户名和密码,与ArcGis Server Manager 登陆的账户一样。 3、进去之后,找到“Clear Cache Now” 这个超链接,点击即可。 这三个步骤进行之后,重新切片。客户端正常运行。3. 自定义flex客户端叠加ArcGIS Server瓦片
叠加ArcGIS的瓦片从原理上分析应该有两种方法: 1、 直接将客户端瓦片地址发布,不经过服务端中转而直接请求瓦片; 2、 根据相关规则请求瓦片至ArcGIS Server服务端,叠加相关瓦片。 下面对第2种方法大体进行一下描述: 在flex中,如何在自已的客户端对ArcIGS Server进行图层叠加呢,其实从原理上来讲,就是两个Canvas的叠加,其中一个Canvas装载的是ArcGIS Server的瓦片,另外一个装载的是我们自己的瓦片,其中ArcGIS Server的瓦片作为底图加载至下面,而我们的瓦片则是透明的图层,这样,两者就能完全的结合起来。那这两者结合的最关键的地方就是两者的位置统一,那么在指定的地图范围以及指定的屏幕大小(即Canvas的大小)加载ArcGis Server的步骤应该是由以下几步组成: (1)首先根据http://服务地址?f=json 获取相关参数,这个参数主要包括切片大小、起始点坐标、切片的级别; (2)根据给定的地图范围判断当前应该显示哪个级别的图片,这个涉及到一点算法,主要就是经过一个遍历,循环读取上面获取的切片级别代码的实际长度,看看哪个级别最为符合即可,这样你就可以知道下面应该在哪个级别来获取图片了,在这一步中,就可以算出当前起始点的左上角的图片的获取地址了,比如: http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer/tile/3/1/2; (3)计算相关的偏移量,这个也容易理解,以上图的图片为例,因为此瓦片的左上角坐标并不一定与我们给定的地图范围重点,因此,要经过一定的偏移,使地图的左上角与指定的地图坐标相重合,具体的算法我就不介绍了。 但有一点,我在叠加两个来自不同地方的瓦片的时候会存在有一定的偏差,也就是说两个相同的图层,经切片后,不能完全吻合在一起,但所幸,这种偏差是线性的,所以可以人为的适当调整。相关文章推荐
- 基于ArcGIS Server 10 在flex瓦片客户端叠加瓦片服务
- 利用Arcgis server 10的瓦片数据发布WMS服务
- 基于即时通信和LBS技术的位置感知服务(三):搭建Openfire服务器+测试2款IM客户端
- 基于Axis2的web服务的开发、部署和客户端调用
- 精通Flex 3.0――14.5.1 基于Message服务的Flex应用架构
- ArcGIS Server 10 Java 版的Rest服务的部署方法
- 基于.Net下整合RestSharp,实现REST服务客户端
- Arcgis server 10服务无法启动
- ArcGIS.Server.9.3和ArcGIS API for Flex实现动态图层和瓦片图层叠加显示(二)
- WCF RIA 服务 (二十九)-- Silverlight 客户端 10
- 在Eclipse中基于XFire的服务及客户端
- ArcGIS Server 9.2 基于 Solaris 10 安装方法
- 基于Jersey的Rest服务记住客户端状态
- Qt 插件综合编程-基于插件的OpenStreetMap瓦片查看器客户端(3) 插件管理机制
- Arcgis Server10发布带有Feature Access功能的服务
- 基于Flex的实时H.264流转发平台之客户端(Web+Android)
- 基于OWIN WebAPI 使用OAuth授权服务【客户端模式(Client Credentials Grant)】
- 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:2.搭建环境-2.10.配置用户NTF服务
- 使用 Flex 开发 Web 服务客户端