目录
1、MPKX
通过地图包 (.mpkx) 可轻松共享完整地图。地图包是包含了地图 (.mapx) 及其图层所引用的数据的文件。使用地图包可在工作组中的同事之间、组织中的各部门之间或通过 ArcGIS Online 或 ArcGIS Enterprise 与其他 ArcGIS 用户轻松共享地图。
2、创建地图包
2.1 打开地图加载数据
2.2 新建地图包
2.3 保存包的位置
可以保存到ArcGIS Online也可以是本地文件。
2.4 标签和摘要
摘要和标签是必填项
2.5 包含企业数据和UNV路径数据
该选项意思是是否将远程地理数据库或UNC路径的数据提取到文件地理数据库打包到地图包中,不勾选的话,只会存储数据路径。
2.6 共享方式
共享方式:
- 我的组织 - 如果您使用组织帐户登录,您将会看到此选项。此选项允许您与组织中所有经过身份验证的用户共享您的内容。
- 所有人 - 该选项将您的内容变为公开状态。任何人均可访问并进行查看。
- 群组 - 您可以与您所在的群组以及群组中的成员共享您的内容。
2.7 附件
将想要包含的项目添加到附件。该选项允许您包括其他内容,如详细文档、报告、图表等。但不能包含以下文件类型:.js、.vbs、.py、.pyc、.pyo、.bat 和 .ocx。同时,仅允许签署的 .dll 文件和 .exe 文件。
2.8 点击包,完成打包上传
3、在ArcGIS Online浏览共享的地图包
3.1 进入共享的组织
3.2 在组织内容选项卡可以发现共享的内容
======================================================================
在ArcGIS Pro目录窗格的门户中也能看见上传的内容
4、下载共享的地图包
4.1 下载地图包
4.2 在ArcGIS Pro中打开
4.3 地图包解压位置
ArcGIS Pro会将地图包解压到C:\Users\Administrator\Documents\ArcGIS\Packages,文件夹以地图包名称_GUID命名。里面包含了一个gdb数据库和mapx文件。
4.4 ArcGIS Pro中加载的地图包数据
数据源指向mmpk解压的位置
5、地图共享API
5.1 制作地图包
执行GP工具时有个小技巧,不知道参数怎么组织、不知道工具路径的话,直接执行一下GP,然后在目录窗格的历史里面,找到执行过的GP历史信息,然后右键复制python命令到文本编辑器:
此外也可以参考工具参考:http://pro.arcgis.com/zh-cn/pro-app/tool-reference/data-management/package-map.htm
代码:
var args = Geoprocessing.MakeValueArray("Map", @"C:\Users\Administrator\Desktop\MyMPKX.mpkx");
var gpResult = await Geoprocessing.ExecuteToolAsync("management.PackageMap", args);
5.2 上传地图包
// 获取当前激活的portal
var portal = ArcGISPortalManager.Current.GetActivePortal();
// 获取用户名
var owner = portal.GetSignOnUsername();
#region 上传地图包
sPath = @"E:\我的资料\ArcGIS\ArcGIS Pro\Shared\";
UploadDefinition ud = new UploadDefinition(portal.PortalUri.OriginalString,
ItemFactory.Instance.Create(sPath + "123.mpkx"),
new string[] { "上传测试" });
ud.CreateFolderIfNotPresent = true;
ud.FolderName = "上传测试";
ud.Description = "测试";
ud.Tags = new string[] { "test" };
EsriHttpClient client = new EsriHttpClient();
var result = await client.UploadAsync(ud);
5.3 下载地图包
protected override async void OnClick()
{
string sMessage = string.Empty;
bool bDownSuccess = true;
// 获取当前激活的portal
var portal = ArcGISPortalManager.Current.GetActivePortal();
// 获取用户名
var owner = portal.GetSignOnUsername();
// 获取用户内容
var userContent = await portal.GetUserContentAsync(owner);
//Get all the folders
foreach (var pf in userContent.PortalFolders)
{
// 获取文件夹下的内容
await QueuedTask.Run(() =>
{
var items = pf.GetItems();
items.ToList().ForEach(async (item) =>
{
sMessage += $"文件夹【{pf.Name}】:{item.Name}" + Environment.NewLine;
bDownSuccess = bDownSuccess && await ((PortalItem)item).GetItemDataAsync(@"E:\我的资料\ArcGIS\ArcGIS Pro\Shared\" +pf.Name+ item.Name);
});
});
}
// 获取根目录下的内容
foreach (var pi in userContent.PortalItems)
{
sMessage += $"根目录:{pi.Name}" + Environment.NewLine;
bDownSuccess = bDownSuccess&& await pi.GetItemDataAsync(@"E:\我的资料\ArcGIS\ArcGIS Pro\Shared\" + pi.Name);
sMessage += $"根目录:{pi.Name}" + Environment.NewLine;
}
}
结果展示:
5.4 加载地图包
注意:如果地图包有问题如引用的数据源缺少等,newmap对象将为null。
string sPath = @"E:\我的资料\ArcGIS\ArcGIS Pro\Shared\";
var currentItem = ItemFactory.Instance.Create(sPath + "测试Map.mpkx");
await QueuedTask.Run(async () =>
{
加载地图包
if (MapFactory.Instance.CanCreateMapFrom(currentItem))
{
Map newMap = MapFactory.Instance.CreateMapFromItem(currentItem);
if (newMap != null)
await ProApp.Panes.CreateMapPaneAsync(newMap);
}
});
6、参考地址
http://pro.arcgis.com/zh-cn/pro-app/help/sharing/overview/map-package.htm
https://github.com/Esri/arcgis-pro-sdk/wiki/ProSnippets-sharing