利用ArcGIS-Server瓦片制作离线地图包(*.tpk)_详细流程

时间:2024-01-24 07:46:52

1、写在前面

本人是综合了好几个资料才最终制作成功,在这个过程中发现网上好多博客写的步骤不是很详细,因此就把自己的详细制作步骤全部分享出来,可以供需要的小伙伴参考。

(1)本文档不讨论tpk文件的详细含义和适用范围,默认你已经有所了解,如果有不了解的可以先查看这个兄弟的博文【https://blog.csdn.net/zdw_wym/article/details/44225761】

(2)本文档是使用已有的切片文件(ArcGIS-Server切片文件)来制作的,如果是这种情况,则可以适用本文档的方法。

(3)如果你直接使用原始的矢量或影响文件来制作tpk的话,建议你直接使用ArcMap即可完成,不需要自己进行手动操作,具体方法可以参考这篇博文【https://www.cnblogs.com/xixihuang/p/6970508.html】

废话不再多说,直接上最有用的。

2、具*作步骤

第一步:文件下载/拷贝

下载(可以从类似于91卫图的软件上下载,下载时选择ArcGIS-Server瓦片)/拷贝已经存在的切片文件,正确的格式如图所示:。注:包含3个文件,后两个是配置文件,第一个文件夹中存储的是已经切好的图片,按照不同的级别分文件夹存储。如果是下载的这几个文件,那么很有可能是“离散型”的,也就是一张张具体的图片。【使用ArcMap制作的tpk文件解压后在相同的文件夹里存储的就不是图片,而是关联文件,因为ArcMap的切片使用的是“紧凑型”的方式】

第二步:制作Layers.lyr文件

(1)将第一步获取的三个文件放在一个新建文件夹下,并且将新建文件夹重命名为“Layers”,记住,必须且只能是这个名字。

(2)然后打开ArcMap,加载下载好的切片文件到ArcMap中【在加载时可以注意到,当你选择到Layers这个路径级别时,数据加载窗口显示的直接就是Layers文件,而不是原来的三个文件的形式,可见ArcGIS会自动将这3个文件索引为一个正确的Layer文件】,结果如图:

记住,这一步在地图框中一定要能正常显示影像图片,否则你获取的这个切片文件就是不合格的,最终制作出来的tpk文件也不能正常显示。

(3)选择ArcMap的File菜单——MapDocumentProperties,在弹出框中勾选“保存相对路径”的那个选项。

(4)在加载的图层右键,选择“另存为Layer文件”的选项,在弹出框中选择路径(这个路径必须和你建立的那个Layers文件夹是同一级别),并且另存为的名字是“Layers.lyr”,这个也必须且只能是这个名字。

(5)退出ArcMap(mxd文档不需要保存),可以看到你第一步建立的Layers文件夹的同一级目录下,有一个Layers.lyr文件,如图所示:

第三步、制作v101文件夹

新建一个文件夹命名为“v101”(同样,必须且只能是这个名字),将第五步得到的一个文件夹和一个*.lyr文件都放到v101下面。

第四步、制作esriinfo文件夹

(1)新建一个文件夹命名为“esriinfo”(必须且只能是这个名字),从其他制作好的tpk文件中拷贝两个文件[item.pkinfo]和[iteminfo.xml]到esriinfo内(如果没有,可以使用文章最后我的附件)。然后使用txt或者notepad++打开这两个文件,按照如图所示的方式修改文件的内容并保存,记住图中红色方框标记的地方必须保证唯一(同时保证两个文件中的name和guid是一样的),绿色方框的地方可以随便写,修改后保存文件。附图:

第五步、制作tpk文件

(1)将前面制作的两个文件夹esriinfo和v101进行压缩打包,如图:,这里文件的名字最好填写的上一步xml文件中的一样,压缩的格式选择ZIP(rar我第一次没成功,后面没再尝试,其他小伙伴可以试一下rar,应该是能成功的),压缩的方式选择“存储”,点击确认等待压缩完成。

(2)将上一步得到的压缩文件的后缀修改为tpk,至此你便得到了一个可用的离线地图包(*.tpk),你就可以随心所欲的使用啦!

3、tpk文件使用(在C端使用,C#语言)

本文附带的使用方法是使用C#在纯C端程序中加载tpk格式的离线地图包,具体的代码如下:

 1         private void btn_OpenTPK_Click(object sender, EventArgs e)
 2         {
 3             try
 4             {
 5                 string lpPath_tpkSelf = @"C:\Users\Administrator\Desktop\aa\新建文件夹\selftpk\mytpk032601.tpk";
 6                 string tmp = GetLayerFromTilePackage(lpPath_tpkSelf);
 7                 //注意,这里最终解析出来的路径可能跟普通的有一点不同,有两处多了反斜杠,但是这个ArcEngine解析的正常的格式,如果自己手工改动,反而不能正确加载tpk文件
 8                 ILayerFile ltFile = new LayerFileClass();
 9                 ltFile.Open(tmp);
10                 this.axMapCtrl_Main.Map.AddLayer(ltFile.Layer);
11  //this.axMapCtrl_Main.AddLayerFromFile(lpPath_tpkSelf);//另一种加载Layer的方式
12                 this.axMapCtrl_Main.ActiveView.Refresh();
13             }
14             catch(Exception error)
15             {
16                 MessageBox.Show(error.Message,"错误");
17             }
18         }
19         public string GetLayerFromTilePackage(string path)
20         {
21             if (System.IO.File.Exists(path) == false)
22                 return null;
23             string unpackPath = "";
24             IPackageFile pkFile = new PackageFileClass();
25             pkFile.Unpack(path, ref unpackPath);
26             //Set the path for where the layerfile is located on disk
27             return unpackPath + @"\Layers.lyr";
28         }
View Code

最重要的就是第二个方法中使用ArcEngine接口的两行代码,全指着他们呢。

 附件(esriinfo参考):【https://files-cdn.cnblogs.com/files/qingtian-jlj/esriinfo.rar】

OK,到这里整个制作和使用流程就完全结束了。