自定义谷歌地图瓦片服务器URL

10
我使用此URL从谷歌服务器获取地图瓦片。
http://mts0.google.com/vt/lyrs=m@189000000&hl=en&src=app&x=41189&y=25680&z=16&s=Gal

我想知道是否有一种方法可以自定义这个URL,通过添加一些额外的参数来获取没有街道标签、额外信息或覆盖物的瓦片。就像在地图API v3中自定义地图一样。欢迎任何建议。


你不能使用静态地图API吗? - kaho
我想在Android应用程序中使用它,使用静态地图时缓存控制有限... - Mehdi Mousavi
2个回答

26
我没有找到相关的文档,但是有一个参数apistyle。 隐藏街道标签的值(必须进行url编码)为:
s.t:3|s.e:l|p.v:off

由于缺少文档,以下内容是猜测:

  • s.t定义了特征类型,值为3的意思似乎是道路
  • s.e定义了元素,例如标签l或几何g
  • p定义了样式,v代表可见性,值off应该很清楚了。

https://mts0.google.com/vt/lyrs=m@289000001&hl=en&src=app&x=41189&y=25680&z=16&s=Gal&apistyle=s.t%3A3|s.e%3Al|p.v%3Aoff

你需要尝试调整参数以获得所需的结果。过去可以通过检查使用例如Styled Map Wizard时的瓦片URL来获得样式,但是他们已经修改了JavaScript API使用的瓦片URL,现在参数将以某种方式进行编码。

参数和值列表:

特征类型:s.t

  • 全部 0
  • 管理 1
  • 行政国家 17
  • 行政土地包裹 21
  • 行政区域 19
  • 行政社区 20
  • 行政省份 18
  • 景观 5
  • 景观人工制品 81
  • 自然风景 82
  • 兴趣点 2
  • 兴趣点景点 37
  • 兴趣点企业 33
  • 兴趣点政府 34
  • 兴趣点医疗 36
  • 兴趣点公园 40
  • 兴趣点宗教场所 38
  • 兴趣点学校 35
  • 兴趣点运动场馆 39
  • 道路 3
  • 道路干道 50
  • 道路高速公路 49
  • 道路本地 51
  • 公共交通 4
  • 公共交通线路 65
  • 公共交通站点 66
  • 6

元素类型:s.e

  • 几何形状 g
  • 几何填充 g.f
  • 几何描边 g.s
  • 标签 l
  • 标签图标 l.i
  • 标签文本 l.t
  • 标签文本填充 l.t.f
  • 标签文本描边 l.t.s

样式器:

  • 颜色 p.c
    RGBA十六进制值#aarrggbb
  • 伽马 p.g
    介于0.0110之间的浮点数
  • 色调 p.h
    RGB十六进制值#rrggbb

1
谢谢Molle博士。您真的帮了我很多。我尝试更改参数并得到了我想要的结果。为了关闭地点和其他位置,我使用了s.t:2,它起作用了。 - Mehdi Mousavi
@Mehdi Mousavi:在上面添加了一个带有参数/值的列表。 - Dr.Molle
3
对我来说它运行良好,但你知道选项组合的语法吗?例如,我想要在同一个 URL 中拥有:apistyle=s.t%3A0|s.e%3Al|p.v%3Aoff 以及 apistyle=s.t%3A6|s.e%3Ag|p.c%3A%23ffb3d1ff。 - Kalitine
2
@Kalitine,您可以使用逗号字符将每个集合分隔开。 - Hamy

9

实施 Molle 博士发现的内容:

function getEncodedStyles(styles){
var ret = "";
var styleparse_types = {"all":"0","administrative":"1","administrative.country":"17","administrative.land_parcel":"21","administrative.locality":"19","administrative.neighborhood":"20","administrative.province":"18","landscape":"5","landscape.man_made":"81","landscape.natural":"82","poi":"2","poi.attraction":"37","poi.business":"33","poi.government":"34","poi.medical":"36","poi.park":"40","poi.place_of_worship":"38","poi.school":"35","poi.sports_complex":"39","road":"3","road.arterial":"50","road.highway":"49","road.local":"51","transit":"4","transit.line":"65","transit.station":"66","water":"6"};
var styleparse_elements = {"all":"a","geometry":"g","geometry.fill":"g.f","geometry.stroke":"g.s","labels":"l","labels.icon":"l.i","labels.text":"l.t","labels.text.fill":"l.t.f","labels.text.stroke":"l.t.s"};
var styleparse_stylers = {"color":"p.c","gamma":"p.g","hue":"p.h","invert_lightness":"p.il","lightness":"p.l","saturation":"p.s","visibility":"p.v","weight":"p.w"};
for(i=0;i<styles.length;i++){
    if(styles[i].featureType){
        ret += "s.t:"+styleparse_types[styles[i].featureType]+"|";
    }
    if(styles[i].elementType){
        if(!styleparse_elements[styles[i].elementType])
            console.log("style element transcription unkown:"+styles[i].elementType);
        ret += "s.e:"+styleparse_elements[styles[i].elementType]+"|";
    }
    if(styles[i].stylers){
        for(u=0;u<styles[i].stylers.length;u++){
            var keys = [];
            var cstyler = styles[i].stylers[u]
            for(var k in cstyler){
                if(k=="color"){
                    if(cstyler[k].length==7)
                        cstyler[k] = "#ff"+cstyler[k].slice(1);
                    else if(cstyler[k].length!=9)
                        console.log("malformed color:"+cstyler[k]);
                }
                ret += styleparse_stylers[k]+":"+cstyler[k]+"|";
            }
        }
    }
    ret = ret.slice(0,ret.length-1);
    ret += ","
}
return encodeURIComponent(ret.slice(0,ret.length-1));
}

在这种情况下,输入是一个常规的谷歌地图样式数组 - 一个好的向导是Snazzy Maps

无论如何,感谢Molle博士节省了几个小时的时间!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接