我有一个Google地图,上面有许多标记(黄色圆圈),并且我实现了一个可以在标记上绘制多边形的工具。然而,在绘制时多边形会被标记遮挡住(完成后也是如此)。
我尝试过同时更改标记和多边形的ZIndex,但这似乎只会改变标记与其他标记之间的显示方式,并不会影响标记与多边形之间的显示关系。我还尝试过
polygon.setZIndex(google.maps.Marker.MAX_ZINDEX + 1);
我该如何将多边形移至最前面?
我有一个Google地图,上面有许多标记(黄色圆圈),并且我实现了一个可以在标记上绘制多边形的工具。然而,在绘制时多边形会被标记遮挡住(完成后也是如此)。
我尝试过同时更改标记和多边形的ZIndex,但这似乎只会改变标记与其他标记之间的显示方式,并不会影响标记与多边形之间的显示关系。我还尝试过
polygon.setZIndex(google.maps.Marker.MAX_ZINDEX + 1);
我该如何将多边形移至最前面?
这并不能解决问题,但它可以解释为什么你尝试的方法没有奏效。
地图 API 使用几个称为 MapPanes 的层,按照固定的 Z 顺序:
因此,在第 2 层的标记图像始终在第 1 层的多边形之上。当您调整标记的 z-index 时,只是相对于彼此进行调整。这没有任何好处,因为它们都在多边形上方的一层中。
你能做些什么呢?我能想到的唯一解决办法是为多边形或标记创建自己的 OverlayView,这样你就可以将它们放在想要的 MapPane 中。
你的标记是否可点击,还是只是静态图像?如果它们不可点击,你可能可以在mapPane
中自己绘制它们。然后你的多边形就会在它们上面。或者相反:你可以在更高的层中自己绘制多边形,比如在 floatShadow
中。canvas
元素或 DOM 图像。如果它们是可点击的,你还需要进行自己的鼠标命中测试。OverlayView
示例,但我会提到我自己的一个:我写了一个叫做 PolyGonzo 的小库,其中 polygonzo.js 文件有 OverlayView
实现。代码不是很好 - 我匆忙地把它拼凑起来了 - 但它可能会帮助你想出一些主意。我知道这个问题很老,但为了未来的用户,我想分享我的方法:
具有较高 zIndex
值的形状会显示在具有较低值的形状前面。对于此示例,我正在使用多边形,但对于其他形状也是类似的:
var globalZIndex = 1; //Be sure you can access anywhere
//... Other instructions for creating map, polygon and any else
polygon.setOptions({ zIndex: globalZIndex++ });
请注意标记具有一个名为setZIndex(zIndex:number)
的方法。
var lineSymbol = {
path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,
strokeColor: '#181727',
fillColor: '#50040B',
};
var dashedSymbol = {
path: 'M 0,-1 0,1',
strokeOpacity: 1,
scale: 4
};
[![function MakeMarker(pinColor){
var pinImage = new google.maps.MarkerImage("http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=%E2%80%A2|" + pinColor,
new google.maps.Size(21, 34),
new google.maps.Point(0,0),
new google.maps.Point(10, 34));
return pinImage;
}][1]][1]
FlowMarkersdashed(new google.maps.LatLng(positionorigin[0], positionorigin[1]),
new google.maps.LatLng(positiondestination[0], positiondestination[1]), myObject[i]['flowfluxphysique'][j]['colorFlux'], dashedSymbol, j);
function FlowMarkersdashed(latlngOrgin, latlngDest, ColorFlow, Symbol, indexvar){
var flightPlanCoordinates = [
latlngOrgin,
{lat: latlngOrgin.lat() + (indexvar) * 2, lng: latlngOrgin.lng()},
// {lat: -18.142, lng: 178.431},
latlngDest,
];
var line = new google.maps.Polyline({
path: flightPlanCoordinates,
strokeOpacity: 0,
icons: [{
icon: Symbol,
// offset: '100%',
offset: '0',
repeat: '20px'
// repeat: '20px'
}],
strokeColor: "#"+ColorFlow,
geodesic: true,
// editable: true,
map: map
});
}
要创建一个流程标记,请尝试使用以下代码
FlowMarkers(new google.maps.LatLng(positionorigin[0], positionorigin[1]),
new google.maps.LatLng(positiondestination[0], positiondestination[1]), myObject[i]['flowfluxinformation'][j]['colorFlux'], lineSymbol,j);
function FlowMarkersdashed(latlngOrgin, latlngDest, ColorFlow, Symbol, indexvar){
var flightPlanCoordinates = [
latlngOrgin,
{lat: latlngOrgin.lat() + (indexvar) * 2, lng: latlngOrgin.lng()},
// {lat: -18.142, lng: 178.431},
latlngDest,
];
var line = new google.maps.Polyline({
path: flightPlanCoordinates,
strokeOpacity: 0,
icons: [{
icon: Symbol,
// offset: '100%',
offset: '0',
repeat: '20px'
// repeat: '20px'
}],
strokeColor: "#"+ColorFlow,
geodesic: true,
// editable: true,
map: map
});
}
这是我的结果
更改此方法调用:
polygon.setZIndex(google.maps.Marker.MAX_ZINDEX + 1);
转换为:
polygon.setZIndex(4);