多彩的谷歌地图SVG符号

10

谷歌地图标记可以采用复杂的svg路径作为其图标,例如:

var baseSvg = {
    x1 : "m 0,0 l45,0 l 190,225 l -45,0 l -190,-225 z",
    x2 : "m 225,0 l -45,0 l -190,225 l 45,0 l 190,-225 z"                
};

var baseIcon = {
    path: "M0,0 " + baseSvg["x1"] + baseSvg["x2"],
    fillColor: "#000000",
    fillOpacity: 1,
    scale: .2,
    strokeColor: "black",
    strokeWeight: 0,
    rotation: 15
};

接着将其输入到一个标记器中:

var marker = new google.maps.Marker({
    position: new google.maps.LatLng(somelat, somelng),
    icon: baseIcon 
});

一切良好。但它只绘制单一颜色(在此示例中为黑色)。那么,它们只能有单一颜色吗?还是有办法使用多种颜色的符号? 使用示例代码,x1将是红色,x2将是绿色。

请注意,这个结构是从这里借鉴来的:如何在Google Maps API v3中指示SVG路径中的透明度?,它可以很好地工作。


可能是 为谷歌地图标记创建多彩 SVG 图标 的重复问题。 - geocodezip
2个回答

1
我刚刚做了同样的事情,我认为你需要绘制两个标记,它们的数据基本相同,但是path和此处的fillColor属性已更改:
var baseSvg = {
        x1 : "m 0,0 l45,0 l 190,225 l -45,0 l -190,-225 z",
        x2 : "m 225,0 l -45,0 l -190,225 l 45,0 l 190,-225 z"                
    },
    baseIcon = {
        fillOpacity: 1,
        scale: .2,
        strokeColor: "black",
        strokeWeight: 0,
        rotation: 15
    },
    markerPos = new google.maps.LatLng(somelat, somelng),
    // psuedo code for cloning an object since that 
    // is out of scope for this question
    greenIcon = Object.clone(baseIcon),
    redIcon = Object.clone(baseIcon);

greenIcon.path = baseSvg.x1;
greenIcon.fillColor = "#0f0";
redIcon.path = baseSvg.x2;
redIcon.fillColor = "#f00";

var marker1 = new google.maps.Marker({
    position: markerPos,
    map: map,
    icon: greenIcon
});
var marker2 = new google.maps.Marker({
    position: markerPos, 
    map: map,
    icon: redIcon
});

显然这不是优化过的JS,但你可以理解其思路。


0

当涉及到不透明度时,strokeOpacity 是你的选择。查看 maps.Symbol class 以获取更多关于符号属性的信息。


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