利用ArcGIS-Server瓦片制作離線地圖包(*.tpk)_詳細流程


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,到這里整個制作和使用流程就完全結束了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM