1

在 OpenLayers 中,我使用以下形式的代码创建了一个由两个 LinearRing 对象组成的多边形(这是在 Java+GWT 中,但同样的原则适用于 JS):

List<LinearRing> linearRingList = new ArrayList<LinearRing>();

List<Point> points1 = new ArrayList<Point>();
... populate points1 ...;
linearRingList.add(new LinearRing(points1.toArray(new Point[points.size()])));

List<Point> points2 = new ArrayList<Point>();
... populate points2 ...;
linearRingList.add(new LinearRing(points2.toArray(new Point[points.size()])));

Polygon poly = new Polygon(linearRingList.toArray(new LinearRing[linearRingList.size()]));
VectorFeature feature = new VectorFeature(poly);
myLayer.addFeature(feature);

当我在地图上查看这一层时,如果由 points1 和 points2 定义的多边形重叠,我会看到一个洞:

多边形孔 http://www.jackhollow.co.uk/misc/polygon.png

我看到了两个多边形的“异或”,而我想看到它们的“或”,即中间的那个洞用绿色填充。

我该怎么做呢?我确定这只是 Openlayers 中的一个显示问题,但我在任何地方都找不到控制它的标志。

原来的两个多边形如下:

多边形孔 http://www.jackhollow.co.uk/misc/polygon2.png

如果在单个图层上一起显示,它们会重叠,但 Openlayers 不会填充相交部分。

4

1 回答 1

2

问题是您将两个 LinearRings 添加到同一个多边形中。在第一个环之后,所有环都被定义为多边形的内环(即内部孔),这解释了您所看到的奇怪的相交行为 - 尝试绘制一个实际上不在内部的内环。请参阅文档中的组件。要解决您的问题,您需要创建两个单独的 Geometry.Polygons 和两个单独的 Feature.Vectors,并将它们都添加到您的 Layer.Vector。

 var linearRing1 = new OpenLayers.Geometry.LinearRing(pointList1);
 var feature1 = new OpenLayers.Feature.Vector(
          new OpenLayers.Geometry.Polygon([linearRing1]));

 var linearRing2 = new OpenLayers.Geometry.LinearRing(pointList2);
 var feature2 = new OpenLayers.Feature.Vector(
          new OpenLayers.Geometry.Polygon([linearRing2]));


var layer = new OpenLayers.Layer.Vector("layername");
layer.addFeatures([feature1, feature2]);

像以前一样在其中创建点列表。您还可以为每个特征向量添加属性和样式,或者为图层向量添加样式,但为了清楚起见,我将其省略了。

在 OpenLayers 中没有明确检查您的几何图形是否正确,即内环实际上在外环内,因此如果您将线串数组交给多边形构造函数,则会尝试将其转换为适当的 SVG 或 VML 对象,结果不可预测。

于 2014-06-22T07:33:51.520 回答