ArcGIS Runtime数据加载及编辑同步

1.1  ArcGIS Runtime数据加载过程探讨

在文档《ArGIS Runtime 快速入门》中我们对ArcGIS Runtime的运行机制做了剖析,我们清楚的知道,在ArcGIS Runtime中一切都可以看做服务,因为对本地数据(MPK,APK,GPK)的显示,实际是通过ArcGIS Runtime 内部的Web服务器将这些本地数据作为服务发布出来,然后通过自己提供的API进行使用,当然这一切对我们都是一个“黑箱子”,其实对于ArcGIS Runtime 本地数据的加载还有深究,最近抽空将这个整理出来跟大家交流。

我们知道ArcGIS Runtime所使用的本地数据(MPK,APK,GPK)是通过ArcMap来制作的,它的这些数据是一种“包”数据,当我们将数据制作成这个“包“的时候,ArcMap为我们做了什么呢?这些”包”本质上是一个压缩文件,在这里我用MPK说明下。

我将自己制作的MPK文件后缀名改成zip,然后解压,发现这个解压后的文件由两部分组成,如下图:

在V101(我猜测应该是verison10.1的缩写)这个文件夹中,包含gdb,msd和mxd三个文件,如下图:

ArcGIS Runtime数据加载及编辑同步_第1张图片

gdb中包含我们这个地图文档所需要的地图数据,msd是在打包的过程中生成的,我们再看另外一个文件夹esriinfo,该文件夹包含下列三个文件:

ArcGIS Runtime数据加载及编辑同步_第2张图片

Thumbnail文件夹中包含该数据包的一个缩略图,如下:

ArcGIS Runtime数据加载及编辑同步_第3张图片

另外两个文件比较小,都是XML的,包含对当前数据的描述信息,比如名称,空间参考等,大家不妨打开看看。

 

了解了MPK的本质,再看看ArcGIS Runtime是如何加载的?

 

1.     启动本地服务;

这是是使用本地数据(MPK)等必须的操作。

2.     解压;

这一步将我们的MPK数据

解压到C:\Users\Administrator\Documents\ArcGIS\Packages目录下。

3.     发布服务

将上面解压的数据发布为服务;

4.     使用服务

  这时候就可以使用该服务,然后将该数据显示出来。

 

1.2  ArcGIS Runtime数据编辑同步

通过上面的介绍,我们更加清楚ArcGIS Runtime使用本地数据的整个流程,但是这里带来一个问题,ArcGIS Runtime对编辑的数据如何同步操作,因为我们从上面的步骤可以看出,ArcGIS Runtime将我们的数据解压到另外一个目录下,以后使用数据的时候都是用该目录下的数据,和原来的数据没有任何关系,如果我对数据编辑后,岂不是没法同步?在这里我想告诉有这个疑虑的人,放十万个心,这里的这个问题其实可以解决,最笨的办法就是将编辑后的数据导出,然后又导入到我们要同步的库中,相信这个方法我们都可以想出来,但是这不是真正意义上的同步吧?要解决这个问题,我们要回到数据打包的这个操作中来,更多信息请看http://blog.csdn.net/arcgis_cs/article/details/7482523,ArcGIS Runtime在制作数据包的时候,可以对数据采用引用的方式,在打包的时候,选中引用数据这个选项,如下图:

ArcGIS Runtime数据加载及编辑同步_第4张图片

这种就是打包后的数据mxd或者msd文档中使用的数据还是原来库中的数据,而不是使用那个V101目录下gdb中的数据,再进一步可以看到这个采用引用方式打包后的数据的那个V101目录下根本就没有这个gdb数据库,如下图:

 

 

 

1.3  验证

当采用引用的方式打包数据后,我们在ArcGIS Runtime中对该数据进行编辑,同时在ArcMap中打开该地图文档,可以看看有没有变化,核心代码如下:

 

ArcGISLocalFeatureLayer pLocalFeatureLayer = new ArcGISLocalFeatureLayer(@"D:\2012\Runtime\径向流图\flow.mpk", 7);

pLocalFeatureLayer.Editable =true;

 

                pLocalFeatureLayer.ID ="cities";

 

               pLocalFeatureLayer.OutFields.Add("*");

 

             //   ArcGISLocalFeatureLayer pLocalFeatureLayer1 = new ArcGISLocalFeatureLayer(pLocalDym.Path, 5);

 

                MyMap.Layers.Add(pLocalFeatureLayer);

 

              

                LocalGeometryService.GetServiceAsync((e) =>

                    {

                        if (e.Status ==LocalServiceStatus.Running)

                        {

                            MyEditorWidget.GeometryServiceUrl =e.UrlGeometryService;

 

                            string[]myLayerIDs = {"cities"};

 

                            MyEditorWidget.LayerIDs =myLayerIDs;

 

                            MyEditorWidget.AutoSelect =false;

                            MyEditorWidget.ShowAttributesOnAdd =true;

                            MyEditorWidget.EditCompleted +=newEventHandler<Editor.EditEventArgs>(MyEditorWidget_EditCompleted);

 

 

                        }

                    });

            });

XMAL代码如下:

<Grid x:Name="LayoutRoot">

        <Grid.Resources>

            <LinearGradientBrush x:Key="PanelGradient" EndPoint="0.5,1" StartPoint="0.5,0">

                <LinearGradientBrush.RelativeTransform>

                    <TransformGroup>

                        <ScaleTransform CenterY="0.5" CenterX="0.5"/>

                        <SkewTransform CenterY="0.5" CenterX="0.5"/>

                        <RotateTransform Angle="176" CenterY="0.5" CenterX="0.5"/>

                        <TranslateTransform/>

                    </TransformGroup>

                </LinearGradientBrush.RelativeTransform>

                <GradientStop Color="#FF145787"/>

                <GradientStop Color="#FF3D7FAC" Offset="0.184"/>

                <GradientStop Color="#FF88C5EF" Offset="0.984"/>

            </LinearGradientBrush>

        </Grid.Resources>

 

        <esri:Map x:Name="MyMap" WrapAround="True">

       

        </esri:Map>

 

        <StackPanel x:Name="EditorToolStrip" Margin="0,5,5,0" >

            <Border Background="{StaticResource PanelGradient}" BorderThickness="1" CornerRadius="5"

                        HorizontalAlignment="Right" VerticalAlignment="Top"

                        Padding="5" BorderBrush="Black">

                <Border.Effect>

                    <DropShadowEffect Color="Black" Direction="-45" BlurRadius="20" Opacity=".75" />

                </Border.Effect>

                <StackPanel Orientation="Vertical" HorizontalAlignment="Right" Margin="0,5,5,0"    VerticalAlignment="Top" >

                    <esri:EditorWidget x:Name="MyEditorWidget" Map="{Binding ElementName=MyMap}"

                                      Width="300"

                                      />

                </StackPanel>

            </Border>

        </StackPanel>

 

 

    </Grid>

 

选择编辑图层上的所有数据,有2544个如下图:

 ArcGIS Runtime数据加载及编辑同步_第5张图片

在ArcGIS Runtime中,添加一个点,并添加属性如下:

ArcGIS Runtime数据加载及编辑同步_第6张图片

在ArcMap中刷新后,就可以看到我们可以找出这个元素了,如下图:

 ArcGIS Runtime数据加载及编辑同步_第7张图片

ArcGIS Runtime是轻量级的桌面产品,做出的应用非常的漂亮,开发简单,部署容易,便于携带,并且有优越的性能,对于数据的同步也有相应的解决办法,这些对用户来说都是不错的选择!

你可能感兴趣的:(ArcGIS Runtime数据加载及编辑同步)