【教程】如何添加Mobile Atlas Creator的自定义地图源

地图加加的使用经验、技巧以及问题处置等,和其它喜欢地图加加的朋友一起说说地图加加的酸甜苦辣咸。

【教程】如何添加Mobile Atlas Creator的自定义地图源

帖子Zax » 2013-03-25 8:06

重要声明:
在下载和使用商业地图前,请确保您的行为在地图供应商的许可范围以内,或者已获得相关的授权,并遵守所在国家和地区的相关测绘与地图发布的法律和规定,本文只介绍地图源分析的技术的方法,对下载和使用商业地图造成的知识产权破坏或其它违法与侵权问题,概不承担任何责任。

Mobile Atlas Creator(下面简称MOBAC)从版本1.9开始,不再默认内置各种商业地图(如Google、Bing、Yahoo等)的地图源,改为支持用户自定义地图源,您可以通过配置XML文件,BeanShell脚本,或者开发独立的Jar包,来使得Mobile Atlas Creator支持更多您需要下载的地图。

本文将以Google地图为例,为您介绍XML和BeanShell的基本配置方法。

1、单图层地图源的XML配置方法

我们以Google地图为例,首先打开Google地图网站 http://ditu.google.cn,

标准的Web摩卡托投影地图都会将地图拆分为等尺寸的正方形瓦块(详见:http://duweis.com/forums/viewtopic.php?f=16&t=250),接下来我们需要用浏览器自带的工具分析出地图网站的图片瓦块的网址规律,我们下面将主要以Chrome浏览器为例进行介绍,使用其它浏览器的用户也可以用“网页检查器(Safari)”或者“Web开发者(Firefox)”等类似菜单功能来分析这些网址,原理相似,我们不做更多介绍。

点击Chrome浏览器的菜单(地址栏右侧,图标是三个横线的)按钮,选择:工具 -> 开发者工具,如下所示:
图片

在开发者工具中,切换到Network(网络请求)页,此时工具会列出所有发生了的网络请求,请随便放缩一下地图,您会看到产生了很多新请求,标准的地图图片请求都是256x256大小的标准图片,选择其中的任意一个地图图片请求,右侧Preview就会列出该图片的网址和预览图。(注意:如果请求太多不好找,建议用底部的“Images”过滤功能来只显示图片,或者先用清空按钮清除现有请求,再缩放下地图刷新出新的图片)。
监测到的Google地图的图片请求如下所示:
图片
可以看到该图片的网址为:
http://mt3.google.cn/vt/lyrs=m@21000000 ... 12&z=5&s=G

上面例子中图片使用了mt3.google.cn服务器,大多数在线地图都支持多台服务器(负载均衡技术)同时工作,也就是说同一图片在多个服务器都有备份,不同用户随机连接到不同服务器,以保证连接速度。MOBAC也支持对多台服务器进行同时连接下载,这需要我们找出所有可能的服务器的名称,如上例中的mt3.google.cn, 我们猜测可能还存在mt0,mt1,mt2,mt4.....,可以通过试探法验证出到底有哪些服务器:

首先点击图片网址在新窗口中打开图片,然后尝试将地址栏中mt3.googlg.cn的数字3依次替换为0,1,2,3,4,5.....,检查图片网址是否仍然可用(返回相同的图片)。通过试验您会发现Google地图服务器一共4个,分别是mt0, mt1, mt2,mt3

接下来用“记事本”或者其它文本编辑工具新建一个文本文件,输入下面的内容:
代码: [全选] [下载 Example1.xml]
<?xml version="1.0" encoding="UTF-8"?>
<customMapSource>
    <name>My Own Google Map</name>
    <minZoom>0</minZoom>
    <maxZoom>20</maxZoom>
    <tileType>PNG</tileType>
    <url><![CDATA[http://mt{$serverpart}.google.cn/vt/lyrs=m@209712068&hl=zh-CN&gl=CN&src=app&x={$x}&y={$y}&z={$z}&s=G]]></url>
    <serverParts>0 1 2 3</serverParts>
</customMapSource>
Map Source XML

上面配置中,
<name>是自定义的地图源名字,注意不要和任何现有地图源名字重复哦。
<url>就是刚才用浏览器分析出的url,只是需要把其中x,y,z的具体的值,替换为{$x}, {$y}, {$z}这样的引用。同时把原url中mt3替换为了mt{$serverpart},并在接下来的<serverParts>....</serverParts>配置中写入“0 1 2 3”。 在下载开始时,MOBAC会将{$x}, {$y}, {$z}替换为真实的x,y,z, 将{$serverpart}替换为0 1 2 3中随机的一个。

将此文件保存为一个xml文件,如MyMap1.xml, 存到Mobile Atlas Creator安装目录下面mapsources子目录,重启MOBAC, 你就可以在MOBAC的地图源列表中看到刚刚添加的“My Own Google Map”地图源了。

注意: 如果XML配置文件中使用了汉字,必须在保存时选择编码为UTF-8,否则无法正常工作。

在一个<customMapSource>配置中,可以配置以下参数配置:
<name>: 必填参数,地图源名字,支持中文, 但保存时文件必须保存为UTF-8的编码哦。
<minZoom>: 必填参数,地图的最小缩放等级,如0级
<maxZoom>: 必填参数,地图的最大缩放等级,如20级
<tileType>: 必填参数,地图的图片格式,支持JPG、PNG、GIF, 3种配置
<url>: 必填参数,最重要的参数,表示访问的url规则,即:如何由x,y,z 拼出图片的在线网址,我们会在后面详细介绍该参数的配置。
<invertYCoordinate>: 可选参数,是否反转y,有些地图y编号是反向增长的,即最底下一行为0,越上北,编号越大,这时需要将此设为true,才能正常使用。
<serverParts>: 可选参数,指定多台服务器,作用于替换掉<url>中的{$serverport}部分
<backgroundColor>: 可选参数,地图的背景颜色,只对透明的地图或请求失败时才有意义,并按照#RGBA的格式,例如#FF00007F表示半透明的红色。
<tileUpdate>: 可选参数,绝对本地缓存的地图图片的刷新逻辑,支持:IfNoneMatch、ETag、IfModifiedSince、LastModified、None(默认)。前面4个需要服务器支持,None表示不考虑服务器标记,只按照MOBAC全局设置中设置的过期时间为准。
<ignoreErrors>: 可选参数,在下载出错时是否忽略错误,继续下载。如果设置为false(默认),会在显示一个红色叉在对应位置,并且会记录到总出错计数中,注意:对于天地图2.0, 因为地图设计的特殊性,必须将ignoreErrors设为true,才能正常下载(详细原因有机会再给大家详细介绍)。

2、多图层地图源的XML配置方法

对于Google混合地图等地图源,通过分析Network的网络请求,您会发现每个地方的图片其实是由2张地图叠加而成,底层是卫星图,上层是透明的道路地图,如下所示:
道路地图层(在上):
图片
网址为:http://mt1.google.cn/vt/imgtp=png32&lyrs=h@210000000&hl=zh-CN&gl=CN&src=app&x=47&y=23&z=6&s=Gali

卫星地图层(在下)
图片
网址为:http://mt3.google.cn/vt/lyrs=s@126&hl=zh-CN&gl=CN&src=app&x=47&y=23&z=6&s=Gali

合并后效果:
图片

要支持这样的多图层地图源,您可以是有MOBAC的多图层地图源(<customMultiLayerMapSource>)配置,它可以将任意多个不同类型的地图源叠在并输出。
上面例子中对应的Google混合地图的XML文件如下
代码: [全选] [下载 Example2.xml]
<?xml version="1.0" encoding="UTF-8"?>
<customMultiLayerMapSource>
 <name>My Own Google Hybrid Map</name>
<layers>
  <customMapSource>
    <name>My Own Google Satellite</name>
    <minZoom>0</minZoom>
    <maxZoom>20</maxZoom>
    <tileType>PNG</tileType>
    <url><![CDATA[http://mt{$serverpart}.google.cn/vt/lyrs=s@126&hl=zh-CN&gl=CN&src=app&x={$x}&y={$y}&z={$z}&s=G]]></url>
    <serverParts>0 1 2 3</serverParts>
  </customMapSource>
  <customMapSource>
    <name>My Own Google Street</name>
    <minZoom>0</minZoom>
    <maxZoom>20</maxZoom>
    <tileType>PNG</tileType>
    <url><![CDATA[http://mt{$serverpart}.google.cn/vt/imgtp=png32&lyrs=h@210000000&hl=zh-CN&gl=CN&src=app&x={$x}&y={$y}&z={$z}&s=G]]></url>
    <serverParts>0 1 2 3</serverParts>
  </customMapSource>
</layers>
</customMultiLayerMapSource>
 
Map Source XML

注意配置的顺序将影响最终合并效果,配置越靠前,合并时放的位置越下面。
将上面的文件保存为xml,保存到mapsources子目录,重启MOBAC,即可看到新增的地图源:My Own Google Hybrid Map

当多图层中的某一个图层,已经在其它配置文件中配置过,则您也可以直接通过地图源名字引用这些图层,例如,假设Map1和Map2是已经存在的地图源,而Map3是不存在的,则我们可以用下面的多图层地图源来合并Map1,Map2,Map3,其中Map1在最下面,Map3在最上面。
代码: [全选] [下载 Example3.xml]
<?xml version="1.0" encoding="UTF-8"?>
<customMultiLayerMapSource>
 <name>My Own Google Hybrid Map</name>
<layers>
    <mapSource>
        <name>Map1</name>
    </mapSource>
    <mapSource>
        <name>Map2</name>
    </mapSource>
    <customMapSource>
    <name>Map3</name>
    <minZoom>0</minZoom>
    <maxZoom>20</maxZoom>
    <tileType>PNG</tileType>
    <url>...........</url>
  </customMapSource>
</layers>
</customMultiLayerMapSource>
 
Map Source XML


3、其它类型地图源的XML配置方法
除了使用<customMapSource>配置标准的Web摩卡托投影地图,MOBAC还支持WMS,CloudMade,本地文件,本地Zip,本地Sqlite等多种格式的网络服务或本地资源作为地图源。例如,下面是TerraServer地图的WMS配置
代码: [全选] [下载 Example4.xml]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customWmsMapSource>
  <name>TerraServer WMS</name>
  <minZoom>12</minZoom>
  <maxZoom>18</maxZoom>
  <tileType>JPG</tileType>
  <version>1.1.1</version>
  <layers>DRG</layers>
  <url>http://terraserver-usa.com/ogcmap6.ashx?</url>
  <coordinatesystem>EPSG:4326</coordinatesystem>
  <aditionalparameters><![CDATA[&EXCEPTIONS=BLANK&Styles=]]></aditionalparameters>
  <backgroundColor>#000000</backgroundColor>
</customWmsMapSource>
 
Map Source XML

不同类型地图源对应的顶级标签如下:
<customWmsMapSource>: WMS 地图
<cloudMade>: cloudMade地图
<localTileFiles>: 本地瓦片图片,必须按照zoom/x/y.png 或者其它支持的目录结构与命名规范存储
<localTileZip>: 存储在Zip中的本地瓦片图片,zip内部目录结构的要求和<localTileFiles>一样。
<localTileSQLite>: 本地Sqlite离线地图文件,目前支持RMaps, MBTiles, BigPlanetTracks, NaviComputer 和 OSMAND。

关于这些地图源的详细配置参数,这里不做进一步介绍,有需要的朋友可以参考MOBAC的官方Wiki:http://sourceforge.net/apps/mediawiki/mobac/index.php?title=Custom_XML_Map_Sources#Custom_WMS_map_sources

对于使用Mobile Atlas Creator MP (地图加加改进版)的用户,可以使用我们开发的叠加本地图片到离线地图的功能,即类似Google Earth KMZ Overlay,将一张本地图片,按照指定的经纬度范围,平铺到地图的某个区域,并在所有缩放等级都可见。
下面是一个本地图片叠加层的例子:
代码: [全选] [下载 "Example5.xml"]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customMultiLayerMapSource>
  <name>本地文件+卫星地图</name>
  <tileType>PNG</tileType>
  <layers>
    <mapSource>
        <name>Google 卫星地图</name>
    </mapSource>
    <localImageFile>
        <name>Image1</name>
        <imageFile>C:\image\test.png</imageFile>
        <minZoom>0</minZoom>
        <maxZoom>20</maxZoom>
        <boxNorth>33.52</boxNorth>
        <boxSouth>32.42</boxSouth>
        <boxWest>106.51</boxWest>
        <boxEast>106.99</boxEast>
        <retinaDisplay>false</retinaDisplay>
        <backgroundColor>#00000000</backgroundColor>
    </localImageFile>
  </layers>
</customMultiLayerMapSource>
 
Map Source XML

它将本地的C:\image\test.png图片,平铺到纬度32.42 ~ 33.52, 经度:106.51 ~ 106.99 这个范围。并且与本地的“Google 卫星地图”这个图层进行叠加。
关于本地图片叠加层的更多使用技巧,请参考:http://duweis.com/forums/viewtopic.php?f=16&t=248

4、BeanShell地图源配置方法

对于一些比较复杂的地图,如Soso地图,通过分析其图片网址,会发现图片地址的规则不是简单的使用x,y,z,还引入了一些新的变量如dx,dy,或者对x,y,z进行复杂运算和判断才能构造出图片网址。例如 x + 20, y/2, z-1, 等等,这个时候,简单的XML配置文件无法应付,MOBAC为大家提供了更高阶的BeanShell脚本来支持。

BeanShell脚本允许您使用Java语法书写从x,y,z到最终网址之间的各种运算和条件判断,需要您具有一定的编程知识,您可以在其中使用Java的绝大多数语法和函数,也可以像普通脚本那样定义无类型的变量,是非常强大的地图源配置手段。

考虑到版权问题,我们这里不在以真实地图为例,而是以一个假想的地图来介绍BeanShell的使用:

假设有一个在线地图MyBSMap,其图片网址形如:http://map.bsh.com/tile?p=12&q=MM2013&m=97&src=app
通过分析,我们了解了它的p,q,m参数的规则为:
代码: [全选]
p = x - 64
q = “MM” + y;
当z>10时, m = z, 当z < 10时,m = z + x;
Bean Shell


根据上述规则,我们用记事本新建一个文本文件如下:
代码: [全选]
//每个Beanshell必须这个函数,传入x,y,z, 用户自行拼接一个网址字符串并返回;
String getTileUrl( int zoom, int x, int y ) {
    p = x - 64;
    q = "MM" + y;
    int m;
    if(z > 10)
    {
        m = z;
    } else {
        m = x + z
    }
    return "http://map.bsh.com/tile?p="+ p +"&q="+ q +"&m="+ m +"&src=app";
}

tileType = "png"; // 必须,可以等于 "png" ,"jpg" 或 "gif"
name = "My BSH Map"; //必须,并且不能和其它地图源重名
tileSize = 256; // 图片大小,可选
minZoom = 1;    // 最小等级,可选
maxZoom = 18;   // 最大等级,可选
Bean Shell


注意:String getTileUrl( int zoom, int x, int y ) 函数是必须的函数,tileType和name属性也是必须的属性,name指定的名字将是地图源的显示名,不能和其它地图源重复哦!

编辑好后将文件存储为bsh文件,如mybshmap.bsh, 保存到MOBAC目录的mapsources子目录,重启MOBAC,即可以看到新增的 "My BSH Map"地图源了。如果文件中含有汉字,请保存为UTF-8编码,否则将显示为乱码或出错!

先写这么多了,其实,对于复杂的在线地图,最困难的在于分析URL规则,这需要您有一定的Javascript基础和足够的耐心,也希望您能将自己的分析和所得及时分享,让更多的人收益哦。
Zax Zeng
Duwei Technology
头像
Zax
★★★★★
 
帖子: 1208
注册: 2011-07-27 0:54

如何编辑下载FreeMap的XML文件

帖子icefirechu » 2013-06-05 2:34

这个问题曾发在http://duweis.com/forums/viewtopic.php?f=16&t=229&p=477#p477贴子后,发错了地方,在这里重发一下。不好意思。
网址是http://www.maps-for-free.com/
比如我想下载海拔relief图,我已经将链接查到,并用替代格式改为:
http://www.maps-for-free.com/layer/relief/z2/row0/{$z}_{$x}-{$y}.jpg
其中Z2是地图缩放级别为2,这个数字可从0变为18;row0表示的是第几排,2级地图是1024*1024,共4排,也就是row后的数字可从0变到3。
我想问有没有方法用某一格式代替可变数字,否则只能出来固定某个缩放级别,且只能显现一排高为256的图片。
我曾试过用<serverParts>替代,但失败了。
请问哪位高手能解决这个问题?
万分感谢。
头像
icefirechu
★★
 
帖子: 8
注册: 2013-06-05 2:08

Re: 如何编辑下载FreeMap的XML文件

帖子Zax » 2013-06-05 12:54

icefirechu 写道:这个问题曾发在http://duweis.com/forums/viewtopic.php?f=16&t=229&p=477#p477贴子后,发错了地方,在这里重发一下。不好意思。
网址是http://www.maps-for-free.com/
比如我想下载海拔relief图,我已经将链接查到,并用替代格式改为:
http://www.maps-for-free.com/layer/relief/z2/row0/{$z}_{$x}-{$y}.jpg
其中Z2是地图缩放级别为2,这个数字可从0变为18;row0表示的是第几排,2级地图是1024*1024,共4排,也就是row后的数字可从0变到3。
我想问有没有方法用某一格式代替可变数字,否则只能出来固定某个缩放级别,且只能显现一排高为256的图片。
我曾试过用<serverParts>替代,但失败了。
请问哪位高手能解决这个问题?
万分感谢。


使用下面的串应该可以:
http://www.maps-for-free.com/layer/relief/z{$z}/row{$y}/{$z}_{$x}-{$y}.jpg

如果需要更为复杂的计算,建议使用BeanShell脚本,详情见上面的介绍,例如,同样这个地图,BeanShell的主函数写为即可:
BeanShell还支持加减乘除,
String getTileUrl( int zoom, int x, int y )
{
return "http://www.maps-for-free.com/layer/relief/z" + zoom + "/row" + y + "/" + zoom + "_" + x + "-" + y + ".jpg";
}
Zax Zeng
Duwei Technology
头像
Zax
★★★★★
 
帖子: 1208
注册: 2011-07-27 0:54

感谢支持

帖子icefirechu » 2013-06-05 22:11

兄弟大才,修改的串能用,感谢了!
头像
icefirechu
★★
 
帖子: 8
注册: 2013-06-05 2:08

请帮忙看一下这个地图文件如何编程

帖子icefirechu » 2013-06-19 1:34

地图链接为http://mrdata.usgs.gov/mineral-resources/copper-smelters.html
用CacheView查看到的链接是http://mrdata.usgs.gov/services/country?LAYERS=country&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&FORMAT=image%2Fjpeg&SRS=EPSG%3A4326&BBOX=-90,-45,90,45&WIDTH=768&HEIGHT=384
请问这个链接能修改成一个MAC的文件吗?
谢谢。


这个需要用到比较高阶的BeanShell来配置,而无法通过XML配置。您的链接应该是一些实时渲染引擎(如ArcGIS)渲染出的地图,其中WIDTH和HEIGHT表示整个地图是一张大图,而不是256x256的小图,您需要每个256x256的小图都用上面的连接生成一次就可以了。关于BBOX,这是地图区域的另外一种表达方式,每个256x256的小图,是可以用x,y,z产生一个对应的BBOX的。

USGS地图源在下面的链接中应该有现成的(地图制作 > 国外地图源 > USGS TOPO (full).bsh),提供0-19级的USGS TOPO地图,依靠BeanShell配置。您可以参考一下,里面应该也包括的BBOX的生成算法:http://pan.baidu.com/share/link?shareid=507619&uk=4144671628
头像
icefirechu
★★
 
帖子: 8
注册: 2013-06-05 2:08

Re: 【教程】如何添加Mobile Atlas Creator的自定义地图源

帖子icefirechu » 2013-06-19 13:02

好的,谢谢版主,我学习一下再问
头像
icefirechu
★★
 
帖子: 8
注册: 2013-06-05 2:08

BeanShell语句的问题

帖子icefirechu » 2013-06-19 14:55

static import java.lang.Math.*;
//USGS_World copper smelterslv 1 ~ lv 15
String getTileUrl( int zoom, int x, int y )
{
//http://mrdata.usgs.gov/services/sedznpb?TRANSPARENT=true&LAYERS=sedznpb&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&FORMAT=image%2Fpng&SRS=EPSG%3A4326&BBOX=-180,-90,180,90&WIDTH=768&HEIGHT=384
return "http://mrdata.usgs.gov/services/sedznpb?TRANSPARENT=true&LAYERS=sedznpb&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&FORMAT=image%2Fpng&SRS=EPSG%3A4326&BBOX="
+ mercatorTileEdges(x,y,zoom) +
"&WIDTH=256&HEIGHT=256";
}



numTiles(z){
return abs(pow(2,z));
}

mercatorToLat(mercatorY){
return(toDegrees(atan(sinh(mercatorY))));
}

latEdges1(y,z){
n = numTiles(z);
unit = 1 / n;
relY1 = y * unit;
lat1 = mercatorToLat(PI * (1 - 2 * relY1));
return lat1;
}

latEdges2(y,z){
n = numTiles(z);
unit = 1 / n;
relY1 = y * unit;
relY2 = relY1 + unit;
lat2 = mercatorToLat(PI * (1 - 2 * relY2));
return lat2;
}

lonEdges1(x,z){
n = numTiles(z);
unit = 360 / n;
lon1 = -180 + x * unit;
return lon1;
}

lonEdges2(x,z){
n = numTiles(z);
unit = 360 / n;
lon1 = -180 + x * unit;
lon2 = lon1 + unit;
return lon2;
}

tileEdges(x,y,z){
return (latEdges2(y,z) + "," +
lonEdges1(x,z) + "," +
latEdges1(y,z) + "," +
lonEdges2(x,z));
}

lon2mercator(l){
return (l * 20037508.34 / 180);
}

lat2mercator(l){
r = toRadians(l);
lat = log((1+sin(r)) / (1-sin(r)));
return (lat * 20037508.34 / 2 / PI);
}

mercatorTileEdges(x,y,z){
return (lon2mercator(lonEdges1(x,z)) + "," +
lat2mercator(latEdges2(y,z)) + "," +
lon2mercator(lonEdges2(x,z)) + "," +
lat2mercator(latEdges1(y,z)));
}


tileType = "png"; // required - image format "png" "jpg" or "gif"
name = "mineral";
tileSize = 256; // optional
minZoom = 0; // optional
maxZoom = 15; // optional
tileUpdate = TileUpdate.None; // TileUpdate.IfNoneMatch, TileUpdate.ETag, TileUpdate.IfModifiedSince, TileUpdate.LastModified, TileUpdate.None
//backgroundColor = "#ffffff"; // optional - supported since MOBAC 1.9.1

上面这段语句,我就修改了标红部分,但在MAC上看不到,楼主能帮忙分析一下吗?
谢谢。
头像
icefirechu
★★
 
帖子: 8
注册: 2013-06-05 2:08

Re: BeanShell语句的问题

帖子Zax » 2013-06-19 18:06

icefirechu 写道:static import java.lang.Math.*;
//USGS_World copper smelterslv 1 ~ lv 15
String getTileUrl( int zoom, int x, int y )
{
//http://mrdata.usgs.gov/services/sedznpb?TRANSPARENT=true&LAYERS=sedznpb&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&FORMAT=image%2Fpng&SRS=EPSG%3A4326&BBOX=-180,-90,180,90&WIDTH=768&HEIGHT=384
return "http://mrdata.usgs.gov/services/sedznpb?TRANSPARENT=true&LAYERS=sedznpb&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&FORMAT=image%2Fpng&SRS=EPSG%3A4326&BBOX="
+ mercatorTileEdges(x,y,zoom) +
"&WIDTH=256&HEIGHT=256";
}

....................
上面这段语句,我就修改了标红部分,但在MAC上看不到,楼主能帮忙分析一下吗?
谢谢。


你好,之前没有仔细看您给的地图网站,这其实是一个WMS规格的地图,可以使用XML配置,无须BeanShell。

例如您给出的country图层如下:
代码: [全选]
   <customWmsMapSource>
      <name>USGS - Country</name>
      <minZoom>0</minZoom>
      <maxZoom>18</maxZoom>
      <tileType>JPG</tileType>
      <version>1.1.1</version>
      <layers>country</layers>
      <url>http://mrdata.usgs.gov/services/country?</url>
      <coordinatesystem>EPSG:4326</coordinatesystem>
      <aditionalparameters><![CDATA[&SERVICE=WMS&STYLE=]]></aditionalparameters>
      <backgroundColor>#000000</backgroundColor>
   </customWmsMapSource>

这个地图还有一个文字标记层(copper-smelters) ,配置类似,注意tileType变为了PNG。

顺便介绍下WMS地图源配置:
customWmsMapSource 规则为
url + “REQUEST=GetMap” + "&LAYERS=" + layers + "&SRS=" + coordinatesystem + "&VERSION=" + version + "&FORMAT=image/" + tileType.getMimeType() + "&BBOX=.......&WIDTH=256&HEIGHT=256" + aditionalparameters;
其中:getMimeType()会自动把JPG转换为jpeg, PNG -> png, GIF -> gif, 上面规则中没有的参数,只要加到<aditionalparameters> 中即可。

最后,BeanShell也可以配置上面的各个图层,只是BBOX的计算规则和之前的ArcGIS的规则不同,应该是:
"左下角经度,左下角纬度, 右上角经度,右上角纬度”的轨迹, 即:
代码: [全选]
"&BBOX=" +  lonEdges1(x,zoom) + "," + latEdges2(y,zoom) + "," + lonEdges2(x,zoom) + "," + latEdges1(y,zoom);


此外,你还可以用MOBAC函数来进行上面的计算,这样就可以把BeanShell中一大堆计算函数都删除了:
代码: [全选]
"BBOX=" + Tools.xTileToLon(x * 256, zoom) + "," + Tools.yTileToLat((y+1)*256,zoom) + "," + Tools.xTileToLon((x+1)*256,zoom) + "," + Tools.yTileToLat(y*256,zoom)
Zax Zeng
Duwei Technology
头像
Zax
★★★★★
 
帖子: 1208
注册: 2011-07-27 0:54

谢谢解决问题

帖子icefirechu » 2013-06-19 23:17

谢谢楼主,我想要的就是那个PNG的矿藏标注图层,用您给的方案解决了问题,又学到了一招。
因为没学过编程,只能一步一步地向楼主学,实在不好意思。
再次表示感谢。
头像
icefirechu
★★
 
帖子: 8
注册: 2013-06-05 2:08

Re: 【教程】如何添加Mobile Atlas Creator的自定义地图源

帖子lhj1218 » 2014-03-04 9:42

能提供个搜狗高清卫星地图的源?多谢。
头像
lhj1218
★★
 
帖子: 2
注册: 2013-09-05 8:07

下一页

回到 地图加加 - 官方论坛

cron