[GRASS-dev] [GRASS GIS] #3033: Cairo and PS drivers display only one raster or vector for SVG and PS

GRASS GIS trac at osgeo.org
Tue May 17 15:24:38 PDT 2016


#3033: Cairo and PS drivers display only one raster or vector for SVG and PS
-------------------------+-------------------------------------------------
  Reporter:  wenzeslaus  |      Owner:  grass-dev@…
      Type:  defect      |     Status:  new
  Priority:  major       |  Milestone:  7.2.0
 Component:  Display     |    Version:  svn-trunk
Resolution:              |   Keywords:  d.mon, cairo, ps, SVG, vector
       CPU:              |  graphics
  Unspecified            |   Platform:  Unspecified
-------------------------+-------------------------------------------------

Comment (by wenzeslaus):

 Replying to [comment:1 glynn]:
 > It isn't possible to initialise a surface from an existing SVG file so
 that subsequent drawing operations will be appended to the document
 structure, and you can't simply concatenate the files.

 This is serious limitation. Is there a way to change the rendering to not
 have this problem.

 > You need to generate multiple output files then combine them with
 external tools.

 I was able to use HTML:

 {{{
 g.region rast=elevation
 d.mon cairo output=elevation.svg
 d.rast elevation
 d.mon stop=cairo
 d.mon cairo output=streams.svg
 d.vect streams color=blue
 d.mon stop=cairo
 d.mon cairo output=roadsmajor.svg
 d.vect roadsmajor
 d.mon stop=cairo
 }}}

 {{{
 #!text/html
 <html>
 <head>
 <style>
 object {
     position: absolute;
     top: 0;
     left: 0;
 }
 </style>
 <head>
 <body>
 # also svg element can be used
 <object type="image/svg+xml" data="elevation.svg"></object>
 <object type="image/svg+xml" data="streams.svg"></object>
 <object type="image/svg+xml" data="roadsmajor.svg"></object>
 </body>
 </html>
 }}}

 Unfortunately, this is not a sufficient workaround if you need to modify
 the file.

 Combining manually in Inkscape was not possible; I was not able to align
 the layers. Command line Inkscape doesn't read multiple files. !ImageMagic
 creates a raster.

 > To combine the output from multiple commands into a single file, all
 commands but the first should have GRASS_RENDER_PS_HEADER=FALSE, while all
 commands but the last should have GRASS_RENDER_PS_TRAILER=FALSE.

 Thanks for the tip, this worked:

 {{{
 g.region rast=elevation
 export GRASS_RENDER_PS_HEADER=TRUE
 export GRASS_RENDER_PS_TRAILER=FALSE
 d.mon ps output=all.ps
 d.rast elevation
 export GRASS_RENDER_PS_HEADER=FALSE
 d.vect streams color=blue
 export GRASS_RENDER_PS_TRAILER=TRUE
 d.vect roadsmajor
 # export here worked as well
 d.mon stop=ps
 }}}

 I followed with

 {{{
 pdf2svg all.pdf all.svg
 ps2pdf all.ps all.pdf
 }}}

 to get SVG. But it seems that PS driver is not as powerful as Cairo and
 same things are lost during the subsequent conversions, page size was
 wrong as well.

 Unfortunately, this doesn't seem to be applicable for GUI which would be
 likely used when one wants to edit the file afterwards.

--
Ticket URL: <https://trac.osgeo.org/grass/ticket/3033#comment:2>
GRASS GIS <https://grass.osgeo.org>



More information about the grass-dev mailing list