Friday, 26 August 2016

Qgis-server...Installing the QGIS Lizmap Plugin & Lizmap Web Client

This post follows on from my previous three (most recent first in list) linked below.

There is no doubt that in just a short time from now we will probably see a 'one-click' installer to by-pass the next steps but a least this method allows you to change 'in/out' the individual libraries if there is are updates using the usual 'sudo apt update && sudo apt upgrade'.

1.  Firstly...Create a new QGIS project, add your layers from PostGIS, Shapefiles or raster (geotiff), style and symbolise those layers, set the projection and ensure you've set up your 'OWS Server' in 'Project Properties'.

2.  Let's install the 'Lizmap' Plugin first by going into the 'Plugins' menu then 'Manage and Install Plugins', then type in 'Lizmap' in the Search bar.

3.  Tick the 'Lizmap' plugin and 'Install'.

4.  Go back to 'Project Properties' and in the 'General' tab  ensure 'save path' is now set to 'relative'.

5.  Next... click on 'Lizmap' under the 'web' menu and set all the tabs similar to below. Your choices here will activate the relevant tools in the browser when we get to the lizmap-web-client later.

Your layer/s should already be showing in the list.

Now click on the 'Map' tab and tick the 'map tools' that you want in your map browser. Set the scales you need separated with a comma (integer's only). You can set the 'Initial map extent' to the 'map canvas' option.

Then we move onto the 'baselayers' tab. Set as many map options as you like.

Next the 'Tools' tab. In here i would just worry about adding your attribute layers in the bottom block (below).

We can miss on the 'FTP' tab because this is no longer used. In the 'Log' tab (below) you just need to click 'Save' and read the generated log to ensure it is successful.

Once you 'Save' in the 'Lizmap' plugin a file with the same name as your project file e.g. 'southuk.qgs.cfg' this will now go with your qgis project file to be saved in '/home/some_directory/southuk.qgs'.

Installation of the Lizmap Web Client

6.  Go to the following url:-

Click on 'Branch Master' and in the dropdown select 'release_3_0' the repository will now change to the files in the '_3_0' release.

Click 'clone or download' then 'Download ZIP'. Extract the ZIP file into any folder. You now have a folder entitled 'lizmap-web-client-release_3_0' now we need to move it onto our Apache2 Server folder.

In order to do this we need 'gksudo' (which means 'home'=/root) in order to access the Apache2 server folders. In the terminal enter:-

$ gksudo nautilus

You will then be asked for your 'root' password. You are then free to add your 'lizmap-web-client-release_3_0' into '/var/www'

'Exit' Nautilus when done on the command line.

Now we link the lizmap client into the apache2 server 'html' directory so it is available in a standard browser a little later on.

$ sudo ln -s /var/www/lizmap-web-client-release_3_0/lizmap/www/ /var/www/html/lm

$ cd /var/www/lizmap-web-client-release_3_0
$ sudo lizmap/install/ www-data www-data
$ cd /var/www/lizmap-web-client-release_3_0/lizmap/var/config
$ sudo cp lizmapConfig.ini.php.dist lizmapConfig.ini.php
$ sudo cp localconfig.ini.php.dist localconfig.ini.php
$ sudo cp profiles.ini.php.dist profiles.ini.php
$ cd ../../..

7.  Now we can activate the php installer.

$ sudo php lizmap/install/installer.php

Installation start..
[notice] Installation starts for the entry point index
All modules dependencies are ok
Module jelix installed
Module jauthdb_admin installed
Module master_admin installed
Module jacl2 installed
Module jacl2db installed
Module jacl2db_admin installed
Module jauth installed
Module jauthdb installed
Module admin installed
Module lizmap installed
Module view installed
Module proj4php installed
All modules are installed or upgraded for the entry point index
[notice] Installation starts for the entry point admin
All modules dependencies are ok
Module jelix installed
Module jauthdb_admin installed
Module master_admin installed
Module jacl2 installed
Module jacl2db installed
Module jacl2db_admin installed
Module jauth installed
Module jauthdb installed
Module admin installed
Module lizmap installed
Module view installed
Module proj4php installed
All modules are installed or upgraded for the entry point admin
[notice] Installation starts for the entry point script
All modules dependencies are ok
Module jelix installed
Module jauthdb_admin installed
Module master_admin installed
Module jacl2 installed
Module jacl2db installed
Module jacl2db_admin installed
Module jauth installed
Module jauthdb installed
Module admin installed
Module lizmap installed
Module view installed
Module proj4php installed
All modules are installed or upgraded for the entry point script
Installation ended.

$ sudo service apache2 restart 

8.  You need to enable the QGIS 'Demo' repository.

$ cd /var/www/lizmap-web-client-release_3_0/lizmap/var/config

$ sudo gedit localconfig.ini.php

#add the lines:-


'Save'...then re-run the 'installer.php' as before:

$ sudo php /lizmap/install/installer.php
$ sudo service apache2 restart 

Give the appropriate to directories and files

9.  $ cd /var/www/lizmap-web-client-release_3_0
     $ chown :www-data temp/ lizmap/var/ lizmap/www lizmap/install/qgis/edition/ -R
     $ chmod 775 temp/ lizmap/var/ lizmap/www lizmap/install/qgis/edition/ -R
     $ sudo service apache2 restart

** At this point it may be that you want to use the Lizmap web client directly on a production server, in which case you would need the installation of some extra php modules necessary for production. If so i recommend following the instruction in the following reference.

Configuring the map server for Lizmap-web-client

My 'Project' Folder

The is an image taken from my project in QGIS named 'southuk.qgs.png' which is used as the 'thumbnail' image in the Lizmap Web Client also added to the folder.

Configuring the Lizmap Web Client

10.  Go to your favourite browser and type the url:-


If you see this start page 'it works'...

11.  If you click on the 'Connect' button on the top right corner you will be asked for login details in which you can enter 'admin' as 'login' and as 'password'.

Enter 'admin' in both login and can change these later

12.  Go back to the top right corner and click on the 'admin' button and select 'My account' and click on 'Lizmap configuration' in the left hand list as below.

This shows your pre-set services.

13.  Scroll down this page and you will see the 'Repository' settings. Here you can set the 'local folder' of the 'QGIS' demo as:-


Set all the 'rights' to 'admins' for now. If all goes well when you click on 'View' you should see the project as a thumbnail image.

14.  Now create a second 'Repository' with the 'local folder' set to (in my case)

      ** It's important to remember the last '/' at the end of the folder path       location.

If all goes well when you select the 'Project' button (top right) you should see your two projects listed one under the other.

Both 'Repositories' should be showing if you've set the 'local folders' correctly and 'saved' without any errors.

15. Just click on one of the Projects and you go into your map view. Now you can see that your layers are the same as in QGIS project. If you make any changes in your project file and save it... simply refresh the browser for the changes to update on your web map.

Go on...experiment, change some themes in your qgis project and see the changes when you refresh your browser. You can for example create a group of layers to appear in the 'Overview' Map in the bottom right corner.

For more information about further customisations to the Lizmap Web Client see:-

Please email me if you need help installing the client or any other questions.

Thursday, 11 August 2016

Qgis-server...Bringing a map image into the browser on Ubuntu 16.04 LTS

So you have your 'GetCapabilities' xml displaying in your browser working as in my post of Friday 22nd July 2016

NO? are some issues to check back in the QGIS project file before we move on.

  • Check the 'Project Properties' under the 'Project' menu, go to the 'OWS server' tab. Below is an example of of how I've set up mine.

 and here is the bottom bit you cannot see in the above image...

Ensure under 'Save Paths' in the 'General' Tab it is set to 'relative'. Note that the layers you are going to select for the WMS service are ticked under 'Published' in the WFS capabilities table.

Moving on to setting up your 'Add layer(s) from WM(T)S Server' button on the 'Manage Layers Toolbar'

Ensure your url is pointing at 'http://yourhost/cgi-bin/project/qgis_mapserv.fcgi?'it is better to specify the full path to the qgis project file which is stored (in my case) in a 'project' folder inside the 'cgi-bin' folder along with any shapefiles used as the source of your wms, 'qgis_mapserv.fcgi' file and 'wms_metadata.xml' files.

Now create a new connection and add your parameters which should look similar to the ones i've added above and tick 'ignore GetMap' and 'ignore GetFeatureInfo' boxes are ticked then 'OK'. In your 'project' folder under 'cgi-bin' (/usr/lib/cgi-bin/project/southuk.qgs)

Since we are using one layer from a PostGIS database open you 'Project.qgs' file (in Gedit or similar text editor and ensure you add your PostGIS connection details similar to below under <datasource>. I understand you can leave out the password as it is already stored in the 'pgpass.conf' file. I've left this in for demo purposes.

amend the <datasource> line to reflect your PostGIS database connection details.

When your done...check again using the same URL as before:


How do we display a map image from our QGIS Desktop project file?

Before we do go back in your QGIS project check you can add your newly created WMS layers back into QGIS as with any other WMS from a different source.

When you hit the 'connect' button you should see a list of layers you created earlier, if not go back and check from the beginning of this post.

Select a layer and click 'Add' and the layer(s) should appear in your layer panel as normal qgis layers.

Lastly, r/c on your largest area wms layer and go to 'Properties' and make a note of the bounding box co-ordinates.

The layer extent is from left to right 262377,179121,297597,215872

We can now use these co-ordinates in the 'GetMap' part in the url:-


http://localhost/cgi-bin/project/qgis_mapserv.fcgi? this part of the url locates the qgis-server executable on the apache2 host server.

SERVICE=WMS&VERSION=1.3.0&SRS=EPSG:27700& this part calls the WMS service, it's version and the target spatial reference system.

REQUEST=GetMap&map=/usr/lib/cgi-bin/project/southuk.qgs& this part is the request to get the 'map' from the qgis project file.

BBOX=262377,179121,297597,2158721&WIDTH=550&HEIGHT=500& this part sets the size of the retrieved image boundary and the 'WIDTH' and 'HEIGHT' of the image area in the browser.

LAYERS=coast_polyline,b_road_polyline&STYLES=,,&FORMAT=image/png the final part is the description and display of the layers of the WMS. Note there is no 'STYLES' specified because it in specified the .qgs file. Finally, the output format is a png image.

The final output is a png image in the browser window.

and a closer look shows it is identical to the qgis project.

We could also add many more parameters and requests into the url in order to enhance the visual appearance for example.

REQUEST=GetFeatureInfo...this request retrieves the underlying attributes and geometry values and pixel location.

GetLegendGraphic...this looks for the view legend information.

bgcolor...sets the background map colour.


Friday, 22 July 2016

Qgis-server...Installation on Ubuntu 16.04 LTS

Before we start it is always a good idea to remove and re-install apache2 web server so that we start from the same set up:-

To remove Apache2:-

$ sudo apt --purge remove apache2
$ sudo apt autoremove

To re-install Apache2:-

$ sudo apt install apache2
$ sudo /etc/init.d/apache2 restart
# or
$ sudo service apache2 restart

1. $ sudo apt install apache2 (if not installed already done so as above)
2. $ sudo apt install qgis-server libapache2-mod-fcgid
3. $ sudo a2enmod fcgid
4. $ sudo a2enconf serve-cgi-bin
5. $ sudo service apache2 restart
6. add the following code and don't forget to save the changes:-

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin/">
Options ExecCGI FollowSymLinks
Require all granted
AddHandler fcgid-script .fcgi

into /etc/apache2/sites-available/000-default.conf

$ sudo gedit /etc/apache2/sites-available/000-default.conf

# so that it looks like this:-

<VirtualHost *:80>
    # The ServerName directive sets the request scheme, hostname and port that
    # the server uses to identify itself. This is used when creating
    # redirection URLs. In the context of virtual hosts, the ServerName
    # specifies what hostname must appear in the request's Host: header to
    # match this virtual host. For the default virtual host (this file) this
    # value is not decisive as it is used as a last resort host regardless.
    # However, you must set it for any further virtual host explicitly.

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin/">
    Options ExecCGI FollowSymLinks
    Require all granted
    AddHandler fcgid-script .fcgi

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # It is also possible to configure the loglevel for particular
    # modules, e.g.
    #LogLevel info ssl:warn

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    # For most configuration files from conf-available/, which are
    # enabled or disabled at a global level, it is possible to
    # include a line for only one particular virtual host. For example the
    # following line enables the CGI configuration for this host only
    # after it has been globally disabled with "a2disconf".
    #Include conf-available/serve-cgi-bin.conf

7.  $ sudo service apache2 restart

8.  Test the 'GetCapabilities' request by clicking on the following url:-


9. You should then see the following:-

10. Congratulations! ... Now create a QGIS project with some vector layers from your 'postgres/postgis' database and save it in /home/yourdirectorychoice/qgisprojectfile.qgs 

Add a 'project' folder inside 'cgi-bin' 

It is advisable to use a separate folder for each QGIS project you want to use in a browser client such as 'qgis-web-client' or 'lizmap-web-client' (we will look into Lizmap in a later post).

If you choose to create a 'project' folder within the 'cgi-bin' folder (as for example in /usr/lib/cgi-bin/project/) remember to link in both the 'wms_metadata.xml' and the 'qgis_mapserv.fcgi' as well as linking your 'projectname.qgs' file (in my case from my.../home/paul/ directory) into the '/usr/lib/cgi-bin/project' folder:-

$ cd /usr/lib/cgi-bin/project
$ sudo ln -s ../qgis_mapserv.fcgi .
$ sudo ln -s ../wms_metadata.xml .
$ sudo ln -s /home/paul/southuk.qgs .

Your 'project' folder should now look as above. You will not have the 'southuk.qgs.cfg' or the 'southuk.qgs.png' files (just yet) because these will be added with the 'QGIS Lizmap Plugin' in the next post. now we can update the apache2 server:-

$ sudo service apache2 restart

Your 'GetCapabilities' request should now include the added 'project' folder:



Saturday, 30 April 2016

How to install Postgresql-9.5 and PostGIS-2.2 on Ubuntu 16.04 (LTS) in six easy steps.

Install Ubuntu 16.04 LTS (Xenial Xerus)

1. check your Ubuntu version:-

lsb_release -a

Install Postgresql

2. On the server or your PC (Terminal):-

sudo apt-get update
sudo apt-get install -y postgresql postgresql-contrib

Create a database and a user for access

Replace DATABASE_NAME_HERE and USER_NAME_HERE with the values you want to use.
# this will prompt you for a database password...also note the capital letter 'O' not number '0' (zero) below:-

3. sudo -u postgres createuser -P USER_NAME_HERE
sudo -u postgres createdb -O USER_NAME_HERE DATABASE_NAME_HERE

Test Connection to Postgresql


Postgresql will ask you for your password. Then you should see the following:


To exit type:-


To add PostGIS-2.2 support to the database

5. sudo apt-get install -y postgis postgresql-9.5-postgis-2.2
# typing 'postgresql-9.4' instead of postgresql-9.5 above will fail.

sudo -u postgres psql -c "CREATE EXTENSION postgis; CREATE EXTENSION postgis_topology;" DATABASE_NAME_HERE

6. Finally... install PgAdmin3 and set your 'service' connections

 sudo apt-get install pgadmin3

My thanks to Jon Saints for his original post dated from 13th August 2014 (for Ubuntu 14.04)