Google maps api v3允许将“样式”应用于地图,包括设置各种功能的颜色.但是,它使用的颜色格式是HSL(或者看起来像这样):
> hue(RGB十六进制字符串)
>亮度(-100到100之间的浮点值)
>饱和度(-100到100之间的浮点值)
(来自docs)
我设法在线找到RGB到HSL转换器,但我不确定如何以谷歌地图将接受的方式指定转换后的值.例如,转换器给出的典型HSL值为:209°72%49%
HSL值如何映射到我从google maps api指定的参数?即,色调度值如何映射到RGB十六进制字符串?百分比如何映射到-100到100之间的浮点值?
我仍然不确定如何进行转换.我需要,给定RGB值,快速将其转换为谷歌地图所期望的颜色将是相同的……
解决方法
由于hue参数需要RGB,因此可以使用原始颜色作为色调.
rgb2hsl.py:
#!/usr/bin/env python def rgb2hsl(r,g,b): #Hue: the RGB string H = (r<<16) + (g<<8) + b H = "0x%06X" % H #convert to [0 - 1] range r = float(r) / 0xFF g = float(g) / 0xFF b = float(b) / 0xFF #http://en.wikipedia.org/wiki/HSL_and_HSV#Lightness M = max(r,b) m = min(r,b) C = M - m #Lightness L = (M + m) / 2 #Saturation (HSL) if L == 0: S = 0 elif L <= .5: S = C/(2*L) else: S = C/(2 - 2*L) #gmaps wants values from -100 to 100 S = int(round(S * 200 - 100)) L = int(round(L * 200 - 100)) return (H,S,L) def main(r,b): r = int(r,base=16) g = int(g,base=16) b = int(b,base=16) print rgb2hsl(r,b) if __name__ == '__main__': from sys import argv main(*argv[1:])
例:
$./rgb2hsl.py F0 FF FF ('0xF0FFFF',100,94)
结果:
下面的屏幕截图显示了身体设置为rgb背景颜色(本例中为#2800E2),以及带有样式道路几何图形的谷歌地图,使用上面计算的值(‘0x2800E2’,-11).
很明显,谷歌使用你的造型来创建以给定颜色为中心的六种不同颜色,轮廓最接近输入.我相信这是最接近的.
从实验:http://gmaps-samples-v3.googlecode.com/svn/trunk/styledmaps/wizard/index.html
对于水,gmaps减去0.5的伽玛.要获得所需的确切颜色,请使用上面的计算,然后再添加.5 gamma.
喜欢:
{ featureType: "water",elementType: "geometry",stylers: [ { hue: "#2800e2" },{ saturation: 100 },{ lightness: -11 },{ gamma: 0.5 },] }