您的位置:首页 > 其它

ArcGIS 10中WFS缓存问题的解决方法与原理

2010-12-23 00:56 411 查看
1、概述

ArcGIS 10 中可以通过Interoperablility模块来加载由外部数据源或ArcGIS Server发布的标准的WFS服务(10默认支持WFS1.1.0),如图1所示。使用过ArcGIS该功能的朋友应该会注意到,在初次加载WFS数据时数据加载的速度会比较慢,而当以后再次加载时速度就非常快了。而造成这种现象的原因主要在于ArcGIS在初次加载WFS数据的同时将其全部数据在本地机器上做了缓存,当下次再次访问该WFS服务时,则可直接访问本地缓存无需访问网络资源,如图2所示。

MasterTable.xml文件结构

<?xml version="1.0" encoding="UTF-8"?>
<fmeobjects-cache-table fme-build-number="6213">   <id-cache>      <id>        <single-properties>           <property name="reader-type" value="WFS"/>        </single-properties>        <multi-value-properties>           <property name="datasets"><item value="http://esri-wangxin-male:8399/arcgis/services/WfsPoly/MapServer/WFSServer"/></property>        </multi-value-properties>        <string-array-properties>            <pairs name="keywords">               <property name="COORDINATE_SYSTEM" value=""/>               <property name="FEATURE_TYPE_ATTRIBUTE" value="fme_feature_type"/>               <property name="FILTER_EXPRESSION" value=""/>               <property name="FME_FEATURE_IDENTIFIER" value=""/>               <property name="HTTP_AUTH_METHOD" value="Basic"/>               <property name="HTTP_AUTH_USER" value=""/>               <property name="HTTP_PROXY" value="null"/>               <property name="HTTP_PROXY_AUTH_METHOD" value="Basic"/>               <property name="HTTP_PROXY_PORT" value="null"/>               <property name="HTTP_PROXY_USER" value=""/>               <property name="IDs" value="WfsPoly:school  {school}"/>               <property name="MAXX" value=""/><property name="MAXY" value=""/>               <property name="MAX_RESULT_FEATURES" value="30000"/>               <property name="MERGE_SCHEMAS" value="YES"/>               <property name="METAFILE" value="WFS"/>               <property name="MINX" value=""/>               <property name="MINY" value=""/>               <property name="ORIENTATION_RULE" value="RIGHT_HAND_RULE"/>               <property name="SPATIAL_INDEX_ATTRIBUTE" value="fme_feature_type"/>               <property name="SPATIAL_INDEX_ATTRIBUTE" value="fme_type"/>               <property name="TABLELIST" value=""WfsPoly:school  {school}""/>               <property name="UNIQUE_ID_ATTRIBUTE" value="FME_FEATURE_ID"/>               <property name="USE_HTTP_AUTH" value="NO"/>               <property name="USE_PROXY_SERVER" value="NO"/>               <property name="USE_SEARCH_ENVELOPE" value="NO"/>               <property name="XSD_DOC" value=""/>            </pairs>        </string-array-properties>     </id>     <cache>        <single-properties>            <property name="time-stamp" value="2010-12-22 22:28:29"/>            <property name="schema-spatial-index-path" value="C:\Users\ADMINI~1\AppData\Local\Temp\INTEROP\FFSPCS_1293028109579_2672"/>            <property name="time-based-expiry" value="yes"/>            <property name="spatial-index-path" value="C:\Users\ADMINI~1\AppData\Local\Temp\INTEROP\FFSPC_1293030594489_5328"/>        </single-properties>     </cache>   </id-cache></fmeobjects-cache-table>


3、更新缓存的方法

笔者在文件MasterTable.xml中笔者还发现了<property name="time-based-expiry" value="yes"/>,该参数似乎是用于指定对应的缓存是否基于时间过期,但笔者查了很多资料都没能查到FME中默认的过期时间到底是多少,如果有朋友知道请能告诉我。不过在实际应用场景中,单纯地由客户端基于过期时间的自动更新显然有些不合理——过期时间太短,则刷新过于频繁而影响效率;过期时间太长,则无法反映最新数据。所以,WFS的缓存过期应该是由数据源更新来驱动的,即数据源更新的同时进行缓存的刷新。在ArcGIS的产品体系统对于WFS的使用无非是两种技术路线,一是直接将ArcDesktop作为WFS客户端来使用WFS服务,另一种是将WFS服务发布到ArcGIS Server中,并有Server将其再发布成Server支持的其它服务。所以,针对这两种路线,其对应的缓存更新的方法如下:

A、在ArcDesktop中的更新的缓存的方法

1)删除MasterTable.xml文件中目标缓存对应的实体;

2)删除该实体中引用的同目录下的要素缓存文件、要素索引文件、要素架构文件、以及要素架构索引文件;

3)在ArcCatalog中刷新对应的WFS连接。

当再次访问该WFS连接时,ArcDesktop会重新从数据源加载并缓存要素到新建的本地缓存文件中。

B、在ArcGIS Server中更新缓存的方法

1)删除MasterTable.xml文件中目标缓存对应的实体;

2)删除该实体中引用的同目录下的要素缓存文件、要素索引文件、要素架构文件、以及要素架构索引文件;

3)在ArcCatalog或Web版的ArcGIS Server Manager中重新启动对应的服务。

当再次访问该服务时,ArcGIS Server会重新从数据源加载并缓存要素到新建的本地缓存文件中。

4、我们在哪

由于FME中WFS本地缓存更新机制导致ArcGIS的无法有效地满足WFS数据源更新频繁的场景下的最新数据访问需求,所以笔者从ArcGIS中WFS互操作模块运行原理的角度想读者介绍了关于ArcGIS在WFS互操作时所涉及的操作和数据文件的相关原理性的知识,并在此基础上进一步分别介绍了在ArcDesktop和ArcGIS Sever环境下WFS缓存更新的方法。但是,需要注意的是,本文介绍的方法也只是治标不治本的。真正治本的还是应该由OGC进一步完善WFS标准,从而使得WFS能够支持轻量级的更新提醒机制,然后再由ArcGIS定期的去扫描该WFS是否更新。若已更新,则自动加载更新后的WFS数据并将其缓存在本地,如此既可以提高数据的访问效率,又能够不因为扫描数据源更新的频度过高而影响带宽和服务器计算资源。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: