【问题标题】:How to get bounding rectangle of an ArcGIS TextSymbol?如何获取 ArcGIS TextSymbol 的边界矩形?
【发布时间】:2021-01-19 13:20:18
【问题描述】:

我正在使用 Qt C++ ArcGIS Runtime SDK v100.9,我在地图上绘制了各种形状和标签。

我希望能够找出 Graphic(地图上给定点 (SpatialReference::wgs84) 处的文本标签 (TextSymbol))的区域(边界矩形),以便确定标签大于或小于另一个图形(假设它的几何图形有一个多边形,用于绘制一个圆圈),以确定标签是否应设置为可见。

在派生自 Esri::ArcGISRuntime::MapGraphicsView 的类中,圆和文本标签是沿以下行创建的:

    Point centerWgs84(0.0, 0.0, SpatialReference::wgs84());
    Graphic* circleGraphic_p = new Graphic(GeometryEngine::bufferGeodetic(centerWgs84, 1000.0, LinearUnit::meters(), 0.5, GeodeticCurveType::Geodesic));
    this->graphicsOverlays()->at(0)->graphics()->append(circleGraphic_p);
    circleGraphic_p->setSymbol(new SimpleLineSymbol(SimpleLineSymbolStyle::Solid, QColor(Qt::blue), 1.0));
    circleGraphic_p->setVisible(true);

    TextSymbol* textMarker_p = new TextSymbol("Some Label", Qt::black, 12.0, HorizontalAlignment::Center, VerticalAlignment::Bottom);
    Graphic* labelGraphic_p = new Graphic(centerWgs84, textMarker_p);
    this->graphicsOverlays()->at(0)->graphics()->append(labelGraphic_p);
    labelGraphic_p->setVisible(true);

我认为我可以获取每个图形的几何图形并使用它来构造一个信封,而不是总是将标签可见性设置为真,这样我就可以得到每个信封的宽度,然后可以进行比较:

    Envelope circleEnvelope(circleGraphic_p->geometry());
    Envelope labelEnvelope(labelGraphic_p->geometry());

    labelGraphic_p->setVisible(circleEnvelope.width() >= labelEnvelope.width());

但是当我尝试这样做时,每个信封的宽度总是一个非常小的负值(例如-2.25017...e-98)

关于我做错了什么或者是否有更好的方法来获取文本标签的地图(或与设备无关的单位)的大小以及由折线或多边形的几何图形描述的图形的任何建议?

编辑:我发现Geometry 对象有一个extent() 方法,我可以从中获取圆的宽度,但用于文本标签的GraphicGeometry 会导致extent() 方法的宽度为零。我希望这是因为Geometry 只是一个没有宽度或高度的Point。所以问题仍然是如何获得 TextSymbol 的边界矩形?

【问题讨论】:

    标签: c++ qt arcgis arcgis-runtime


    【解决方案1】:

    您是对的,返回的是基础几何的范围,而不是 TextSymbol。我认为您无法以您的方式实现您想要的,因为没有办法获得符号本身的边界框或屏幕坐标。相反,您是否考虑过使用 LabelDefinitions 并设置各种消除冲突选项? This sample 在图层上显示标签,但也可以应用于图形。您可以申请许多labeling options,这将允许内部标签引擎为您解决冲突。

    【讨论】:

    • 感谢您的回复。我将研究您对替代方法的建议,看看是否可以达到我想要的效果,之后我将在此线程中报告并在适当的情况下接受您的回复作为解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多