ArcEngine — 加载本地离线地图数据


实现本地离线地图功能,主要分为两个方面:
1. 制作离线地图包
2. ArcEngine加载离线地图

在ArcGIS中,”.tpk”文件提供了离线地图包的功能,它是一个rar格式的压缩文件,里面封装了所需的地图数据资源。所以问题就变成了,如何制作tpk离线地图包,以及使用ArcEngine加载“.tpk”文件并显示在地图中。

如何制作tpk离线地图包

关于tpk离线地图包的创建,使用ArcMap软件就可以轻松实现。网上资源实在是太多了,这里就不啰嗦了。贴上两个链接供大家参考。

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离线地图包的时候把缩放级别设置深一点就行了。

转载自:https://blog.csdn.net/deirjie/article/details/77146048

You may also like...