Hello Uwe,
On Fri, Dec 9, 2022 at 10:29 AM <gisfisch@t-online.de> wrote:
Hello list,
I have a point feature layer with attributes for a text string (call it 'label') and the fontsize in map units (which are meters in my case).
Is there a way in Grass to derive polygons (like boundig boxes) from this input information which enclose the label string letter when those are used to label the points?
For those who know ArcMap: what I mean is exactly what happens when you export Annotation features as Shapes in ArcCatalog: you get a polygon layer in which each text string has a polygon hull which fits the height and width, respectively.
From a developer, I heard that this can be done d_get_text_box from display library, which is not exposed to the end user.
Well, it is exposed to the "C language" end user 
For a local test, I have added these lines (as a simple debug output):
git diff display/d.text/
diff --git a/display/d.text/main.c b/display/d.text/main.c
index a5fb7fec7..0aab3db8d 100644
--- a/display/d.text/main.c
+++ b/display/d.text/main.c
@@ -626,10 +626,12 @@ static void draw_text(char *text, double *x,
double *y, double size,
D_text_rotation(0.0);
D_get_text_box(text, &t, &b, &l, &r);
+ fprintf(stdout, "t: %.2f, b: %.2f, l: %.2f, r: %.2f\n", t, b, l, r);
t = D_u_to_d_row(t);
b = D_u_to_d_row(b);
l = D_u_to_d_col(l);
r = D_u_to_d_col(r);
+ fprintf(stdout, "t: %.2f, b: %.2f, l: %.2f, r: %.2f\n", t, b, l, r);
if (rotation != 0.0)
D_text_rotation(rotation * 180.0 / M_PI);
I guess it would do what you need - tested in North Carolina sample
data location:
GRASS nc_spm_08_grass7/user1:d.text >
g.region raster=zipcodes_elev_avg
d.mon wx0
# test 1: font size 4
d.text text="This is a test of d.text" color=yellow bgcolor=gray size=4
t: 228897.44, b: 228500.00, l: 626709.08, r: 634951.64
t: -26.02, b: 0.00, l: 3.39, r: 543.13
# test 2: font size 6
d.text text="This is a test of d.text" color=yellow bgcolor=gray size=6
t: 229096.16, b: 228500.00, l: 626735.00, r: 639098.84
t: -39.04, b: 0.00, l: 5.09, r: 814.69
Since I am not a programmer, I am looking for help how to use d_get_text_box. My goal ist o integrate it in a
simple Python script which I already have. This script can import Shapefiles, do simple GIS processing using
GRASS modules and write the shapes back.
The (current) pity is that there is no Python wrapper around the
display library in
https://github.com/OSGeo/grass/tree/main/python/grass/pygrass
https://github.com/OSGeo/grass/tree/main/python/grass/script
Of course, if coding is necessary to accomplish this, I will pay for it.
Maybe not a hard task to write this Python access to the C function
D_get_text_box() but unfortunately I am lacking time.
Hopefully someone else here is willing to pick up the task.
Best,
Markus
thank you and best regards, Uwe