[Qgis-user] [EXTERN]Re: Changing SVG Search Paths without GUI on Debian Buster | QGIS 3.10.12
Charles Dixon-Paver
charles at kartoza.com
Tue Jan 5 03:37:19 PST 2021
Awesome! Glad it helped out.
On Tue, 5 Jan 2021 at 13:35, STEINER Andreas <asteiner at eurofunk.com> wrote:
> Hello Charles..
>
>
>
> Thanks a million it worked!! I used you script.
>
>
>
> Best regards,
>
> *Andreas Steiner*
>
>
>
>
>
> *Von:* Charles Dixon-Paver <charles at kartoza.com>
> *Gesendet:* Dienstag, 5. Januar 2021 11:47
> *An:* STEINER Andreas <asteiner at EUROFUNK.COM>
> *Cc:* qgis-user at lists.osgeo.org
> *Betreff:* [EXTERN]Re: [Qgis-user] Changing SVG Search Paths without GUI
> on Debian Buster | QGIS 3.10.12
>
>
>
> Any number of things can go wrong with file paths, but QGIS allows you to
> embed SVG objects in project files to avoid these problems. If you can open
> the project on your windows environment, where the SVG file path is
> specified you should be able to use the drop down on the "Browse" menu and
> select the embed option, then specify the SVG file to include.
>
>
>
> I also previously wrote a script to automatically embed the svg symbols
> for all layers in a project if you have a lot of layers to update.
> Currently only supports single layer marker (so if you have complex
> symbology it may not work). You may be able to adapt it to your needs
>
>
>
> One issue is that the marker is embedded as a base64 string. This means if
> you have a complex SVG and use the same symbol on multiple layers, it may
> be a bit clunky especially when used on QGIS server. I still think
> investigating the file path issue is worth figuring out, but the embed
> method should help as a quickfix.
>
>
>
> """
>
> Run from the python QGIS console to take existing svg paths and
>
> convert them to project-embedded symbol items. Currently only
>
> supports single symbol and rule style types. Doesn't cater for
>
> geometry builder elements or other advanced functions.
>
> """
>
>
>
> import os
>
> import base64
>
>
>
> def embedSymbol(symbol):
>
> try:
>
> layer_type = symbol.layerType()
>
> if layer_type == 'SvgMarker':
>
> svg_path = symbol.path()
>
> if svg_path[:7] == 'base64:':
>
> print('svg symbol already embedded')
>
> else:
>
> encoded_string = ""
>
> with open(svg_path, "rb") as svg:
>
> encoded_string = base64.b64encode(svg.read())
>
> decoded_string = encoded_string.decode("utf-8")
>
> svg_content = 'base64:' + decoded_string
>
> symbol.setPath(svg_content)
>
> print('embedded svg symbol')
>
> else:
>
> print('not an svg symbol')
>
> except Exception as err:
>
> print(err)
>
>
>
>
>
> layers = [layer for layer in QgsProject.instance().mapLayers().values()]
>
>
>
> for layer in layers:
>
> if layer.type() == QgsMapLayer.VectorLayer:
>
> try:
>
> print(layer.name())
>
> render = layer.renderer()
>
> render_type = render.type()
>
> if render_type == 'singleSymbol':
>
> if hasattr(render.symbol(), 'symbolLayers'):
>
> for symbol in render.symbol().symbolLayers():
>
> embedSymbol(symbol)
>
> else:
>
> embedSymbol(render.symbol())
>
> if render_type == 'RuleRenderer':
>
> rules = render.rootRule()
>
> rules = rules.children()
>
> for rule in rules:
>
> if hasattr(rule.symbol(), 'symbolLayers'):
>
> for symbol in rule.symbol().symbolLayers():
>
> embedSymbol(symbol)
>
> else:
>
> embedSymbol(rule.symbol())
>
> except Exception as err:
>
> print(err)
>
>
>
> I hope that helps
>
>
>
>
>
> On Tue, 5 Jan 2021 at 12:35, STEINER Andreas <asteiner at eurofunk.com>
> wrote:
>
> Hello everyone.
>
> I tried to load a QGIS Project which was created on windows. In this
> project I used a svg symbol "symbol/blue-marker.svg". In the .qgis file the
> path is also "symbol/blue-marker.svg".
>
> When I start my qgisserver and request the map there are only this ?
> questions marks because qgis can't find the blue-marker.svg.
>
> It should look like this:
>
> I tried to copy the symbol folder with the symbols to /usr/lib/cgi-bin/
> folder where the qgis_mapserv.fcgi file is located. Didn't work.
> Then I tried to copy the symbol folder to the location of the .qgis
> project file. Didn't work.
>
> I researched a little bit and found a command to show me what the default
> svg paths are:
>
> python3
>
> from qgis.core import QgsApplication
>
> QgsApplication.showSettings()
>
> 'Application state:\nQGIS_PREFIX_PATH env
> var:\t\t/usr/share/qgis/lib/qgis/server\nPrefix:\t\t\nPlugin
> Path:\t\t\nPackage Data
> Path:\t/usr/share/qgis/lib/qgis/server/share/qgis\nActive Theme
> Name:\t\nActive Theme
> Path:\t/usr/share/qgis/lib/qgis/server/share/qgis/resources/themes//icons/\nDefault
> Theme Path:\t:/images/themes/default/\nSVG Search Paths:\t\nUser DB
> Path:\t/usr/share/qgis/lib/qgis/server/share/qgis/resources/qgis.db\nAuth
> DB Path:\tqgis-auth.db\n'
>
>
>
> *SVG Search Paths:\t\n*
>
> From there I know that my SVG Search Paths are empty.
>
> I can change the variable temporary with:
>
> from qgis.core import QgsApplication
>
> QgsApplication.setDefaultSvgPaths(['/usr/share/qgis/svg'])
>
> but this doesn't help.
>
> I also tried to execute this command when creating the docker image but
> the SVG Search Paths are also empty after that.
> So in my opinion somewhere this variable can be set but I can't find it,
> also not in the QGIS Environment variables.
>
> Here is my qgis apache2 config:
>
> <VirtualHost *:80>
>
> ServerAdmin webmaster at localhost
>
> ServerName qgis.demo
>
>
>
> DocumentRoot /var/www/html
>
>
>
> # Apache logs (different than QGIS Server log)
>
> ErrorLog ${APACHE_LOG_DIR}/qgis.demo.error.log
>
> CustomLog ${APACHE_LOG_DIR}/qgis.demo.access.log combined
>
>
>
> # Longer timeout for WPS... default = 40
>
> FcgidIOTimeout 120
>
>
>
> FcgidInitialEnv LC_ALL "en_US.UTF-8"
>
> FcgidInitialEnv PYTHONIOENCODING UTF-8
>
> FcgidInitialEnv LANG "en_US.UTF-8"
>
>
>
> # QGIS log (different from apache logs) see
> https://docs.qgis.org/testing/en/docs/user_manual/working_with_ogc/ogc_server_support.html#qgis-server-logging
>
> FcgidInitialEnv QGIS_SERVER_LOG_FILE /var/log/qgis/qgisserver.log
>
> FcgidInitialEnv QGIS_SERVER_LOG_LEVEL 0
>
> #FcgidInitialEnv QGIS_PREFIX_PATH /usr/share/qgis/lib/qgis/server
>
> FcgidInitialEnv QGIS_PREFIX_PATH /usr
>
> FcgidInitialEnv QGIS_PLUGINPATH /opt/qgis-server/plugins
>
> FcgidInitialEnv QGIS_DEBUG 0
>
>
>
> # default QGIS project
>
> SetEnv QGIS_PROJECT_FILE /home/qgis/projects/world.qgs
>
>
>
> # QGIS_AUTH_DB_DIR_PATH must lead to a directory writeable by the
> Server's FCGI process user
>
> FcgidInitialEnv QGIS_AUTH_DB_DIR_PATH "/home/qgis/qgisserverdb/"
>
> FcgidInitialEnv QGIS_AUTH_PASSWORD_FILE
> "/home/qgis/qgisserverdb/qgis-auth.db"
>
>
>
> # See
> https://docs.qgis.org/testing/en/docs/user_manual/working_with_vector/supported_data.html#pg-service-file
>
> SetEnv PGSERVICEFILE /home/qgis/.pg_service.conf
>
> FcgidInitialEnv PGPASSFILE "/home/qgis/.pgpass"
>
>
>
> # Tell QGIS Server instances to use a specific display number
>
> # FcgidInitialEnv DISPLAY ":99"
>
>
>
> # if qgis-server is installed from packages in debian based distros this
> is usually /usr/lib/cgi-bin/
>
> # run "locate qgis_mapserv.fcgi" if you don't know where
> qgis_mapserv.fcgi is
>
> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
>
> <Directory "/usr/lib/cgi-bin/">
>
> AllowOverride None
>
> Options +ExecCGI -MultiViews -SymLinksIfOwnerMatch
>
> Order allow,deny
>
> Allow from all
>
> Require all granted
>
> </Directory>
>
>
>
> <IfModule mod_fcgid.c>
>
> FcgidMaxRequestLen 26214400
>
> FcgidConnectTimeout 60
>
> </IfModule>
>
>
>
> </VirtualHost>
>
>
>
> Thanks for helping 😊
>
>
>
> Best regards,
>
> *Andreas Steiner*
>
>
>
> _______________________________________________
> Qgis-user mailing list
> Qgis-user at lists.osgeo.org
> List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user
>
>
>
> Email secured by Check Point
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-user/attachments/20210105/cf6cbff1/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.png
Type: image/png
Size: 18419 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/qgis-user/attachments/20210105/cf6cbff1/attachment-0001.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image002.jpg
Type: image/jpeg
Size: 5890 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/qgis-user/attachments/20210105/cf6cbff1/attachment-0001.jpg>
More information about the Qgis-user
mailing list