利用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格式的离线地图包,具体的代码如下:
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)_详细流程的更多相关文章
- geoserver集成以及部署arcgis server瓦片数据
关注重点: 一般来说,geoserver是不支持arcgis server格式瓦片数据部署的,至少我本机的geoserver版本(2.8.5)以及之前的版本并没有集成进来,不知道目前官网的最新版是否支 ...
- Geoserver2.15.1 配置自带 GeoWebCache 插件发布 ArcGIS Server 瓦片(附配置好的 Geoserver2.15.1 下载)
之前写过一篇关于 Geoserver2.8.5 版本的部署配置发布 ArcGIS Server 瓦片点击查看,那是下载 Geoserver2.8.5 源码编译,重新打包 jar 来部署配置思路的,版本 ...
- 【百度地图API】如何利用自己的数据制作社交地图?只显示可视区域内的标注
原文:[百度地图API]如何利用自己的数据制作社交地图?只显示可视区域内的标注 摘要:如果你自己的数据已经超过1万个,如何进行合理的显示?除了聚合marker外,还有一个办法.那就是,只显示可视区域内 ...
- 基于gmap.net制作离线地图下载器
网上已有大量文章介绍gamp.net和离线下载相关的文章了.我就不在介绍gmap相关的文章了,这里着重介绍一下下载相关原理.其实gmap.net本身已自带下载工能,只是离线图片下载到sqlit中,现将 ...
- arcgis server瓦片行列号计算
2013-08-01 arcgis server切图时会设置一个原点坐标,如果是经纬度坐标一般默认(x0,y0)=(-400,400)作为切图的起始点,即从这开始算行列号.假设切图的地图某点坐标为x, ...
- Arcgis For Android之离线地图实现的几种方式
为什么要用,我想离线地图的好处是不言而喻的,所以很多人做系统的时候都会考虑用离线地图.在此,我给大家介绍几种Arcgis For Android下加载离线地图的方式. 在Arcgis For Andr ...
- arcgis server账号需要设置地图缓存的访问权限
如果gis服务起不来,那么可以看看arcgis server账号有没有设置地图缓存的访问权限,有可能arcgis server账号没有这个文件夹的访问权限. 本文用菊子曰发布
- ArcGIS Server 开发之鹰眼地图的实现
鹰眼简单点说就是地图的联动,鹰眼的全称是OverviewMap,在ERSI提供的API包中,在dijit中进行类的调用.查了很多的资料,总结一下: 具体的代码: <!DOCTYPE html&g ...
- ArcGIS API for JavaScript 4.3 与ArcGIS Server联动使用【地图服务】
[前言] 有好些网友问我怎么使用Server发布的地图服务了,其实非常的简单. 我在这里先声明:不提供Server软件,需要的请自行使用互联网搜索资源: 不阐述Server如何发布各各种服务,但是我会 ...
随机推荐
- leetcode1032
class StreamChecker: def __init__(self, words: 'List[str]'): self.maxLen = 0 self.List = set(words) ...
- 一个类似于jq的小型库
本人写了一个类似于jq的小型库,不过只是写了部分方法而已.并没有jq那么全面,下面就介绍下有哪些方法可以使用 第一个是选择器, 选择器比较简单 只支持ID选择器 $(‘#id_name’) Class ...
- 工程C++基础
大家好,我是老A.今天我们要学习的是工程C++,这是一个不可描述的东西.我主要讲的是template. template的用处是装逼,所以很重要. C++配备了函数模板和类模板.函数模板就是我们平时的 ...
- The history of programming languages.(transshipment) + Personal understanding and prediction
To finish this week's homework that introduce the history of programming languages , I surf the inte ...
- ImportError: No module named pycocotools.coco,pycocotools/_mask.so: undefined symbol: _Py_ZeroStruct
准确的说是没有安装 pycocotools 可以借鉴下面链接: https://blog.csdn.net/ab0902cd/article/details/79085797 因为我通常用Python ...
- WordCount 3
学号:201631062130.201631062304 码云地址:https://gitee.com/xnsy/WordCountPlus 一.代码互审情况:在代码的互审过程中,在命令和路径没有没有 ...
- MFC笔记3
1. C6有默认的提示代码功能,但是其默认的快捷键是Ctrl + Space,这一般情况下是切换输入法快捷键,所以,只需重新设置一下快捷键就可以实现提示代码功能,具体设置位置如下: 工具(T) -&g ...
- Quartz基础知识了解(一)
一.QuartZ是什么? 二.获取 三.核心接口 Scheduler - 与调度程序交互的主要API. Job - 由希望由调度程序执行的组件实现的接口. JobDetail - 用于定义作业的实例. ...
- 用归并排序或树状数组求逆序对数量 poj2299
题目链接:https://vjudge.net/problem/POJ-2299 推荐讲解树状数组的博客:https://blog.csdn.net/int64ago/article/details/ ...
- HDU 5988 Coding Contest(最小费用最大流变形)
Problem DescriptionA coding contest will be held in this university, in a huge playground. The whole ...