当您需要访问远程位置上的地理数据库时,地理数据服务是非常有用的。
例如,一家公司可能需要建立 ArcSDE 数据库来管理洛杉矶与纽约办事处的数据。一旦数据库创建完成,每个办事处都可以在 Internet 上通过地理数据服务发布其 ArcSDE 地理数据库。然后,可使用地理数据服务创建 ArcSDE 地理数据库复本。利用地理数据库复制功能,地理数据服务还可用于通过 Internet 定期对每个地理数据库中的更改进行同步。
我们可以结合上面的应用场景来做实验。
ArcGIS Desktop 10.2 ArcGIS Server 10.2
NewYork:Oracle数据库 ArcSDE10.2
Los Angels:SQL Server数据库 ArcSDE10.2
目的:纽约库与洛杉矶库的数据要求实时同步,而且每个库都可以当作一个可以编辑的地理数据库,也可以对外进行同步,洛杉矶库也支持Web 编辑。纽约库与洛杉矶库的连接方式是Internet。
--------------------------------------------------------------------------------------------
版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Blog: http://blog.csdn.net/linghe301
Weibo: http://www.weibo.com/linghe301
--------------------------------------------------------------------------------------------
从上面的要求来看:
1:我们需要使用Geodatabase的高级应用同步复制
2:纽约库和洛杉矶库的同步类型为Two Way
3:因为连接方式是Internet,建议使用Geodata Service(当然也可以使用同步复制的在线和离线方式)
4:洛杉矶库的数据也要发布Feature Service
5:洛杉矶库也支持Check In/out ;One Way的方式供其他方式来更新
那么在使用Geodata Service这块,需要有同步复制的基础:http://blog.csdn.net/linghe301/article/category/871962
实践步骤:
1:因为我们需要发布Geodata Service,我们需要将两个数据库注册到ArcGIS Server上,并且发布Geodata Service服务。
2:将纽约库(本地库)的复本发送到ArcGIS Server上
选择已经发布Geodata Service (Geodata),输入相关的replica名称。执行该操作,可以将纽约库的数据同步到洛杉矶库中。
注意:
{ "name": "SDE.MyReplica_NewYork_LosAngle", "id": 1206, "replicaVersion": "sde.DEFAULT", "guid": "EA850AAD-5339-4C26-8A63-2A592F26F4B5", "role": "esriReplicaRoleChild", "accessType": "esriReplicaBothReadWrite", "myGenerationNumber": 0, "sibGenerationNumber": 0, "sibMyGenerationNumber": 0, "replicaState": "esriReplicaStateSendingData", "sibConnectionString": "ENCRYPTED_PASSWORD=00022e68722f68304c754461415a777845706f317a6652644d513d3d2a00;SERVER=orcl;INSTANCE=sde:oracle11g:orcl;DBCLIENT=oracle;DB_CONNECTION_PROPERTIES=orcl;PROJECT_INSTANCE=sde;USER=test;VERSION=SDE.DEFAULT;AUTHENTICATION_MODE=DBMS;ProgID=esriDataSourcesGDB.SdeWorkspaceFactory.1", "modelType": "esriModelTypeFullGeodatabase", "singleGeneration": false, "spatialRelation": "esriSpatialRelIntersects", "queryGeometryType": "esriGeometryEnvelope", "queryGeometry": { "xmin": -97.99466028456376, "ymin": -76.82502000071109, "xmax": 87.94816028718637, "ymax": 81.26962000168858 }, "transferRelatedObjects": true, "reconcilePolicy": "esriReplicaResolveConflictsNone" }
3:考虑到洛杉矶库需要进行Web编辑,我们需要发布Feature Service。
4:我们可以在ArcGIS.com上面对洛杉矶库的数据进行Web编辑。
5:使用Geodata Service 使洛杉矶库与纽约库进行同步
6:查看纽约库的数据是否同步
另外,我们创建的Geodata Service也可以作为数据源,比如可以将该数据Check out/in、One Way等同步复制的操作。
使用这个步骤,只能使用Arctoolbox工具的Create Replica From Server
具体的操作步骤:http://resources.arcgis.com/zh-cn/help/main/10.2/index.html#//001700000018000000
可能问题又来了,我本来是使用的Geodata Service,但是Create Replica却使用了GP工具,难道还需要创建GP 服务?
--------------------------------------------------------------------------------------------
版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Blog: http://blog.csdn.net/linghe301
Weibo: http://www.weibo.com/linghe301
--------------------------------------------------------------------------------------------
关于服务的建议:
因为Geodata Service涉及到数据的同步,那么就涉及到数据量大小的问题,那么就涉及到服务的超时设置问题,另外还包括Web端等设置
1:ArcGIS Server的设置
在使用地理数据服务时,您可能希望支持更多的实例以及设置更长的超时时间,以便支持复制操作。而在使用地图服务时,您可能希望设置较短的超时时间并限制最大实例数目,以便支持诸如查看之类的操作。
2:HTTP服务器超时:
在互联网上发布服务时,超时也适用于在HTTP。例如,当创建一个副本,它可能会出现明显的服务器输出目录会产生一个输出文件,但客户端收到错误。这可能是因为ASP.NET的工作线程超时,这会导致ASP.NET终止线程尽快从地理数据服务器的控制权返回。
当通过IIS 6.0的发布,调整ASP.NET超时如下:
1)打开Internet信息服务( IIS)管理器
2)右键单击该文件夹下的服务器实例文件夹(例如, ArcGIS的\服务) ,并选择“属性” 。
3)点击“ASP.NET”选项卡。
4 )单击“编辑配置。
5 )点击“应用程序”选项卡。
6)调整超时通过设置请求执行超时下的值。
如果使用IIS 7.0或64位操作系统,它可能无法找到合适的值来设置。在这种情况下,做到以下几点:
1)在web.config文件中的ArcGIS / Services文件夹(即:c : \ inetpub \ wwwroot的\ ArcGIS的\服务) 。
2)打开web.config文件。
3)查找的system.web标签。
4)添加的executionTimeout设置如下,并将其设置为适当的值(它下面设置为1200秒)
<system.web> <httpRuntime executionTimeout="1200" />
3:HTTP服务器数据限制:
在HTTP层,也有一个最大请求长度的限制时,通过IIS发布。此规定范围内的情况下,大量的数据被上传到服务器。与复制,这可以发生在大量数据复制到一个远程的地理数据服务在互联网上的本地ArcSDE地理数据库。它也可能发生时从本地地理数据库中大量的变化同步到远程的地理数据服务在互联网上。
ASP.NET最大请求长度可以调整如下:
1)在web.config文件中的ArcGIS/ Services文件夹(即:c:\ inetpub \ wwwroot的\ ArcGIS的\服务)。
2)打开web.config文件。
3)查找的system.web标签。
4)添加maxRequestLength设置如下,并将其设置到适当的值(它下面设置为10兆字节,默认为4兆字节):
<system.web> <httpRuntime maxRequestLength=10240" />设置,以及来自上述执行超时,显示如下:
<system.web> <httpRuntime executionTimeout="1200" maxRequestLength="10240" />
--------------------------------------------------------------------------------------------
版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Blog: http://blog.csdn.net/linghe301
Weibo: http://www.weibo.com/linghe301
--------------------------------------------------------------------------------------------
使用心得:
Esri的Geodatabase的高级功能,同步复制是一个很好的功能,他的出现让分布式的ArcGIS数据库的数据得到了同步,但是至少在国内,这个功能用户都很少用到。
特别是:国家土地二次调查中的更新上报,国土资源部自己定义变更逻辑、变更数据格式,变更业务,以达到县、省、国家的变化数据的同步。我们不考虑非技术的因素,为什么ArcGIS有这么好的技术,那么多开发商使用ArcGIS来开发二调软件而不是用该技术呢。
最大的弊端是,如果在同步的过程中,报错怎么解决?
这也是同步复制最大的诟病,至少我觉得是。也就是说使用这个工具我们一般情况下都是在数据量比较小的环境下进行测试,而且都是在同一台机器下,这种情况下出错的几率非常少,但是一旦出现跨网络、数据量大的情况下,这种方法是否可以就会深深打一个问号了。可能这是对同步复制使用的一个很大的不自信因素。
不过也不能说这个同步复制一无是处,真实的典型案例
1:XX部使用同步复制的check in/out,迁出数据做数据编辑,然后再同步到中心库,总体数据量达到上百GB
2:中国XX(著名国企)使用One Way的子到父,结合ArcGIS Server编辑,以达到几十个子节点的数据库与中心库进行同步
在进行Geodata Service的实践过程中,遇到了很多莫名其妙的问题,也可能是我的两个数据库经常进行测试,可能把数据库折腾的乱七八糟,但是在测试过程中经常会出现有时候可以,而有时候不行的情况,最大的问题,出错后,并没有什么有效的日志来辅助我分析问题和解决问题。
而且在帮助文档中,关于这个服务的说明也不是很多。