【问题标题】:Openlayers icon positioningOpenlayers 图标定位
【发布时间】:2018-07-11 07:25:04
【问题描述】:

我正在尝试在 Openlayers 中的现有多边形中放置一个图标。

我正在使用多边形的范围来找到它的中心:

extent.getCenter(feature.getGeometry().getExtent());

然后将地图上的标记位置设置为那个。

如果多边形的形状相对简单,它就可以工作。然而,对于一些更高级的多边形,图标似乎被放置在多边形之外。

在这张照片中:

我已经用黑色圆圈标记了大“三角形”的图标和标签。

标签似乎知道如何坐在多边形内,但图标不知道,可能是因为标签位置是在 Openlayers 内部计算的。

通过将标签上的样式定义为文本对象来设置标签。也可以在样式中定义图像,但不幸的是它也被放置在多边形之外。

有没有办法让图标定位在标签所在的位置,或者只是让它始终位于绘制的多边形内?

【问题讨论】:

    标签: openlayers


    【解决方案1】:

    您应该使用ol.geom.Polygon 中的getInteriorPoint 方法。详情见APIhttp://openlayers.org/en/latest/apidoc/module-ol_geom_Polygon-Polygon.html#getInteriorPoint`

    您还可以看到a demo 使用“月亮”形状的多边形来说明“它的工作原理”。通常,质心应该在这种类型的形状之外,而对于函数,返回的点在里面。

    【讨论】:

    • 这种方法只存在于最新的openlayers 5中吗?我目前正在运行 openlayers 4,但如果它是 openlayers 5 的一个功能,我将不得不升级到 5。
    • 已经在 v4.6.5 API 例如openlayers.org/en/v4.6.5/apidoc/…
    • 谢谢。我遇到的挑战比我描述的要复杂一些,因为我在各种类型的层中有一整套功能。 getInteriorPoint 仅存在于多边形和多多边形上。 Feature.getGeometry() 返回没有 getInteriorPoint 方法的抽象几何类型。我通过对 Polygon 执行强制转换并检查该方法是否存在来解决这个问题,否则就像我以前一样使用 getExtent(),因为它不是 Polygon。
    • 不需要投,你只需要像if (feature.getGeometry() instanceof ol.geom.Polygon || feature.getGeometry() instanceof ol.geom.MultiPolygon) {/*use getInteriorPoint*/} else {/*use your other method*/}这样的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多