實現本地離線地圖功能,主要分爲兩個方面:
1. 製作離線地圖包
2. ArcEngine加載離線地圖
在ArcGIS中,”.tpk”文件提供了離線地圖包的功能,它是一個rar格式的壓縮文件,裏面封裝了所需的地圖數據資源。所以問題就變成了,如何製作tpk離線地圖包,以及使用ArcEngine加載“.tpk”文件並顯示在地圖中。
如何製作tpk離線地圖包
關於tpk離線地圖包的創建,使用ArcMap軟件就可以輕鬆實現。網上資源實在是太多了,這裏就不囉嗦了。貼上兩個鏈接供大家參考。
- http://www.cnblogs.com/xixihuang/p/6043109.html
- http://blog.csdn.net/mytudousi/article/details/33347249
ArcEngine中加載離線地圖
ArcEngine加載“.tpk”文件,有一個不常用的接口非常重要,叫 IPackage,這個接口只有一個方法“UnPack”,也就是解壓縮。它將“.tpk”文件解壓縮之後,返回一個壓縮後的路徑。而我們只需要把這個路徑下面的“Layers.lyr”文件定位到,就可以使用ArcEngine的MapControl來加載了。
代碼如下:
public void open()
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
string filename = ofd.FileName;
string layerPath = GetLayerFromTilePackage(filename);
this.MapControl.AddLayerFromFile(layerPath);
this.MapControl.ActiveView.Refresh();
}
}
public static string GetLayerFromTilePackage(string path)
{
if (System.IO.File.Exists(path) == false)
return null;
string unpackPath = "";
IPackageFile pkFile = new PackageFileClass();
pkFile.Unpack(path, ref unpackPath);
// Set the path for where the layerfile is located on disk
return unpackPath + "\\Layers.lyr";
}
我這裏的地圖切片的縮放級別沒有設置很多,所以這個數據看起來有鋸齒。想要更好的顯示效果,製作tpk離線地圖包的時候把縮放級別設置深一點就行了。