ArcGIS Runtime for .Net Quartz开发探秘(七):外业数据采集-离线数据编辑

简介: Runtime的两大用途,一是外业数据采集,二是地图数据呈现。这篇博客先来看看外业数据采集。 Runtime中数据采集有两种模式:桌面模式和服务模式。 桌面模式 1、        使用ArcMap制作地图.

Runtime的两大用途,一是外业数据采集,二是地图数据呈现。这篇博客先来看看外业数据采集。

Runtime中数据采集有两种模式:桌面模式和服务模式。

桌面模式

1、        使用ArcMap制作地图.geodatabase文件

2、        将.geodatabase文件拷贝至移动端

3、        在移动端查看、查询、分析、编辑

4、        将数据同步回ArcMap


服务模式

1、        使用ArcMap制作地图(.mxd)

2、        将.mxd发布至ArcGIS Server

3、        移动端连接ArcGISServer下载数据

4、        在移动端查看、查询、分析、编辑

5、        将数据同步回ArcGISServer


桌面模式

1、在ArcMap中导入数据,并制作.geodatabase文件。

2、将数据拷贝至移动端
3、移动端操作代码如下,仅先给出加载代码,查询编辑保存的放到最后面。
private async void Loadgeodatabase_Click(object sender, RoutedEventArgs e)
{
    string GDB_PATH = @"C:\Temp\Cache\LocalGeodatabase.geodatabase";

        gdb = await Geodatabase.OpenAsync(GDB_PATH);
        foreach (var table in gdb.FeatureTables)
        {
            var flayer = new FeatureLayer()
            {
                ID = table.Name,
                DisplayName = table.Name,
                FeatureTable = table
            };          
            //将新建立的图层加入显示
            MyMapView.Map.Layers.Add(flayer); 
        }
}
4、外业采集归来后将.geodatabase文件拷贝至ArcMap打开。

服务模式

服务模式的制作地图文档、发布服务这里不去详细录屏解释。
但是,作者根据多年经验,觉得以下几点必须得说明,否则会报如下错误:00184: Layer is not configured for or cannot be used with the Sync capability
1、发布服务需要勾选Feature Access功能,否则是不行的。
2、Feature Access功能的服务需要SDE的支持,并且版本化,包含Globe ID字段或者不版本化而开启存档。
报错解决方案详情请参见:
http://resources.arcgis.com/zh-cn/help/main/10.2/index.html#//00sq000000w1000000(中文版)
http://resources.arcgis.com/en/help/main/10.2/index.html#//00sq000000w1000000(原汁原味的英文版)
好,到这里,我们假设,支持Runtime编辑同步的要素服务已经发布成功,服务地址为:https://sf.esri.com:6443/arcgis/rest/services/ChinaMap/FeatureServer

从服务器下载.geodatabase文件

var featureServiceUri = new Uri("https://sf.esri.com:6443/arcgis/rest/services/ChinaMap/FeatureServer");
var gdbSyncTask = await GeodatabaseSyncTask.CreateAsync(featureServiceUri);
//确定要下载的范围,这里设置为MapView的当前视域范围。
Envelope extent = MainWindow.MapView.GetCurrentViewpoint(ViewpointType.BoundingGeometry).TargetGeometry as Envelope;
//获得gdb参数
var generateGdbParams = await gdbSyncTask.CreateDefaultGenerateGeodatabaseParametersAsync(extent);
//设置同步模式为以图层为单位,还可以将其设置为SyncModel.Geodatabase,即以整库为单位同步。
generateGdbParams.SyncModel = SyncModel.Layer;
//设置为同步第一个图层
generateGdbParams.LayerOptions.Clear();
generateGdbParams.LayerOptions.Add(0);
//不返回附件
generateGdbParams.ReturnAttachments = false;
//传入gdb参数、.geodatabase文件存放路径的参数,获得一个GenerateGeodatabaseJob对象-generateGdbJob
var generateGdbJob = gdbSyncTask.GenerateGeodatabase(generateGdbParams, geodatabasefile);
//设置监听generateGdbJob的状态改变
generateGdbJob.JobChanged += OnGenerateGdbJobChanged;
generateGdbJob.Start();
private async void OnGenerateGdbJobChanged(object sender, EventArgs e)
{
    var job = sender as GenerateGeodatabaseJob;
    if (job.Error != null)
    {
        Console.WriteLine("Error creating geodatabase: " + job.Error.Message);
        MessageBox.Show("失败");
        return;
    }
    //检查状态
    if (job.Status == Esri.ArcGISRuntime.Tasks.JobStatus.Succeeded)
    {
        Console.WriteLine("文件已成功创建");
    }
    else if (job.Status == Esri.ArcGISRuntime.Tasks.JobStatus.Failed)
    {
        Console.WriteLine("创建失败");
    }
    else
    {
        Console.WriteLine(job.Messages[job.Messages.Count - 1].Message);
    }
}
至此,.geodatabase文件已下载至移动终端。

离线编辑

添加要素

//构建空间属性
MapPoint mp = new MapPoint(108, 33);
//构建非空间属性
var attributes = new Dictionary<string, object>();
attributes.Add("typdamage", "type1");
attributes.Add("primcause", "wildfire");
//从本地文件获得FeatureTable
Geodatabase gdb = await Geodatabase.OpenAsync(FilePath);
GeodatabaseFeatureTable ft = null;
if(gdb.GeodatabaseFeatureTables.Count>0)
   ft = gdb.GeodatabaseFeatureTables[0];
var newfeature=ft.CreateFeature(attributes, mp);
await ft.AddFeatureAsync(newfeature);

更新要素

Geodatabase gdb = await Geodatabase.OpenAsync(FilePath);
FeatureTable ft = null;
if (gdb.GeodatabaseFeatureTables.Count > 0)
    ft = gdb.GeodatabaseFeatureTables[0];
//选择要素的代码
var selectedFeatures = await fl.GetSelectedFeaturesAsync();
var selectedFeature = selectedFeatures.FirstOrDefault();
await ((ArcGISFeature)selectedFeature).LoadAsync();
selectedFeature.Attributes["typename"] = "type2";
selectedFeature.Geometry = new MapPoint(109, 33);
await ft.UpdateFeatureAsync(selectedFeature);

删除要素

Geodatabase gdb = await Geodatabase.OpenAsync(FilePath);
FeatureTable ft = null;
if (gdb.GeodatabaseFeatureTables.Count > 0)
    ft = gdb.GeodatabaseFeatureTables[0];
//选择要素的代码
var selectedFeatures = await fl.GetSelectedFeaturesAsync();
var selectedFeature = selectedFeatures.FirstOrDefault();   
await ft.DeleteFeatureAsync(selectedFeature);

添加附件

在外业数据采集的过程中,照片、采集人员的记录等都可以作为要素的附件进行保存。这里也给出要素添加附件的代码。

Geodatabase gdb = await Geodatabase.OpenAsync(FilePath);
FeatureTable ft = null;
if (gdb.GeodatabaseFeatureTables.Count > 0)
    ft = gdb.GeodatabaseFeatureTables[0];
//选择要素的代码
var selectedFeatures = await fl.GetSelectedFeaturesAsync();
var selectedFeature = selectedFeatures.FirstOrDefault();
await ((ArcGISFeature)selectedFeature).AddAttachmentAsync("attachmentname", "image/jpg", Imagedata);
await ft.UpdateFeatureAsync(selectedFeature);

编辑后同步

SyncGeodatabaseParameters parameters = new SyncGeodatabaseParameters()
{
    //双向同步,同时下载和上传改动
    GeodatabaseSyncDirection = SyncDirection.Bidirectional,
    RollbackOnFailure = false
};
foreach (GeodatabaseFeatureTable table in gdb.GeodatabaseFeatureTables)
{
    long id = table.ServiceLayerId;
    SyncLayerOption option = new SyncLayerOption(id);
    parameters.LayerOptions.Add(option);
}
SyncGeodatabaseJob job = gdbSyncTask.SyncGeodatabase(parameters, gdb);
job.JobChanged += Job_JobChanged;
job.Start();
private void Job_JobChanged(object sender, EventArgs e)
{
    SyncGeodatabaseJob job = sender as SyncGeodatabaseJob;
    if (job.Status == JobStatus.Succeeded)
    {
        Console.Write("同步成功");
    }
    else if (job.Status == JobStatus.Failed)
    {
        Console.Write("同步失败");
    }
    else
    {
        Console.Write("同步中……");
    }
}




 
 
相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
27天前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
86 3
|
21天前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
30 1
|
23天前
|
SQL XML 关系型数据库
入门指南:利用NHibernate简化.NET应用程序的数据访问
【10月更文挑战第13天】NHibernate是一个面向.NET的开源对象关系映射(ORM)工具,它提供了从数据库表到应用程序中的对象之间的映射。通过使用NHibernate,开发者可以专注于业务逻辑和领域模型的设计,而无需直接编写复杂的SQL语句来处理数据持久化问题。NHibernate支持多种数据库,并且具有高度的灵活性和可扩展性。
37 2
|
27天前
|
开发框架 NoSQL MongoDB
C#/.NET/.NET Core开发实战教程集合
C#/.NET/.NET Core开发实战教程集合
|
2月前
|
存储 开发工具 Android开发
使用.NET MAUI开发第一个安卓APP
【9月更文挑战第24天】使用.NET MAUI开发首个安卓APP需完成以下步骤:首先,安装Visual Studio 2022并勾选“.NET Multi-platform App UI development”工作负载;接着,安装Android SDK。然后,创建新项目时选择“.NET Multi-platform App (MAUI)”模板,并仅针对Android平台进行配置。了解项目结构,包括`.csproj`配置文件、`Properties`配置文件夹、平台特定代码及共享代码等。
128 2
|
2月前
|
开发框架 .NET C#
VSCode开发.net项目时调试无效
【9月更文挑战第22天】在使用 VSCode 开发 .NET 项目时遇到调试问题,可从项目配置、调试配置、调试器安装、运行环境、日志和错误信息等方面排查。确认项目类型及文件配置,检查 `launch.json` 文件及配置项,确保调试器扩展已安装并启用,验证 .NET 运行时版本和环境变量,查看 VSCode 输出窗口和项目日志文件,检查权限及代码错误。若问题仍未解决,可查阅官方文档或社区论坛。
|
27天前
|
C# Windows
一款基于.NET开发的简易高效的文件转换器
一款基于.NET开发的简易高效的文件转换器
|
27天前
|
开发框架 缓存 前端开发
WaterCloud:一套基于.NET 8.0 + LayUI的快速开发框架,完全开源免费!
WaterCloud:一套基于.NET 8.0 + LayUI的快速开发框架,完全开源免费!
|
27天前
|
前端开发 JavaScript C#
CodeMaid:一款基于.NET开发的Visual Studio代码简化和整理实用插件
CodeMaid:一款基于.NET开发的Visual Studio代码简化和整理实用插件
|
1月前
|
XML 存储 安全
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
47 0
下一篇
无影云桌面