ArcGIS Pro-使用Core程序集开发独立的App

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiangqiang2015/article/details/83899228

介绍

有时候我们并不需要把功能定制到ArcGIS Pro框架上,只需要写个小的工具处理下数据,处理数据时只需双击运行exe就行,简单方便,那么我们可以使用arcgis pro的数据库和图形操作接口吗?

ArcGIS.Core.dll提供地理数据库和图形操作的接口,在调用了Host.Initialize方法后此程序集能在独立的console或WPF应用程序中使用。

前提条件

1、安装了ArcGIS Pro

2、配置了授权

Host.Initialize检查项

  • 程序是64位的吗?
  • 进程COM线程模型是单线程公寓(STA)吗?
  • ArcGIS Pro安装了吗?
  • ArcGIS Pro授权可以初始化吗?

独立模式(非Pro Addin模式下)使用编辑

在独立模式下编辑数据时,需要使用ArcGIS.Core.Data.Geodatabase.ApplyEdits方法。

using (RowCursor rowCursor = featureClass.Search(new QueryFilter { WhereClause = "NAME = 'Kern'" }, false))
{
  if (!rowCursor.MoveNext())
    return;

  geodatabase.ApplyEdits(() =>
  {
    using (Row row = rowCursor.Current)
    {
      row["NAME"] = "Kern-Another";
      row.Store();
    }

    using (RowBuffer rowBuffer = featureClass.CreateRowBuffer())
    {
      rowBuffer[FileGDBPathsAndNames.CountyNameColumn] = "Santa Ana";
      rowBuffer[FileGDBPathsAndNames.StateNameColumn]  = "California";

      using (Feature firstFeature = featureClass.CreateRow(rowBuffer))
      {
      }
    }

    using (RowBuffer rowBuffer = featureClass.CreateRowBuffer())
    {
      rowBuffer[FileGDBPathsAndNames.CountyNameColumn] = "Irvine";
      rowBuffer[FileGDBPathsAndNames.StateNameColumn]  = "California";

      using (Feature secondFeature = featureClass.CreateRow(rowBuffer))
      {
      }
    }
  });
}

示例:WPF应用程序

代码结构

执行结果

源代码

1、App.xaml.cs文件中调用Host.Initialize方法

  public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            try
            {
                Host.Initialize();
                MainWindow frmMain = new ProCoreHostDemo.MainWindow();
                MainVM sourceVM = new ProCoreHostDemo.MainVM();
                sourceVM.LoadData();
                frmMain.DataContext = sourceVM;
                frmMain.ShowDialog();
            }
            catch (Exception ex)
            {
                Console.WriteLine(string.Format("Initialization failed: {0}", ex.Message));
            }
        }
    }

2、Xaml界面代码

<Window x:Class="ProCoreHostDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ProCoreHostDemo"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ListView  ItemsSource="{Binding ListTableInfo}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="表名" DisplayMemberBinding="{Binding Name}"></GridViewColumn>
                    <GridViewColumn Header="别名" DisplayMemberBinding="{Binding AliasName}"></GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>

3、数据源

namespace ProCoreHostDemo
{
    public class MainVM
    {
        private string m_GeoDasePath = @"XXXX.gdb";

        private List<TableInfo> m_ListTableInfo;

        public List<TableInfo> ListTableInfo
        {
            get
            {
                return m_ListTableInfo;
            }
        }

        /// <summary>
        /// 数据加载
        /// </summary>
        /// <returns></returns>
        public bool LoadData()
        {
            try
            {
                Geodatabase gdb = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri(m_GeoDasePath)));
                IReadOnlyList<TableDefinition> definitions = gdb.GetDefinitions<FeatureClassDefinition>();
                m_ListTableInfo = definitions.Select((item) =>
                 {
                     return new TableInfo()
                     {
                         Name = item.GetName(),
                         AliasName = item.GetAliasName()
                     };
                 }).ToList();
                
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

    }

    public class TableInfo
    {
        public string Name { get; set; }

        public string AliasName { get; set; }
    }
}

猜你喜欢

转载自blog.csdn.net/xiangqiang2015/article/details/83899228
今日推荐