我有一个OpenLayers.Feature.Vector创建如下:
var multiPol = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.MultiPolygon([polygonGeometry1,polygonGeometry2]));
两个多边形在 Map 上表示相同的逻辑对象(“实体”),比如 Cloud . 这就是我将它们保留在一个功能中的原因 . 我想绘制它,以便在将多边形(polygonGeometry1,polygonGeometry2)的每个组件添加到图层时使用不同的颜色绘制:
var layer = new OpenLayers.Layer.Vector("polygonLayer");
layer.addFeatures([multiPol]);
我已经看过OpenLayers中的样式,样式图和规则,但它们似乎不够用 . 它们使我能够绘制具有不同颜色的每种几何类型,但前提是它们属于不同的特征(向量) . 有没有办法解决这个问题?我真的必须为每个多边形使用单独的Vector吗?
2 回答
据我所知,要获得此功能,您需要使用自己的类扩展类 .
首先创建OpenLayers.Feature.Vector的扩展,将其命名为YourApp.Feature.MultiVector . 您可以通过查看OpenLayers代码来查看有关如何扩展类的示例 . 该类应该接受样式数组和multiPolygon . 它应该有一个方法,它将返回一个OpenLayers.Feature.Vectors列表,每个都有自己的样式 .
第二步创建OpenLayers.Layer.Vector的扩展,将其命名为YourApp.Layer.VectorSupportingMultiStyledFeatures . 您需要覆盖“drawFeature”方法 . 在drawFeature方法测试中,查看特征的类型是否为MultiVector . 如果是,则遍历MultiVector中的每个要素并调用renderer.drawFeature(feature) . 否则调用super.drawFeature方法 .
所以你调用它的代码看起来像这样:
Jon Snyder提出的解决方案为我们提供了一个总体思路,但最终没有完全发挥作用(特别是基于OpenLayers 2.1x,此任务不需要扩展
OpenLayers.Layer.Vector
) .我们创建了一个类
YourApp.Handler.EndPointsPath
(扩展OpenLayers.Handler.Path
),其中函数geometryClone()
返回一个类型为YourApp.Geometry.EndPointsPath
的新几何 .然后,我们修补
OpenLayers.Renderer.Elements
中的函数drawGeometry()
来绘制这个新几何: