ArcGIS Pro开发

来源:互联网 发布:剑灵龙族捏脸数据 编辑:程序博客网 时间:2024/05/22 02:17
 

ArcGIS Pro SDK 1.4

转载:http://blog.csdn.net/zheng_xiao_ming/article/details/61198428

Pro SDK 1.4现在已经发布使用,新的SDK包含了许多新特性,伴随着新版本的发布,SDK可以在 Visual Studio中安装( Visual Studio Gallery ,推荐方法),也可以在myesri中下载使用。 
接下来简要介绍一下1.4 SDK里一些增强的功能: 
配置—-新的添加项模式/模板,允许用户自定义 Pro UI/UX,本质上,可以设计任何的添加项和所有符合添加条件的所有性能。 
Light/dark主题风格—伴随着Pro 1.4的light/dark主题功能,SDK允许用户去设计添加项和布局为了最佳的可视性。 
API 的提升—关于数据库连接和SQL语法有新的类和方法,水平或者垂直基准,还有一些新的控件。 
新的代码示例和指导—这些可以在社区网站和维基找到相关示例(以下会介绍) 
更多详细的介绍大家还是去看API参考文档,那里包含了更多API和SDK新发布的亮点,以及所有新添加的完整的列表。 
下面贴一下可供学习的地址: 
开发者:https://developers.arcgis.com/extending-the-platform/ 
github的示例:https://github.com/esri/arcgis-pro-sdk-community-samples 
API参考指南:http://pro.arcgis.com/en/pro-app/sdk/api-referece/ 
GEONET:https://geonet.esri.com/groups/arcgis-pro-sdk

搭建环境:ArcGIS Pro 1.4+ArcGIS Pro SDK 1.4 for.NET(http://www.esri.com/) 
Visual Studio2013或者Visual Studio2015(https://www.microsoft.com/zh-cn) 
可以构建第一个示例练练手,这里就不详细介绍了,官网上面非常详细全面,大家可以去看看

接下来进入正题 
Pro 1.4的打开界面有很多种,简单介绍几种 
1、按照工程打开 
这里写图片描述 
2、按照地图选择 
这里写图片描述 
3、按照行政区域 
这里写图片描述 
以上加载的是示例,由于大家安装Pro的时候大部分都不是按照默认路径安装,运行程序的时候可能会出现如下问题,如图 
这里写图片描述

原因是默认的csproj文件里默认的路径是安装Pro的时候默认的安装位置,用记事本打开csproj文件,把你安装Pro的位置改进去就可以解决了,如图 
这里写图片描述

有很多处,这里就不一一标识。

我们来构建一个示例: 
这里我命名为GeocodeConfiguration, 
这里写图片描述

新建一个文件夹,命名为Controls,下面新建一个User control,这里我将它命名为GeocodeUI,自定义一个UI,可以按照你的任何想法来进行设计,界面如图 
这里写图片描述

这里我添加了一个Button控件,用于访问添加的地图的地址 
接下来自定义一个启动界面,这里我命名为GeocodeStartPage,仍然是可以根据你的任何想法设计出你想要的界面,我们加入刚才的User control,界面如图 
这里写图片描述

新建一个.cs文件,这里命名为GeocodeViewModel,我们可以写入Find Location的address来作为默认的查询地址 
打开ConfigurationManager.cs文件,在OnShowSplashScreen的覆盖方法中,我们可以重写默认的方法以返回一个System.windows.window来作为我们得自定义启动界面,管理布局模板将在”SplashScreen.xaml”中添加默认实现的启动界面窗口,我们也可以进行自定义,删除回调或者返回NULL以保留SplashScreen,这里我把刚才的GeocodeStartPage界面作为自定义界面,代码如下:

 private GeocodeStartPageViewModel _vm;        /// <summary>        /// Pro启动之前的界面.取代默认的启动界面        /// </summary>        /// <returns> 实现控件和启动界面的功能.         ///如果自定义的界面不能使用. 那么将会显示默认的界面.</returns>        protected override System.Windows.FrameworkElement OnShowStartPage()        {            if (_vm == null)            {                _vm = new GeocodeStartPageViewModel();            }            var page = new GeocodeStartPage();            page.DataContext = _vm;            return page;        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

我们也可以添加BUTTON,自定义想要的任何功能,接下来我们添加一个Button来实现一个简单的功能,这里命名为WorkflowButton 
这里写图片描述

在它的.cs文件里面我们写入这段代码:

internal class WorkflowButton1 : Button    {        protected override void OnClick()        {            MessageBox.show("Test");        }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

打开config.daml,在这里我们可以看到刚才加入的Button的信息 
这里写图片描述 
这里写图片描述 
修改控件,我这里修改为CUSTOM. 
我们运行一下,界面如图 
这里写图片描述 
这里写图片描述 
默认的菜单栏工具栏是这个样子的, 
这里写图片描述 
我们可以把这些工具自由组合,例如把不需要的去掉,需要的整合在一个Tab或者group里面,也可以把Tab、Group、工具的名称自定义改名字,我们简单做一个示例,效果就是把默认菜单栏全部消除,只留下刚才我们自定义的CUSTOM控件。 
打开ConfigurationManager.cs,在ConfigurationManager中,添加一个事件响应函数OnUpdataDatabase,覆盖DAML数据库,代码如下:

#region override daml database        protected override void onupdatedatabase(xdocument database)        {            var nsp = database.root.name.namespace;            // 选择所有的Tab元素            var tabelements = from seg in database.root.descendants(nsp + "tab") select seg;// 把所有需要移动的元素聚集在一起    var elements = new hashset<xelement>();            foreach (var tabelement in tabelements)            {                // 跳过根和后台元素                    if (tabelement.parent == null)                    continue;                var id = tabelement.attribute("id");                if (id == null || id.Value.StartsWith(“Geocodeconfiguration”))                 continue;                elements.add(tabelement);            }            // 移动            foreach (var element in elements)            {                element.remove();            }        }        #endregion
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

需要注意的是,OnUpdataDatabase使用单个参数XDocument database,在启动期间,来自Pro(bin\Extensions)中所被检测到的add-in和布局的所有的DAML文件都合并到单个DAML中,所以在编辑此XML文件的时候要小心,它定义了整个程序的UI 
我们来运行一下,界面如图: 
这里写图片描述 
如果我们想要访问一个新的地址,默认是需要新打开一个工程然后访问,这里我们自定义一个Geocode来实现连续访问的效果,默认如图 
这里写图片描述 
我们新建立一个Tab,这里命名为GeocodeBackstageTab, 
这里写图片描述

打开config.daml,我们可以看到刚才加入的BackstageTab的信息, 
这里写图片描述

这里我把它的caption改为Geocode,placewith改为esri_core_SaveProjectButton 
打开它的设计界面,加入这样一句代码

<Control:GeocodeUI Address="{Binding Address}"></Control:GeocodeUI>
  • 1
  • 2
  • 1
  • 2

打开它的ViewModel.cs,看到如下代码:

private string _tabHeading = "Tab Title";        public string TabHeading        {            get            {                return _tabHeading;            }            set            {                SetProperty(ref _tabHeading, value, () => TabHeading);            }        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

我这里把”Tab Title”修改为“Geocode” 
复制粘贴此段代码,做如下修改:

private string _address = "Los Angeles";        public string Address        {            get            {                return _address ;            }            set            {                SetProperty(ref _address , value, () => Address);            }        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

然后打开ConfigurationManager.cs,在刚才的updata函数里面加入如下代码:

if(tabElement.Parent.Name.LocalName.StartsWith(“backstage”)){     If(id.Value==”esri_core_newProjectBackStageTab”  ||        id.Value==”esri_core_openProjectBackStageTab”){          elements.Add(tabElement);      }     continue;} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

然后我们运行一下,界面如图: 
这里写图片描述 
修改地址,继续访问 
这里写图片描述

PS:尽量不要直接复制本文里面的代码直接粘贴到项目里,可能会由于空格或者其他问题出现较多错误。 
欢迎大家指正交流