设置多边形在 Google 个地图中的显示顺序
Set Display order of polygons in Google Maps
我需要使用绘图库中 Google 地图中的多边形来定义特定区域内的一些区域。
我的框架基本就绪,但我注意到有时我的多边形顺序与我预期的不一样。
我对我的第一个多边形使用 999999999 的 zIndex 属性 并在绘制更多多边形时减小此值,因为第一个区域是最小的,其他区域从这个区域延伸 - 并且此设置较小的多边形应该仍然可以选择。
我的问题是,这有时会起作用,但尽管 zIndex 值较低,但会耗尽它覆盖在我的其他多边形之上的一些更大的更远的区域
谁能看出我哪里出错了,或者是否有其他方法可以做到这一点,因为 zIndex 并不总是适用。
这是一个示例 sahpe 初始化
google.maps.event.addListener(drawingManager, 'overlaycomplete', function(e) {
zVal = zVal-1000000;
if (e.type != google.maps.drawing.OverlayType.MARKER) {
// Switch back to non-drawing mode after drawing a shape.
drawingManager.setDrawingMode(null);
// Add an event listener that selects the newly-drawn shape when the user
// mouses down on it.
var newShape = e.overlay;
//Check to see if the shape has an id if not alert user to pick a zone
newShape.type = e.type;
newShape.id=curID;
newShape.zIndex=zVal;
$('#'+curID).attr("disabled", true);
google.maps.event.addListener(newShape, 'click', function() {
if(this.id =="" || this.id==null){
alert('no id');
}
setSelection(newShape);
});
setSelection(newShape);
clearSelection();
}
});
这是一张较小区域为区域 1 的图片,在这种情况下,尽管 zIndex 较高,但无法选择
问题是你如何设置 zIndex:
newShape.zIndex=zVal;
多边形不是 HTMLElements,zIndex 不是 CSS-属性,它只是一个 属性 告诉 API 多边形应该按什么顺序排列渲染。
多边形将被渲染为 <canvas/>
中的对象,CSS 可能不会用于这些对象,对象何时绘制很重要。
为了能够以正确的顺序绘制多边形,API 需要知道多边形的 zIndex-属性 何时发生变化(然后 API 必须重新计算所有多边形的顺序并重新绘制它们)。
但是当你按照你的方式设置zIndex-属性时,API不会实现改变。
解决方法:
使用 MVCObject 的 setter 方法设置 zIndex:
newShape.set('zIndex',zVal);
API 现在会自动收到有关 属性 更改的通知并设置多边形的顺序
我需要使用绘图库中 Google 地图中的多边形来定义特定区域内的一些区域。
我的框架基本就绪,但我注意到有时我的多边形顺序与我预期的不一样。
我对我的第一个多边形使用 999999999 的 zIndex 属性 并在绘制更多多边形时减小此值,因为第一个区域是最小的,其他区域从这个区域延伸 - 并且此设置较小的多边形应该仍然可以选择。
我的问题是,这有时会起作用,但尽管 zIndex 值较低,但会耗尽它覆盖在我的其他多边形之上的一些更大的更远的区域
谁能看出我哪里出错了,或者是否有其他方法可以做到这一点,因为 zIndex 并不总是适用。
这是一个示例 sahpe 初始化
google.maps.event.addListener(drawingManager, 'overlaycomplete', function(e) {
zVal = zVal-1000000;
if (e.type != google.maps.drawing.OverlayType.MARKER) {
// Switch back to non-drawing mode after drawing a shape.
drawingManager.setDrawingMode(null);
// Add an event listener that selects the newly-drawn shape when the user
// mouses down on it.
var newShape = e.overlay;
//Check to see if the shape has an id if not alert user to pick a zone
newShape.type = e.type;
newShape.id=curID;
newShape.zIndex=zVal;
$('#'+curID).attr("disabled", true);
google.maps.event.addListener(newShape, 'click', function() {
if(this.id =="" || this.id==null){
alert('no id');
}
setSelection(newShape);
});
setSelection(newShape);
clearSelection();
}
});
这是一张较小区域为区域 1 的图片,在这种情况下,尽管 zIndex 较高,但无法选择
问题是你如何设置 zIndex:
newShape.zIndex=zVal;
多边形不是 HTMLElements,zIndex 不是 CSS-属性,它只是一个 属性 告诉 API 多边形应该按什么顺序排列渲染。
多边形将被渲染为 <canvas/>
中的对象,CSS 可能不会用于这些对象,对象何时绘制很重要。
为了能够以正确的顺序绘制多边形,API 需要知道多边形的 zIndex-属性 何时发生变化(然后 API 必须重新计算所有多边形的顺序并重新绘制它们)。
但是当你按照你的方式设置zIndex-属性时,API不会实现改变。
解决方法: 使用 MVCObject 的 setter 方法设置 zIndex:
newShape.set('zIndex',zVal);
API 现在会自动收到有关 属性 更改的通知并设置多边形的顺序