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文件结构
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数据并将其缓存在本地,如此既可以提高数据的访问效率,又能够不因为扫描数据源更新的频度过高而影响带宽和服务器计算资源。
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数据并将其缓存在本地,如此既可以提高数据的访问效率,又能够不因为扫描数据源更新的频度过高而影响带宽和服务器计算资源。
相关文章推荐
- ArcGis 10+Oracle发布WFS-T服务,无法更新Feature的解决方法
- ArcGis 10+Oracle发布WFS-T服务,无法更新Feature的解决方法
- Ajax中浏览器的缓存问题解决方法
- Tomcat中文乱码问题的原理和解决方法
- Query中ajax的使用与缓存问题的解决方法
- Ubuntu 10_04 安装在 VMware Workstation 后,登录界面键盘无法输入的问题的解决方法
- IE下Ajax缓存问题的快速解决方法(g…
- 关于arcgis用GP服务模型 生成等直面没有跟地图一致,颜色区设置及数据接收问题的解决方法!
- 解决jquery之get缓存问题的最简单方法
- Tomcat中文乱码问题的原理和解决方法
- Portal for ArcGIS管理员账号丢失问题解决方法
- 输入流当中的read方法和readfully方法的区别与原理 -- 一直纠结的socket传输大图片解决的问题所在
- IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
- Tomcat中文乱码问题的原理和解决方法
- Query中ajax的使用与缓存问题的解决方法
- Tomcat中文乱码问题的原理和解决方法
- ArcGIS Engine 10 开发常见问题的解决方法
- Altium Designer 10常见问题及解决方法
- Jquery $.getJSON 在IE下的缓存问题解决方法