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格式的离线地图包,具体的代码如下:

         private void btn_OpenTPK_Click(object sender, EventArgs e)
{
try
{
string lpPath_tpkSelf = @"C:\Users\Administrator\Desktop\aa\新建文件夹\selftpk\mytpk032601.tpk";
string tmp = GetLayerFromTilePackage(lpPath_tpkSelf);
//注意,这里最终解析出来的路径可能跟普通的有一点不同,有两处多了反斜杠,但是这个ArcEngine解析的正常的格式,如果自己手工改动,反而不能正确加载tpk文件
ILayerFile ltFile = new LayerFileClass();
ltFile.Open(tmp);
this.axMapCtrl_Main.Map.AddLayer(ltFile.Layer);
//this.axMapCtrl_Main.AddLayerFromFile(lpPath_tpkSelf);//另一种加载Layer的方式
this.axMapCtrl_Main.ActiveView.Refresh();
}
catch(Exception error)
{
MessageBox.Show(error.Message,"错误");
}
}
public 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";
}

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

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

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

利用ArcGIS-Server瓦片制作离线地图包(*.tpk)_详细流程的更多相关文章

  1. geoserver集成以及部署arcgis server瓦片数据

    关注重点: 一般来说,geoserver是不支持arcgis server格式瓦片数据部署的,至少我本机的geoserver版本(2.8.5)以及之前的版本并没有集成进来,不知道目前官网的最新版是否支 ...

  2. Geoserver2.15.1 配置自带 GeoWebCache 插件发布 ArcGIS Server 瓦片(附配置好的 Geoserver2.15.1 下载)

    之前写过一篇关于 Geoserver2.8.5 版本的部署配置发布 ArcGIS Server 瓦片点击查看,那是下载 Geoserver2.8.5 源码编译,重新打包 jar 来部署配置思路的,版本 ...

  3. 【百度地图API】如何利用自己的数据制作社交地图?只显示可视区域内的标注

    原文:[百度地图API]如何利用自己的数据制作社交地图?只显示可视区域内的标注 摘要:如果你自己的数据已经超过1万个,如何进行合理的显示?除了聚合marker外,还有一个办法.那就是,只显示可视区域内 ...

  4. 基于gmap.net制作离线地图下载器

    网上已有大量文章介绍gamp.net和离线下载相关的文章了.我就不在介绍gmap相关的文章了,这里着重介绍一下下载相关原理.其实gmap.net本身已自带下载工能,只是离线图片下载到sqlit中,现将 ...

  5. arcgis server瓦片行列号计算

    2013-08-01 arcgis server切图时会设置一个原点坐标,如果是经纬度坐标一般默认(x0,y0)=(-400,400)作为切图的起始点,即从这开始算行列号.假设切图的地图某点坐标为x, ...

  6. Arcgis For Android之离线地图实现的几种方式

    为什么要用,我想离线地图的好处是不言而喻的,所以很多人做系统的时候都会考虑用离线地图.在此,我给大家介绍几种Arcgis For Android下加载离线地图的方式. 在Arcgis For Andr ...

  7. arcgis server账号需要设置地图缓存的访问权限

    如果gis服务起不来,那么可以看看arcgis server账号有没有设置地图缓存的访问权限,有可能arcgis server账号没有这个文件夹的访问权限.  本文用菊子曰发布

  8. ArcGIS Server 开发之鹰眼地图的实现

    鹰眼简单点说就是地图的联动,鹰眼的全称是OverviewMap,在ERSI提供的API包中,在dijit中进行类的调用.查了很多的资料,总结一下: 具体的代码: <!DOCTYPE html&g ...

  9. ArcGIS API for JavaScript 4.3 与ArcGIS Server联动使用【地图服务】

    [前言] 有好些网友问我怎么使用Server发布的地图服务了,其实非常的简单. 我在这里先声明:不提供Server软件,需要的请自行使用互联网搜索资源: 不阐述Server如何发布各各种服务,但是我会 ...

随机推荐

  1. python TKinter部分记录

    http://blog.shouji-zhushou.com/python-gui-tkinter-grid%E7%BD%91%E6%A0%BC%E5%87%A0%E4%BD%95%E5%B8%83% ...

  2. python 正则表达式 RE模块汇总记录

    re.compile(pattern, flags=0) re.search(pattern, string, flags=0) re.match(pattern, string, flags=0) ...

  3. TCC细读 - 1 例子流程

    http://www.iocoder.cn/categories/TCC-Transaction/ https://github.com/changmingxie/tcc-transaction 细读 ...

  4. BUILDING WITH BOOTSTRAP

    BUILDING WITH BOOTSTRAP Bootstrap Generalizations You just built an impressive webpage using the Boo ...

  5. 使用List需要注意的点

    目录 1. 概述 2. Arrays.asList(); 2-1. 产生不可操作的集合 2-2. 需要传入对象数组而不是基本类型数组 3. arrayList.subList(); 3-1. subL ...

  6. 27.Hibernate-缓存和懒加载.md

    目录 1.一级缓存 2.缓存的有效性 3.list和iterator缓存的区别 4.懒加载 4.1get 4.2load 1.一级缓存 Hibernate中一级缓存是Session缓存,有效范围在Se ...

  7. Linux下,如何查看磁盘是否包含数据

    可以使用lquerypv -h来查看磁盘是否包含数据,或磁盘头是否被dd过.这在安装RAC的过程中,是非常实用的一个命令.如果不包括数据的话,那么如下所示: [ZFFR4CB2101:root]/]& ...

  8. javascript中的类型检测

    最常见的是使用 typeof 来判断数据类型 可以区分4种基本类型,即 “number”,”string”,”undefined”,”boolean”,第5种基本类型null类型返回值为object( ...

  9. spark快速开发之scala基础之5高阶函数,偏函数,闭包

    高阶函数 高阶函数就是将函数作为参数或者返回值的函数. object function { def main(args: Array[String]): Unit = { println(test(f ...

  10. hdoj2089(入门数位dp)

    题目链接:https://vjudge.net/problem/HDU-2089 题意:给定一段区间求出该区间中不含4且不含连续的62的数的个数. 思路:这周开始做数位dp专题,给自己加油^_^,一直 ...