问题描述
我使用的是 Qt C++ ArcGIS Runtime SDK v100.9,我在地图上绘制了各种形状和标签。
我希望能够在地图上的给定点 (SpatialReference::wgs84) 上找出 Graphic(这是一个文本标签 (TextSymbol))的区域(边界矩形),以便我可以确定标签多于或少于另一个 Graphic(假设它有一个用于绘制圆的几何图形的多边形),以决定是否应将标签设置为可见。
在派生自 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);
与其总是将标签可见性设置为 true,我认为我可以获取每个图形的几何图形并使用它来构建一个信封,然后我可以得到每个信封的宽度,然后可以进行比较:
Envelope circleEnvelope(circleGraphic_p->geometry());
Envelope labelEnvelope(labelGraphic_p->geometry());
labelGraphic_p->setVisible(circleEnvelope.width() >= labelEnvelope.width());
但是当我尝试这样做时,每个信封的宽度总是一个非常小的负值(例如 -2.25017...e-98)
关于我做错了什么的任何建议,或者是否有更好的方法来获取文本标签和由折线或多边形的几何描述的图形在地图(或设备独立单位)上的大小?
编辑:我发现 Geometry
对象有一个 extent()
方法,我可以从中获取圆的宽度,但 Geometry
的 Graphic
是用于文本标签的结果是其 extent()
方法的宽度为零。我希望这是因为 Geometry
只是一个没有宽度或高度的 Point
。那么问题仍然是如何获得 TextSymbol 的边界矩形?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)