[GRASS-user] Creating a png file with multiple vector maps
Chris Bartolomei
surfcjb at yahoo.com
Tue Feb 16 17:30:03 PST 2021
Ohhhhh !! Sooooooo close ! I can get the two vector maps to overlay and display but no matter what I do I cannot get them to do a color fill ... ugh ... fill_color does nothing. I can use "d.vect map=admin_area color=red" and the boundaries change to red, but "d.vect map=admin_area color=black fill_color=red" and i do not get any filled color. So frustrating. I thought maybe my shapefile imported as just a boundary but when I do a "v.category input=admin_area option=report" I get:Layer/table 1/admin_areatype count min maxpoint 0 0 0
line 0 0 0boundary 0 0 0centroid 59 1 25area 0 0 0face 0 0 0kernel 0 0 0all 59 1 25
Should I have areas in there too ??I wonder if the import went wonky.... what is strange is that the ps.map tool fills the polygons just fine.
Moritz - could please I ask you to do a v.category on one of your vector maps (v.category input=censuslbk_wwake at PERMANENT option=report) and see if it has areas in it or just centroids like I have?
Thanks again for the help!:)
Chris
On Tuesday, February 16, 2021, 11:20:31 AM EST, Chris Bartolomei <surfcjb at yahoo.com> wrote:
Well - that does indeed work for you. I'll try your settings when I get into the office - we're running GRASS on a RHEL 7 cluster - and see what I can come up with.It would be sooo much better if it worked like yours did!Thank you so much for taking the time and testing this out:)v/rChris
On Tuesday, February 16, 2021, 11:07:10 AM EST, Moritz Lennert <mlennert at club.worldonline.be> wrote:
On 16/02/21 15:54, Chris Bartolomei wrote:
> Mortiz - are those vector layers areas ? I'm guessing the census is an
> area, the roads are lines and the schools are points, yes? I'm having
> an issue overlaying two area maps (polygons). i can only get one to show
> ... I have tried your method with all the export GRASS_RENDER* variables
> but I have a country polygon map as the bottom later and a selection of
> a few administrative areas (provinces/states) as the top map and I can
> only get one or the other to show up. It almost seems as if the
> transparency doesn't work and what should be transparent in the admin
> map is actually the background color and blocks the country from being seen.
> Could you please try your method with a couple area (polygon) vector
> maps overlaying each other?
export GRASS_RENDER_IMMEDIATE=png
export GRASS_RENDER_WIDTH=640
export GRASS_RENDER_HEIGHT=480
export GRASS_RENDER_TRUECOLOR=true
export GRASS_RENDER_FILE_COMPRESSION=0
export GRASS_MESSAGE_FORMAT=plain
export GRASS_RENDER_FILE_READ=TRUE
export GRASS_RENDER_FILE=$HOME/test.png
g.region vect=census_wake2000
d.vect map=census_wake2000 at PERMANENT fill_color=grey
d.vect map=censusblk_swwake at PERMANENT fill_color=red
I've tried with
export GRASS_RENDER_TRANSPARENT=TRUE
and
export GRASS_RENDER_TRANSPARENT=FALSE
As you can see in the attached images, the overlay seems to work without
any issues (or I don't understand what you are looking for exactly) and
setting GRASS_RENDER_TRANSPARENT decides on whether the background
should be transparent or not.
A second test in the same data set, but with different layers:
export GRASS_RENDER_TRANSPARENT=TRUE
export GRASS_RENDER_FILE=$HOME/test_NC_TRUE.png
g.region vect=boundary_county
d.vect map=boundary_county at PERMANENT
d.vect map=boundary_municp at PERMANENT fill_color=255:255:0:255
export GRASS_RENDER_TRANSPARENT=FALSE
export GRASS_RENDER_FILE=$HOME/test_NC_FALSE.png
g.region vect=boundary_county
d.vect map=boundary_county at PERMANENT
d.vect map=boundary_municp at PERMANENT fill_color=255:255:0:255
Again, the overlay works, at least as I would have expected.
Moritz
> On Tuesday, February 16, 2021, 4:19:16 AM EST, Moritz Lennert
> <mlennert at club.worldonline.be> wrote:
>
>
> Hi Chris,
>
> For me, the following works with the current stable GRASS GIS (7.8.5)
> and using maps from the NC demo data set:
>
> export GRASS_RENDER_IMMEDIATE=png
> export GRASS_RENDER_WIDTH=640
> export GRASS_RENDER_HEIGHT=480
> export GRASS_RENDER_TRANSPARENT=true
> export GRASS_RENDER_TRUECOLOR=true
> export GRASS_RENDER_FILE_COMPRESSION=0
> export GRASS_MESSAGE_FORMAT=plain
> export GRASS_RENDER_FILE_READ=TRUE
>
> g.region vect=census_wake2000
> d.vect map=census_wake2000 at PERMANENT <mailto:census_wake2000 at PERMANENT>
> fill_color=none
> d.vect map=roadsmajor at PERMANENT <mailto:roadsmajor at PERMANENT>
> color=255:0:0:255
> d.vect map=schools_wake at PERMANENT <mailto:schools_wake at PERMANENT>
> fill_color=0:128:0:255
> icon=basic/circle size=10
>
> I attach a small thumbnail of the resulting PNG file.
>
> Moritz
>
>
> On 11/02/21 18:54, Chris Bartolomei via grass-user wrote:
> > Good morning Anna,
> > It took quite a while of trial and error but I worked out a method that
> > kindof works:
> > First off - unless someone says otherwise, you can't use the PNG driver
> > (d.mon) method to overlay more than one polygon vector. Sorry - it just
> > doesn't work. You CAN use the ps.map method - that works really well
> > generating the image however it by default assumes you are printing on
> > an A4 piece of paper so there's all sorts of white space. The image is
> > centered at the top of this fictional piece of paper. In your postscript
> > rules file you can use the "maploc" command to position the image
> > elsewhere on the page. This is necessary because the next trick changes
> > the paper dimensions but it assumes the origin is the lower left corner
> > and therefore clips anything that is above the new dimensions. Back to
> > postscript commands in the rules file first though ... the ps.map maploc
> > command uses inches (why?? it should be points) so an A4 page is 8.27" x
> > 11.69" points are 1/72 of an inch thus 595p x 842p - it also has a
> > default 36p margin (0.5 inch). You'll need those numbers later. maploc
> > also lets you set the size of your image box: maploc {x offset from
> > left edge} {y offset from top} {width of box} {height of box} Note: this
> > is all done via a BASH script with GRASS 7.4 on Linux (RHEL 7), not
> > python. This is my postscript rules file:
> >
> > maploc 0.1 6.815 6.5 4.875 #468p x 351p map box moved down towards the
> > bottom of the page
> > # note that if you push it too far down to where the box would run off
> > the bottom, the image is
> > # resized to fit on the page so do some testing to come up with the
> > correct values
> > # also I found the computational region controls the aspect ratio so
> > although I say
> > # 6.5 x 4.875 with the above maploc command, I got a 6.5 x 3.8 inch box.
> > border y # add a border to the map frame (box)
> > color 81:81:81 # shade of gray
> > end # end the border controls
> > vareas admin_area # top vector layer to display
> > layer 1 # attribute table to use
> > rgbcolumn area_color # name of column holding R:G:B values to fill
> > the polygons
> > color 153:153:153 #boundary color
> > end # end the admin_area controls
> > vareas Country # this is the bottom vectors to display
> > color 210:210:210 #boundary color
> > fcolor 153:153:153 #fill color for all polygons
> > end # end the Country controls
> >
> > Here's the command to run to generate the postscript file:
> >
> > ps.map input=$HOME/ps_rules.txt out=$HOME/color_admin.ps --overwrite
> >
> > To convert the postscript to PNG I had to use ghostscript - there are
> > other tools you can use though.
> >
> > gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=png16m -r300 -dTextAlphaBits=4
> > -dGraphicsAlphaBits=4 -dDEVICEWIDTHPOINTS=473 -dDEVICEHEIGHTPOINTS=276
> > -dFIXEDMEDIA -dPSFitPage -sOutputFile=$HOME/color_admin.png -c
> > "<</PageOffset [-34 78]>> setpagedevice" -f $HOME/color_admin.ps
> >
> > So the above line needs some explaining
> > (http://www.ghostscript.com/doc/9.27/Use.htm
> <http://www.ghostscript.com/doc/9.27/Use.htm>) but in a nutshell, the
> > parameters to play with are first the Pageoffset [x y] values. They are
> > in points not inches ... 1/72 inch = 1 point ... remember the 1/2"
> > margins? the -34 gives me 2 points of white space to the left edge of
> > the map frame, the 78 I had to play with to push the map frame down to
> > the right spot.
> > Next is the DEVICEWIDTHPOINTS and DEVICEHEIGHTPOINTS ... again in points
> > ... this "trims" the paper to height and width ... set something then
> > run it and view the results. Adjust and run again until you get it
> correct.
> >
> > It's a royal pain but it seems to work this way. It would sure be nice
> > to create a GRASS workspace file and just say "convert this workspace to
> > an image" with everything all laid out nicely - like Arc does exporting
> > their mxd map files...
> >
> > I hope this helps someone !
> > :)
> > Chris
> >
> >
> > On Wednesday, February 10, 2021, 11:08:00 PM EST, Anna Petrášová
> > <kratochanna at gmail.com <mailto:kratochanna at gmail.com>> wrote:
> >
> >
> >
> >
> > On Tue, Feb 9, 2021 at 4:41 PM Chris Bartolomei <surfcjb at yahoo.com
> <mailto:surfcjb at yahoo.com>
> > <mailto:surfcjb at yahoo.com <mailto:surfcjb at yahoo.com>>> wrote:
> >
> > Hi Anna - thank you for the suggestion - I tried it but alas, still
> > it only outputs a single vector map (layer). I can get either the
> > Country vector or the admin_areas vector, but not both overlaid.
> > :(
> > Chris
> >
> >
> > I realized you are using both environmental variables and d.mon, that
> > might cause some issues, you use one or the other. So try to remove the
> > lines starting with d.mon.
> >
> > Hope that helps,
> > Anna
> >
> >
> > On Tuesday, February 9, 2021, 1:20:52 PM EST, Anna Petrášová
> > <kratochanna at gmail.com <mailto:kratochanna at gmail.com>
> <mailto:kratochanna at gmail.com <mailto:kratochanna at gmail.com>>> wrote:
> >
> >
> > Hi,
> >
> > On Tue, Feb 9, 2021 at 10:25 AM Chris Bartolomei via grass-user
> > <grass-user at lists.osgeo.org <mailto:grass-user at lists.osgeo.org>
> <mailto:grass-user at lists.osgeo.org <mailto:grass-user at lists.osgeo.org>>>
> wrote:
> >
> > Good morning :)
> > I'm using GRASS 7.4.1 on a Linux cluster so I only have
> > command-line capability. I have two vector layers (a country
> > boundary polygon and part of an administrative area map - also
> > polygons). I am trying to automate creating a PNG file of the
> > admin areas overlaying the country boundary therefore all work
> > has to be command-line (in a bash script). I've tried this two
> > ways - using the d.mon start=png method and also the ps.map
> > method as described below. The d.mon method appears to generate
> > the image with only one vector map (not both) and only colors
> > the borders - it won't use the fill_color setting. The ps.map
> > method seems to work but assumes the image is on a sheet of
> > paper so there's a ton of extra white-space. I'd like to use
> > d.mon but I can use ps.map if someone could please let me know
> > how to export only the computational region without all the
> > extra 'paper' in the image. Here's my code:
> >
> > g.region vector='Country'
> > export GRASS_RENDER_IMMEDIATE=png
> > export GRASS_RENDER_WIDTH=640
> > export GRASS_RENDER_HEIGHT=480
> > export GRASS_RENDER_TRANSPARENT=true
> > export GRASS_RENDER_TRUECOLOR=true
> > export GRASS_RENDER_FILE=$HOME/country_admin.png
> > export GRASS_RENDER_FILE_COMPRESSION=0
> > export GRASS_MESSAGE_FORMAT=plain
> > d.mon start=png
> > d.vect map=Country color=210:210:210 fill_color=153:153:153
> > display=shape type=area
> > d.vect map=admin_area color=153:153:153 rgb_column=area_color
> > display=shape type=area
> > d.mon stop=png
> >
> > This only produces a png with the last vector listed and only
> > the borders are colored with the rgb_column values.
> >
> >
> > I think you are missing GRASS_RENDER_FILE_READ=TRUE:
> > https://grass.osgeo.org/grass78/manuals/pngdriver.html
> <https://grass.osgeo.org/grass78/manuals/pngdriver.html>
> > <https://grass.osgeo.org/grass78/manuals/pngdriver.html
> <https://grass.osgeo.org/grass78/manuals/pngdriver.html>>
> >
> > Regarding rgb_column, I am not sure, didn't have time to test.
> >
> > Anna
> >
> >
> > If I do this without the d.mon start/stop lines ... i.e. relying
> > on the GRASS_RENDER_IMMEDIATE=png only, then only one vector map
> > is converted to png however it DOES do the color fill properly.
> > With either above method the png is the correct size.
> >
> > Now using ps.map (same env variable set as above):
> >
> > g.region vector='Country'
> > ps.map input=$HOME/ps_rules.txt out=$HOME/country_admin.ps
> > --overwrite
> > where ps_rules.txt is:
> > border y
> > color 81:81:81
> > end
> > vareas admin_area
> > layer 1
> > rgbcolumn area_color
> > color 153:153:153
> > end
> > vareas Country
> > color 210:210:210
> > fcolor 153:153:153
> > end
> >
> > We don't have pstopng but we do have ghostscript:
> >
> > gs-dSAFER -dBATCH -dNOPAUSE -sDEVICE=png16m -dTextAlphaBits=4
> > -dGraphicsAlphaBits=4 -r300 -sOutputFile=$HOME/country_admin.png
> > $HOME/country_admin.ps
> >
> > This creates the correct image (color fills, etc) but has white
> > margins and a lot of white space below the image likeit is
> > printed at the top of a piece of paper.
> >
> > does anyone have any idea how to create a png with multiple
> > vector maps overlaying each other (and not have the extra
> > whitespace too)?
> >
> > v/r
> > Chris
> >
> > _______________________________________________
> > grass-user mailing list
> > grass-user at lists.osgeo.org <mailto:grass-user at lists.osgeo.org>
> <mailto:grass-user at lists.osgeo.org <mailto:grass-user at lists.osgeo.org>>
> > https://lists.osgeo.org/mailman/listinfo/grass-user
> <https://lists.osgeo.org/mailman/listinfo/grass-user>
> > <https://lists.osgeo.org/mailman/listinfo/grass-user
> <https://lists.osgeo.org/mailman/listinfo/grass-user>>
>
> >
> >
> > _______________________________________________
> > grass-user mailing list
> > grass-user at lists.osgeo.org <mailto:grass-user at lists.osgeo.org>
> > https://lists.osgeo.org/mailman/listinfo/grass-user
> <https://lists.osgeo.org/mailman/listinfo/grass-user>
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/grass-user/attachments/20210217/52b4d29a/attachment-0001.html>
More information about the grass-user
mailing list