将要素标签放置在 OpenLayers 中的特定坐标处

问题描述 投票:0回答:1

我有一张在 QGIS 中维护的地图,并且定期将图层导出到 geojson,以便在网站上的 OpenLayers 中使用。

QGIS 允许我在要素上设置自定义标签位置,并将自定义标签位置的坐标存储在该图层的属性表中。

另一方面,OpenLayers 没有办法处理标签的特定坐标,而只能定义偏移量。

很简单,我只需要从特征中获取坐标,并测量到为标签存储的坐标的距离,并将其作为偏移量。至少我是这么想的。

这是我现有的代码,它计算距要素范围中心的偏移量:

    var offsetX = 0;
    var offsetY = 0;
    var labelX = +(feature.get('LabelX'));
    var labelY = +(feature.get('LabelY'));
    if (labelX && labelY) {
        var labelXY_coor = [labelX, labelY];
        var labelXY = map.getPixelFromCoordinate(labelXY_coor);
        var centerXY_coor = ol.extent.getCenter(feature.getGeometry().getExtent());
        var centerXY = map.getPixelFromCoordinate(centerXY_coor);
        offsetX = (labelXY[0] - centerXY[0]);
        offsetY = (labelXY[1] - centerXY[1]);
    }

但是,OpenLayers 解释的偏移似乎不是从要素中心开始的,而是从 OpenLayers 最初放置标签的位置开始的偏移。这并不总是中心,具体取决于形状。因此,只有当相关特征恰好完全对称时,我的代码才能正常工作,在这种情况下,我无论如何都不太可能自定义位置。

我已经搜索了一段时间,试图找出 OpenLayers 如何确定默认标签位置,但运气不佳,而且 API 文档中似乎没有方法告诉我它将把它放在哪里。

为了正确创建偏移,我如何找到 OpenLayers 计划放置标签的坐标(而不是像我现在所做的那样位于范围的中心)?

或者我什至吠叫正确的树,有更好的方法来保持 QGIS 和 OpenLayers 之间的自定义标签位置同步吗?

openlayers qgis openlayers-8
1个回答
0
投票

OpenLayers 有一个

geometry
选项来处理特定坐标 https://openlayers.org/en/latest/apidoc/module-ol_style_Style.html

在你的情况下,你可以使用类似的东西

var geometry = new ol.geom.Point([+(feature.get('LabelX')), +(feature.get('LabelY'))]);
© www.soinside.com 2019 - 2024. All rights reserved.