Openlayers RegularShape半径1和半径2应如何用于生成恒星?

时间:2017-03-18 02:45:07

标签: openlayers

ol.style.RegularShape的Openlayers文档说:

radius  number | undefined   Radius of a regular polygon.
radius1 number | undefined   Inner radius of a star.
radius2 number | undefined   Outer radius of a star.

我的解释是,对于普通的多边形(三角形,正方形,五边形等),我会使用radius,但不应使用radius1或{{1} }。当然这很好。

同样,我将此解释为对于明星,我不应该使用radius2并且我应该同时使用radiusradius1 radius2应小于radius1。然而,这产生了一个相当古怪的符号,在其中我可以看到一个恒星的部分,但它似乎被一个方形面具裁剪。

要获得我想要的结果(在检查Openlayers示例代码之后),我最终使用radius2radiusradius2是较小的数字!

下面是两个版本的javascript,唯一的区别是使用了各种radius2参数。

似乎我对文档的理解不正确(或文档/实现已被破坏)。

我更愿意知道为什么我的新代码有效。那么有人可以解释各种radius(X)参数应该如何工作,并帮助我更好地理解这三个参数的描述?

这段代码产生了一个看起来很奇怪的符号,有点像一个方形蒙版的星形切割:

bad start

radius(X)

此代码生成正确的星号:

good start

new ol.style.Style({
    image: new ol.style.RegularShape({
        stroke: new ol.style.Stroke({
            color: '#333333FF',
            width: 6.0
        }),
        radius1: 24,
        radius2: 60,
        points: 5
    })
})

1 个答案:

答案 0 :(得分:1)

你是对的。文档不正确。我创建了https://github.com/openlayers/openlayers/pull/6604并修复了。

您必须使用radius1radius作为星的外半径,radius2作为内半径。您的第一个示例不起作用的原因是因为符号大小是从radiusradius1确定的。如果这是较小的半径,则符号大小将不适应整个星。