利用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如何发布各各种服务,但是我会 ...
随机推荐
- CentOS6.8 下RPM方式安装MySQL5.6
1. 检查MySQL及相关RPM包,是否安装,如果有安装,则移除(rpm –e 名称) yum remove mysql mysql-server mysql-libs(我用的上面的)或者 [root ...
- leetcode46
public class Solution { public IList<IList<int>> Permute(int[] nums) { IList<IList< ...
- Adjacent Bit Counts(01组合数)
Adjacent Bit Counts 4557 Adjacent Bit CountsFor a string of n bits x 1 , x 2 , x 3 ,..., x n , the a ...
- PostgreSQL使用笔记
下载并安装 注意安装图形界面 pgAdmin 需要输入缺省用户 postgres 的密码 在 Windows 下安装之后注意把 bin文件夹加到 Path 环境变量中. 重置密码 使用管理员权限打开 ...
- Sql Server数据库之identity(自增)
一.identity的基本用法 1.identity的含义: identity表示该字段的值会自动更新,通常情况下,不允许直接修改identity修饰的字段,否则编译会报错 2.基本语法 列名 数据 ...
- Datatable的操作方法
DataTable操作相关内容: 对DataTable 的一些操作在dataTable中最容易想到的是用for循环来操作,但事实不到万不得已是不会用for循环的,因为效率一般不高. 1. 取行-取行一 ...
- OkHttp 同步异步操作
OkHttp是一个Java和Android的HTTP和HTTP/2的客户端,负责发送HTTP请求以及接受HTTP响应. 一.使用OkHttp OkHttp发送请求后,可以通过同步或异步地方式获取响应. ...
- object references an unsaved transient instance save the transient instance before flushing
object references an unsaved transient instance save the transient instance before flushing 对象引用未保存的 ...
- 100道c++面试题(上)
1. new, delete, malloc, free关系 new/delete是c++的运算符,delete会调用对象的析构函数: malloc/free是c/c++的标准库函数,free只释放内 ...
- 搭建中小规模集群之rsync数据同步备份
NFS重要问题 1.有关NFS客户端普通用户写NFS的问题. 1)为什么要普通用户写NFS. 2)exports加all_squash. Rsync介绍 什么是Rsync? Rsync是一款开源的.快 ...