KB10946 - Basemap and ScreenToMap
If any ScreenToMap or MapToScreen is used when drawing a basemap, the results can be unpredictable. The reason is the typical call GIS.ScreenToMap() cannot be used because basemap uses its own viewer to draw in a background thread. A workaround is use _shape.LayerViewer.ScreenToMap like in the following sample Delphi code snippet (similar logic with all platforms).
procedure TForm1.doLabelPos(
_sender : TObject ;
_shape : TGIS_Shape ;
_pos : TGIS_LabelPosition ;
var _pt : TPoint ;
const _rct : TRect
) ;
begin
_pt := _shape.Layer.Viewer.Ref.MapToScreen( _shape.Centroid ) ;
end;
Created: June 04, 2021, Modified: June 09, 2021