高德地图如何接入谷歌碎片实现显示国外地址

一.先上代码,网上我查了很多,有两种方法,如下

1.MapsInitializer.loadWorldGridMap(true);

这个方法我试了,MapsInitializer类找不到这个方法,对于开发者其实还有更简单的方法(亲测不行)。

2.高德地图支持瓦片显示,所以当我们显示国外地址时,只需要在高德地图上添加Google的瓦片即可,开发者也可以使用已经下载好 的瓦片或者自定义的瓦片。

UrlTileProvider tileProvider = new UrlTileProvider(256, 256) {

@Override

public URL getTileUrl(int x, int y, int zoom) {

try {

Random random = new Random();

String s = String.format("http://mt"+random.nextInt(3)+".google.cn/vt/lyrs=m@142&hl=zh-CN&gl=cn&x=%d&y=%d&z=%d&s=Galil",x,y,zoom);

return new URL(s);

} catch (MalformedURLException e) {

e.printStackTrace();

}

return null;

}

};

mAmap.addTileOverlay(new TileOverlayOptions()

.tileProvider(tileProvider)

.diskCacheEnabled(true)

.diskCacheDir("/storage/emulated/0/demo/cache")

.diskCacheSize(100000)

.memoryCacheEnabled(true)

.memCacheSize(100000));

这样直接调用就ok。

详细介绍下上面写法

地图瓦片地址:http://mt2.google.cn/vt/lyrs=m@167000000&hl=zh-CN&gl=cn&x=420&y=193&z=9&s=Galil

详细解释下

mt2.google.cn :Google瓦片服务服务器,可以尝试mt1.google.cn依然有效。Google提供多台瓦片服务器,减轻服务器负载,提高网络访问效率。

x瓦片的横向索引,起始位置为最左边,数值为0,向右+1递增。

y瓦片的纵向索引,起始位置为最上面,数值为0,向下+1递增。

z地图的级别Zoom,最上一级为0,向下依次递增。(0~22)

​s             (3*x + y)%8 = s

x , y , z 组合后与 8 求余即可得到 s 的值。​

其它几个参数的含义

1)mt ( 0—3)

Google 地图使用了四个服务地址,即 http://mt ( 0—3).google.cn/......,都可以用。

地图:http://mt2.google.cn/vt/lyrs=m@&hl=zh-CN&gl=cn&x=...

影像底图:http://mt3.google.cn/vt/lyrs=s@110&hl=zh-CN&gl=cn&x=...

影像的叠加:http://mt1.google.cn/vt/imgtp=png32&lyrs=h&hl=zh-CN&gl=cn&x=...

2)lyrs=...

表示的是图层类型,即瓦片类型,具体含义如下:

m:路线图

​t:地形图

​p:带标签的地形图

​s:卫星图

​y:带标签的卫星图

​h:标签层(路名、地名等)

3)&s=...

暂时未发现 "&s=..." 的意义,url有无此后缀都不影响瓦片地址的访问。

计算瓦片URL

​要想出图就必须知道地图控件可视范围起始点瓦片索引、末尾瓦片索引,中间区域的瓦片索引循环遍历即可得出。

下面看看如果计算出起始点、末尾瓦片url索引:

已知:bounds(地图范围[ -20037508.3427892, 20037508.3427892])、viewBounds(地图控件可视范围)、瓦片像素宽高(256)。

未知:startX(视图起始瓦片X方向索引)、startY(视图起始瓦片Y方向索引)、endX(视图未尾瓦片x方向索引)、endY(视图未尾瓦片y方向索引)。

求解:

1.zoom

根据当前地图比例尺可求解地图缩放级别zoom和比例尺

static public void GetWebMapZoomAndMapScale(double realScale, ref int zoom, ref long scale)

{

long rescaleLong = Convert.ToInt32(realScale);

int z = 21;

double min = 0;

double max = 0;

for (int i = 0; i < Scales.Length - 1; i++)

{

if (i == 0)

min = 0;

else

min = Scales[i - 1] + ((Scales[i] - Scales[i - 1]) / 2);

max = Scales[i] + ((Scales[i + 1] - Scales[i]) / 2);

if (realScale > min && realScale <= max)

{

scale = Scales[i];

zoom = z;

return;

}

z--;

}

zoom = 0;

scale = Scales[Scales.Length - 1];

}

​2.Resolution

Resolution = 20037508.3427892 * 2 / 256 / (Math.Pow(2,zoom));​

3.瓦片索引​

​startX = Math.Floor((viewBounds.leftBottom_x - bounds.leftBottom_x) / Resolution / 256);

startY = Math.Floor((viewBounds.leftBottom_y - bounds.leftBottom_y) / Resolution / 256);

endX = Math.Floor((viewBounds.rightTop_x - bounds.rightTop_x) / Resolution / 256);

endY = Math.Floor((viewBounds.rightTop_y- bounds.rightTop_y) / Resolution / 256);

4.瓦片URL

firstTileUrl(起始瓦片Url) = http://**********?x=startX&y=startY&z=zoom;

endTileUrl(末尾瓦片Url) = http://**********?x=endX&y=startY&z=zoom;

中间部分的url循环遍历即可得出。

5.拼接瓦片​

好啦!组成视图所有瓦片的url都已得出。下面就是要解决将这些瓦片放到哪的问题。

startTilePositionX = bounds.leftBottom_x + (startX * 256 * Resolutions);

startTilePositionY = bounds.rightTop_y + (endY * 256 * Resolutions);//左上角开始

distanceX = (map_left - startTilePositionX) / Resolutions;//瓦片左边与地图控件左边相距的像素距离

distanceY = (map_top - startTilePositionY) / Resolutions;//瓦片上边与地图控件上边相距的像素距离

遍历各url地址,获取图片绘制到地图控件的指定位置。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容