版权声明:本文为博主原创文章,未经博主允许不得转载。 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; }
}
}