LSV系列教程 | LSV图源制作教程
1 背景介绍
很多使用LSV的用户会发现一个事,我们的图层中加载的各类在线地图使用的格式皆是lrc格式的文件,这个与歌词文件后缀一样的lrc文件究竟是什么呢?
其实lrc文件是LSV使用的图源文件,其同xml文件,可以使用记事本等文本编辑软件进行编辑。那么又会有一个疑问,那就是图源到底是啥呢?
图源其实并不是地图本身,而是对于网络地图的索引文件,对于存储在服务器中数据量庞大的地图,我们可以通过图源这个索引文件对服务器中的地图进行相应瓦片(Web地图以瓦片金字塔形式存放在服务器上)的加载。
2 Lrc文件详解
要想知道如何对图源进行制作的话首先第一步就是对图源文件进行详细的了解,它包含什么?它们的作用是什么?如何对它们进行操作?要想自己进行图源制作的话,这些只是都是必须要掌握的。
我们可以通过LSV自带lrc文件进行查看以了解lrc文件。我们以LSV自带的谷歌卫星为例。
地址:LocaSpaceViewer\Resource\Layer\谷歌地图
右击使用任意文本编辑软件对其进行打开:
现在我们对其进行逐行分析:
<?xml version="1.0" encoding="GB18030"?>
这里说明了XML文档的版本和编码,在进行图源制作时可直接使用不用进行修改。
<DataDefine>
从<DataDefine>到</DataDefine>是图源的主体。
<Version>0</Version>
说明了图源的版本,可不进行修改。
<Name>img</Name>
图源的内部名称,可不进行修改。
<GeoGridType>WebMercatorWGS84</GeoGridType>
GeoGridType标签对内部比较重要,说明了当前图源的投影格式,比如这里WebMercatorWGS84,表示原始在线地图为Web墨卡托,WGS84的图。对于天地图分省来说,则采用的是经纬直投那么这里就需要填写:TianDiTuLatLon。关于天地图分省的图源制作在后文会进行详细说明。其中还可以使用的为:GCJ02、BD09。
<SampleSize>256</SampleSize>
这里所指的是地图瓦片的尺寸,常见地图瓦片是256*256,少量地图瓦片是512*512瓦片。
<FileExt></FileExt>
FileExt标签对内填写的是原始的瓦片格式,比较常见JPG、PNG类型,不过也可以选择不填写,这样系统会自动匹配所对应的瓦片格式类型,这样比较保险,不然如果出现不符合的格式则会使地图无法正常加载。
<DataVersion></DataVersion>
<DataType>urlformat</DataType>
DataVersion和DataType是数据版本和数据类型,这两条可以不用管。
<TileRowDir>NorthToSouth</TileRowDir>
表示原始在线地图的瓦片组织形式。是从北到南编号,还是从南到北编号。多数都是从北到南编号,采用的谷歌编码原则。但是有些图,用的标准TMS切片,则是从南到北。
<LocalPath></LocalPath>
本地瓦片路径,如果对已经下载好的本地瓦片,则可以用该标签调用。
<UrlParamOrder>X,Y,Z</UrlParamOrder>
这个定义了下面标签中%d的顺序,Z是层级、X是行号、Y是列号。
<NetPath>http://mt0.google.cn/vt/lyrs=s&hl=zh-CN&x=%d&y=%d&z=%d</NetPath>
这个里面的内容表示瓦片的具体地址,也是图源最核心的一部分。%d对应的是ZXY,按UrlParamOrder标签对内的顺序控制。
<Range>
<West>-160</West>
<East>160</East>
<South>-85</South>
<North>85</North>
<LevelBegin>1</LevelBegin>
<LevelEnd>20</LevelEnd>
</Range>
Range内部定义了这个图源的区域,最大最小层级。
West、East、South、North定义了图源的默认区域。如果制作一个全国范围的图源,就可以配置这里,配置后,双击图层,则只跳转到全国视角而不是全球。省级范围同理。
LevelBegin和LevelEnd控制了图源的最小和最大层级,一般在图源分析的时候,可以找到具体的值。
</DataDefine>
3 尝试制作自己的图源文件
在对lrc文件进行了解后就可以尝试对自己所需要的图源文件进行制作了。我们这里就以天地图的制作为例。天地图地址:http://map.tianditu.gov.cn/
对于初制作图源的人,可以不用自己对lrc文件进行一行一行的书写,可以直接通过对LSV自带的lrc文件进行复制粘贴后对需要修改的关键部分进行修改。
在这儿,我们就直接将上述例子的代码进行复制并用红色标记处需要修改的部分:
<?xml version="1.0" encoding="GB18030"?>
<DataDefine>
<Version>0</Version>
<Name>img</Name>
<GeoGridType>WebMercatorWGS84</GeoGridType>
<SampleSize>256</SampleSize>
<FileExt></FileExt>
<DataVersion></DataVersion>
<DataType>urlformat</DataType>
<TileRowDir>NorthToSouth</TileRowDir>
<LocalPath></LocalPath>
<UrlParamOrder>X,Y,Z</UrlParamOrder>
<NetPath>http://mt0.google.cn/vt/lyrs=s&hl=zh-CN&x=%d&y=%d&z=%d</NetPath>
<Range>
<West>-160</West>
<East>160</East>
<South>-85</South>
<North>85</North>
<LevelBegin>1</LevelBegin>
<LevelEnd>20</LevelEnd>
</Range>
</DataDefine>
在进入网络地图界面后按F12,打开开发人员工具。或者在菜单里,找到开发人员工具,点击“网络”:
之后对地图进行随意地缩放或者拖拽,即可获得后台的传输信息,之后在其中找到任意瓦片进行查看:
这里可右击该传输信息对URL进行复制保存以便接下来下一步的使用。并且可对瓦片信息进行查看:
这即是网页地图的基础,在这里:
尺寸为256*256这个对应了对应图源内的<SampleSize>;
内容类型则对应了图源内的<FileExt>;
其中URL则对应了图源最核心的一部分——<NetPath>。
我们现在对这个URL进行详细的分析:
http://t4.tianditu.gov.cn/DataServer?T=vec_w&x=3420&y=1672&l=12
其中t4表示了天地图的服务器号,对于天地图来说,它的服务器号是从0-7共8个。我们再来看后面的关键编号,在天地图中直接就写明了X和Y的位置,而l的话即使层级Z,所以依次来定的话三个变量的顺序即为X、Y、Z。所以<UrlParamOrder>内应该填写:X、Y、Z。
而对于其他不同的网络地图来说,这些顺序以及表述都是不一样的,由于X索引范围是±180°,Y的索引范围是±85°,所以一把来说X的值比Y大,不过这也不绝对,在进行尝试后如果无法获得正确的地图可通过进行顺序交换进行尝试。
之后将其X、Y、Z的具体数值用%d代替。所以在这里应为<NetPath>http://t4.tianditu.gov.cn/DataServer?T=vec_w&x=%d&y=%d&l=%d</NetPath>。
根据以上瓦片信息我们可以对图源相应的位置进行修改,修改后级如下:
<?xml version="1.0" encoding="GB18030"?>
<DataDefine>
<Version>0</Version>
<Name>img</Name>
<GeoGridType>WebMercatorWGS84</GeoGridType>
<SampleSize>256</SampleSize>
<FileExt>png</FileExt>
<DataVersion></DataVersion>
<DataType>urlformat</DataType>
<TileRowDir>NorthToSouth</TileRowDir>
<LocalPath></LocalPath>
<UrlParamOrder>X,Y,Z</UrlParamOrder>
<NetPath>http://t4.tianditu.gov.cn/DataServer?T=vec_w&x=%d&y=%d&l=%d</NetPath>
<Range>
<West>-160</West>
<East>160</East>
<South>-85</South>
<North>85</North>
<LevelBegin>1</LevelBegin>
<LevelEnd>18</LevelEnd>
</Range>
</DataDefine>
之后将其另存为lrc格式保存后拖入LSV或者在“加载图层”中进行加载。
用这样的方式可以对网上的大量网络地图进行图源的制作并在LSV中进行加载使用,这样即可以根据自身的需求对图源进行制作使用。
4 Lua脚本的使用
在学习上述图源制作教程后并进行亲自尝试制作后应该对于图源制作有了基础的认识,那么对于有些网页地图来说,对其进行简单的检索还无法正常的对其进行引用,这里就需要一些额外的函数计算才能进行检索,在此我们就引入了lua脚本的概念。
4.1 什么是Lua脚本
Lua是一个嵌入式脚本,它可以执行lrc格式无法进行的一些函数运算,并以此进一步处理以达到所需要的效果。如在天地图分省图中,有些省份的层级数是标准层级数的±1层,在这里我们如果只使用lrc图源的话会导致层级数不对,这里我们就可以通过接lua脚本来解决这个问题。
现在就以LSV自带的广西卫星图的lua脚本为例,为大家讲解lua脚本的作用。
地址:LocaSpaceViewer\Resource\Layer\天地图分省\广西
对于lua脚本,我们也可以直接使用文本编辑软件对其进行打开。其代码如下:
function getTileUrl (zoom,x,y)
从function至end都是getTileUrl这个函数,而在此我们为函数设置了3个变量,分别是zoom——层级数,x——行号,y——列号。这三个参数可以自行命名,不过要根据所需要的顺序在下面进行调用。
zoom=zoom-1
由于经过实际计算测试,天地图广西省的层级要比标准的层级小一层,所以这儿通过函数计算将层数将其进行-1以为下面使用。
return "http://www.mapgx.com/arcgis/rest/services/cityimg_nn/MapServer/tile/" .. zoom .. "/" .. y .. "/" .. x
这里是图源的核心,及网络地图的URL,这里获取URL的方式同上lrc图源制作方式一样。不过使用的方式有所不同,在lua脚本中表达形式应使用".. x/y/z .." 进行原先数据的替代,然后除参数外其他URL部分其前后必须使用"符号。
end
就凭这短短的四行代码就能构成图源?当然不是,lua脚本必须要配合lrc文件才能实现其功能。
接下来对其lrc文件进行查看以及对其与上不同部分的含义进行讲解。
<?xml version="1.0" encoding="GB18030"?>
<DataDefine>
<Version>0</Version>
<Name>天地图img</Name>
<GeoGridType>5</GeoGridType>
对于LSV引擎中,“5”的含义为调用lua脚本。
<SampleSize>256</SampleSize>
<DataVersion></DataVersion>
<DataType></DataType>
<LocalPath></LocalPath>
<FileExt></FileExt>
<NetPath>./广西卫星.lua</NetPath>
获取lua脚本中返回的URL。
<Range>
<West>104</West>
<East>112</East>
<South>20</South>
<North>27</North>
<LevelBegin>7</LevelBegin>
<LevelEnd>18</LevelEnd>
</Range>
West,East,South以及North定义了图源的默认区域为广西,配置后,双击图层则跳转到的视角则为广西。LevelBegin和LevelEnd控制了图源的最小和最大层级,这里通过配置也限定了视角范围在广西。
</DataDefine>
4.2 图源制作
接下来就以云南的天地图分省地图为例进行lua脚本以及lrc图源的制作。地址:http://www.hntianditu.com/hnmap.aspx。
在进入网络地图界面后按F12,打开开发人员工具。或者在菜单里,找到开发人员工具,点击“网络”:
之后对地图进行随意地缩放或者拖拽,即可获得后台的传输信息,之后在其中找到任意瓦片进行查看:
首先先是对lrc文件进行制作。同样的,可以使用LSV自带的lrc文件进行复制粘贴后进行编辑。
接下来进行编辑后的lrc文件以及其相应的注解:
<?xml version="1.0" encoding="GB18030"?>
<DataDefine>
<Version>0</Version>
<Name>天地图img</Name>
<GeoGridType>5</GeoGridType>
表示调用lua脚本
<SampleSize>256</SampleSize>
瓦片大小
<DataVersion></DataVersion>
<DataType></DataType>
<LocalPath></LocalPath>
<NetPath>./河南卫星.lua</NetPath>
获取lua脚本中返回的URL。
<FileExt></FileExt>
<Range>
<West>110</West>
<East>117</East>
<South>31</South>
<North>36</North>
<LevelBegin>15</LevelBegin>
<LevelEnd>17</LevelEnd></Range>
配置了默认视角范围为河南。
</DataDefine>
然后是对lua脚本进行制作。
function getTileUrl (zoom,x,y)
return "http://map.hnchj.com/newmapserver4/tianditu/henansltile/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=henansltile&STYLE=default&TILEMATRIXSET=TileMatrixSet_0&TILEMATRIX=" .. zoom .. "&TILEROW=" .. y .. "&TILECOL=" .. x .. "&FORMAT=image%2Fpng"
end
由于不包含层级数的计算,所以直接返回URL即可。
5 自定义LSV在线地图文件夹
如果只做了一个在线图源后需要进行长期的使使用的话,可以在LSV的“在线地图”菜单中自定义加入所需要的在线地图以及在线地图文件夹。接下来我们将以上文制作出的图源文件为例,演示如何自定义在线地图。
首先,我们先得找到LSV保存在线地图的文件夹,默认的地址在:LocaSpaceViewer\Resource\Layer。我们可以直接在这里新建一个文件夹后重启LSV即可看到自定义的文件夹在“在线地图”菜单显示。
随后我们将所需要的图源lrc文件以及lua脚本加入文件夹后重启LSV即可在菜单中进行显示,点击后即可快速打开自定义图源。
最后,可以自定义文件夹的图标,配置要求如下:
图片大小需要为30*30。
图片格式需要为png格式。
图片的名称必须和文件夹相同。
效果如下:
6 通过抓包进行调试
以上的教程看上去很简单,其实真正实际操作上会出现一系列的问题,所以这里就得需要学会使用抓包工具来进行查看调试。我们可以通过各类抓包软件来对浏览器发送给服务器的数据包进行抓取,然后进行查看分析调试后将图源制作完全。现在我们就通过以“WSExplorer+1.3”软件为例,开始抓包调试的教程。
在进程列表中选择LSV即可查看LSV的进程:
绿色的是发送的数据包,红色的是服务器返回的数据包。通过点击绿色的发送的数据包我们可以看到数据包的具体内容:
其中,把Hosts和GET后面的内容链接起来,就是瓦片的URL。
我们现在就通过上文中制作的河南卫星图图源在LSV中进行加载后开始抓包测试,在加载后把其他图层关闭以方便抓包时方便提取该图源的数据包。我们随之对图层进行随意拖拽以及缩放后查看抓包工具中的数据包信息。
现在我们将其URL信息复制在浏览器中进行查看是否符合我们加载的瓦片:
在有些图像无法正常加载的情况下可以通过这个方法来进行查看,图源在哪一个环节出现了错误,如数据包上传的信息中与网络地图同图层同地点行列数据不符合则可能是瓦片运用的切片类型或者还需要在lua脚本中进行其他的函数运算才能符合。
图源制作时的抓包调试是需要耐心的,只有一点一点通过这个方法获取到了出错的地方,才能把图源做好。
以上就是LSV图源制作的教程了,希望大家掌握后能够制作自己所需要的图源。