【问题标题】:ArcGis Offline map layer changes synchronizationArcGis 离线地图图层更改同步
【发布时间】:2018-07-17 18:18:11
【问题描述】:

在我的 WPF 应用程序中,我尝试使用离线地图功能。现在我的要素服务已配置为数据同步,我可以在服务器上创建数据副本并下载地理数据库的本地副本。

gdbSyncTask = await GeodatabaseSyncTask.CreateAsync(_featureServiceUri);

Envelope extent = new Envelope(xmin, ymin, xmax, ymax, new SpatialReference(wkidStart));

GenerateGeodatabaseParameters generateParams = await _gdbSyncTask.CreateDefaultGenerateGeodatabaseParametersAsync(extent);


_generateGdbJob = _gdbSyncTask.GenerateGeodatabase(generateParams, _gdbPath);
_generateGdbJob.JobChanged += GenerateGdbJobChanged;
_generateGdbJob.ProgressChanged += ((object sender, EventArgs e) =>
{
    UpdateProgressBar();
});
_generateGdbJob.Start();

初始同步后,我可以在离线模式下成功使用地图。这包括在本地数据库中添加新几何图形或编辑现有多边形等操作。

但是,当我尝试将更改同步回服务器时 - 我没有得到任何结果。

要与本地数据库进行数据同步——我使用以下代码:

SyncGeodatabaseParameters parameters = new SyncGeodatabaseParameters()

{

GeodatabaseSyncDirection = SyncDirection.Bidirectional,

RollbackOnFailure = false              

};



Geodatabase gdb = await Geodatabase.OpenAsync(this.GetGdbPath());

foreach (GeodatabaseFeatureTable table in gdb.GeodatabaseFeatureTables)

{

long id = table.ServiceLayerId;
SyncLayerOption option = new SyncLayerOption(id);
option.SyncDirection = SyncDirection.Bidirectional;
parameters.LayerOptions.Add(option);   
}


_gdbSyncTask = await GeodatabaseSyncTask.CreateAsync(_featureServiceUri);

SyncGeodatabaseJob job = _gdbSyncTask.SyncGeodatabase(parameters, gdb);  
job.JobChanged += SyncJob_JobChanged;
job.ProgressChanged += SyncJob_ProgressChanged;
job.Start();

一切顺利。同步以“成功”状态结束。 SyncGeodatabaseJob 记录的消息如下面的屏幕所示:

但是,当我从地图 Web 客户端中的服务器打开已编辑的要素图层时,我找不到任何本地更改。在服务数据库中,我还可以看到同步期间没有创建新记录。

有趣的是,当我在网络中打开“副本”数据时,我可以看到以下信息:

副本服务器 Gen:2 创建日期:2018/02/07 10:49:54 UTC 最后同步日期:2018/02/07 10:49:54 UTC

“上次同步数据”等于副本“创建日期”但是,在 ArcMap 的副本日志中,我可以看到以下信息:

谁能告诉我应该如何解释上述情况?我的代码中是否缺少某些步骤?或者服务器上可能缺少某些配置功能?看起来数据修改已成功推送回服务器上的副本,但之后副本未与服务器数据库同步(应该自动工作吗?)。

我是 ArcGis 开发方面的“新人”,因此将不胜感激任何帮助

【问题讨论】:

  • 这可能是一个愚蠢的问题,但是当您在本地编辑数据时,您是否也在 Mapview 控件上呈现了这些编辑,还是仅以编程方式进行编辑? (只是为了仔细检查编辑实际上是否正确提交回本地数据库)
  • 我使用以下代码将几何图形添加到图层并在 mapview 控件上可视化它们: var geometry = await MyMapView.SketchEditor.StartAsync(SketchCreationMode.Polygon, true); var feature = this.featureLayer.FeatureTable.CreateFeature();特征.几何=图形.几何;等待 this.featureLayer.FeatureTable.AddFeatureAsync(feature);在外部工具中打开本地地理数据库后(我使用 QGIS 来完成)新记录可用,它们具有形状数据和全局 ID
  • QGIS 可以读取运行时地理数据库吗? 大吃一惊

标签: arcgis arcgis-runtime arcgis-runtime-net


【解决方案1】:

感谢您的所有回答。发生在服务器数据库上启用了版本控制,并且脱机的版本控制更改未与服务器协调。 运行协调/发布脚本 (http://desktop.arcgis.com/en/arcmap/10.3/manage-data/geodatabases/automate-reconcile-post-after-sync.htm) 后,离线更改开始对其他系统用户可见。

【讨论】:

  • 这也是我的猜测。幸好你解决了这个问题。
【解决方案2】:

代码看起来不错,所以我认为设置中发生了一些事情。

同步完成后,您从同步操作中得到了什么?请注意,您可以只使用await syncJob.GetResultsAsync 启动作业并等待结果。

如何在服务器上设置要素服务?请参考https://enterprise.arcgis.com/en/server/latest/publish-services/linux/prepare-data-for-offline-use.htm 了解设置这些东西的不同方法。

【讨论】:

    猜你喜欢
    • 2018-02-09
    • 2018-01-02
    • 2010-12-18
    • 2016-09-07
    • 2016-02-29
    • 2018-10-21
    • 2016-02-11
    • 1970-01-01
    • 2018-07-12
    相关资源
    最近更新 更多