【发布时间】:2019-04-17 05:17:39
【问题描述】:
我正在尝试在 Google Maps DrawingManager 创建后的某个时间设置其笔触和填充颜色。我不知道 DrawingManager 最初是否设置为具有可编辑和可拖动的多边形,因此我不想更改可编辑和可拖动标志。我不想做的就是改变颜色。但是,似乎如果我不提供可编辑和可拖动的值,DrawingManager 会自动将它们设置为 false。
这不是多边形的工作方式。如果您创建了一个 Polygon 并将其设置为可编辑和可拖动,然后更改其颜色,它将记住原始标志状态。
文档并不清楚应该预期什么,但这种不一致对我来说似乎是 Google 地图中的一个错误。最终,我不想单独跟踪 DrawingManager 的状态并传递它。
有人知道为什么会这样吗?
查看此示例并注意 DrawingManager 和 Polygon 的行为方式的差异。原始多边形是可编辑的,但使用 DrawingManager 绘制的则不可编辑。
https://jsfiddle.net/wv9zapud/
google.maps.event.addDomListener(window, "load", function() {
var map = new google.maps.Map(document.getElementById("map_div"), {
center: new google.maps.LatLng(25, -70),
zoom: 5,
});
var triangleCoords = [{
lat: 25.774,
lng: -80.190
},
{
lat: 18.466,
lng: -66.118
},
{
lat: 32.321,
lng: -64.757
},
{
lat: 25.774,
lng: -80.190
}
];
var bermudaTriangle = new google.maps.Polygon({
map: map,
paths: triangleCoords,
strokeColor: 'red',
fillColor: 'red',
editable: true,
draggable: true
});
bermudaTriangle.setOptions({
strokeColor: 'blue',
fillColor: 'blue'
});
var drawingManager = new google.maps.drawing.DrawingManager({
map: map,
drawingMode: google.maps.drawing.OverlayType.POLYGON,
drawingControl: false,
polygonOptions: {
fillColor: 'red',
strokeColor: 'red',
editable: true,
draggable: true
}
});
drawingManager.setOptions({
polygonOptions: {
fillColor: 'blue',
strokeColor: 'blue'
}
});
});
【问题讨论】:
-
我同意这在文档中不是很清楚。另请注意,使用绘图管理器时,您只能使用 2 个几乎等效的多边形事件:
overlaycomplete和polygoncomplete。我通常做的是使用polygoncomplete事件,获取形状路径并从中创建一个 normal 多边形。这样您就可以访问 Polygon 类的所有事件。见this example。如果您想保持绘图模式,可以注释掉drawingManager.setDrawingMode(null);行。 -
然后重新。你的问题是为什么它的行为方式,我 认为 这是因为在你的 Polygon 示例中,你正在为那个 Polygon 更改一些选项,而绘图管理器的
setOptions设置所有形状的选项,因此如果您省略某些值,它们将使用默认值。 -
@MrUpsidown 感谢您的想法和榜样。我同意
setOptions第一次应该使用默认值来丢失参数(它还能做什么?)。但是,当在 DrawingManager 上设置新选项时,我希望它坚持最初创建时设置的参数值,并且只覆盖专门提供的参数。这正是 Polygon 所做的。在您的示例中,您假设可编辑/可拖动为真。我希望新的多边形只有在最初以这种方式创建的绘图管理器时才可编辑/可拖动。 -
不应该太难保留这些选项的参考,因为这已在另一条评论中向您建议。同样在
overlaycomplete或polygoncomplete事件监听器中(再看我的例子)你可以检查event.overlay.draggable。如果您设置它,它将是true/false,如果您没有设置它/使用默认值,它将是 undefined。editable也一样。 -
我的主要目标是提出一个更清洁的解决方案,然后保持对状态的引用(这样当我更改颜色时,我可以重新应用状态)。但看起来这就是我最终必须要做的。
标签: javascript google-maps google-maps-api-3