FOSSGIS 2013: Mapfish Appserver
Mapfish Appserver is a platform for building web mapping applications using OGC standards and the Mapfish REST protocol.
Slides from FOSSGIS 2013 in Rapperswil (in german).
Mapfish Appserver is a platform for building web mapping applications using OGC standards and the Mapfish REST protocol.
Slides from FOSSGIS 2013 in Rapperswil (in german).
Quantum QGIS, a user-friendly and full featured Open Source GIS suite, is used in a wide range of professional enterprise infrastructures. Sourcepole, located in Zurich, Switzerland, now fills the last gap, which has prevented many organizations from the use of QGIS in enterprise infrastructures so far - they offer professional support directly from QGIS core developers. With QGIS Enterprise long term support and maintenance, the customer gets a professionally supported and maintained GIS infrastructure based on QGIS.
QGIS is an official project of the Open Source Geospatial Foundation (OSGeo). It is developed since 2002 by a very active developer community and runs on Linux, Mac OSX, Windows and Android. It provides all features required for a desktop GIS in enterprise use. This includes interfaces to many data formats, extensive analysis functionality, support of main specifications of the Open Geospatial Consortium, numerous styling options, production of ready to print maps and extenddability via Python interface.
The upcoming QGIS Release 2.0 is the basis of the QGIS Enterprise Suite consisting of QGIS Desktop, QGIS Server and QGIS Web Client. These components are maintained by Sourcepole apart from the QGIS community project. Backward compatibility to QGIS 1.8 (Lisboa) plays a major role, because most existing plugins, will not be compatible with the upcoming QGIS community version 2. QGIS Enterprise is currently available for Ubuntu / Debian, RedHat 6, Windows 32bit and Windows 64bit.
Since 2003 Sourcepole is significantly involved in the development of QGIS and supports organizations from 2 to 140,000 employees in the use of QGIS. As an official committer to several OSGeo projects, Sourcepole is able to integrate customer specific extensions into the main software repositories. Improvements of QGIS Enterprise, if possible, will always go back into the QGIS community development.
The good old OGC WMS has many advantages compared to tiled maps:
Well known disadvantages are scalability issues for high-traffic sites and a slower response time for complex maps.
The second point can be significantly improved by using a technique known from the progressive JPEG format. Before loading a map with full resolution, a map image with a lower resolution is requested from the server. This results in a better response time, because rendering and transmitting of the low resolution image is significantly faster. The biggest effect on rendering time is in combination with raster layers, but also for vector layers the improvement can be substantial.
High resolution:
Low resolution:
The technique can be easily applied to any WMS using this basic OpenLayers implementation.
There is much room for improvements. The low resolution layer could be tiled, limited to certain zoom levels or having a larger extend for smoother panning.
QGISCloud has this optimization built into the QGIS Web-Client viewer, which helps collecting experience with a wide range of datasets.
The good old OGC WMS has many advantages compared to tiled maps:
Well known disadvantages are scalability issues for high-traffic sites and a slower response time for complex maps.
The second point can be significantly improved by using a technique known from the progressive JPEG format. Before loading a map with full resolution, a map image with a lower resolution is requested from the server. This results in a better response time, because rendering and transmitting of the low resolution image is significantly faster. The biggest effect on rendering time is in combination with raster layers, but also for vector layers the improvement can be substantial.
High resolution:
Low resolution:
The technique can be easily applied to any WMS using this basic OpenLayers implementation.
There is much room for improvements. The low resolution layer could be tiled, limited to certain zoom levels or having a larger extend for smoother panning.
QGISCloud has this optimization built into the QGIS Web-Client viewer, which helps collecting experience with a wide range of datasets.
QGIS Cloud and Sourcepole are proud to be official sponsors of the team Öcher-Safari, attending the Allgäu-Orient-Rallye. One of the last adventures in the world of cars. Sourcepole serves the team with know how, infrastructure and more. Information about the team and the charity ideas of this event you can find on Öcher-Safari and the official web site of the Allgäu-Orient-Rallye.
We’ll be using Postgis2.0 from UbuntuGIS, which has packages for a number of recent Ubuntu releases. Since Ubuntu precise has libc6 2.14 and Debian wheezy only 2.13 we fall back on Ubuntu oneiric for packages, which also has libc6 2.13.
However Postgis 2.0 in UbuntuGIS depends on a lot of llibraries which were in squeeze but live in wheezy under a higher version. Therefore we’ll install a lot of packages from Debian squeeze. Fortunately the libraries are versioned themselves and thus can be installed along the libraries from Debian wheezy.
Let’s go. Add the Debian squeeze sources:
# SRC="deb http://ftp.ch.debian.org/debian/ wheezy main"
# echo "$SRC" >> /etc/apt/sources.list
We’ll also add the security source, in case Debian releases a security update.
# SRC="deb http://ftp.ch.debian.org/debian/ wheezy main"
# echo "$SRC" >> /etc/apt/sources.list
You may want to replace ftp.ch.debian.org by a debian mirror nearer to you.
Now add the UbuntuGIS sources:
# SRC="deb http://ppa.launchpad.net/ubuntugis/ubuntugis-unstable/ubuntu oneiric main"
# echo "$SRC" > /etc/apt/sources.list.d/ubuntugis.list
Now update and try to install postgis:
# apt-get update
# apt-get install postgresql-9.1-postgis
Create your database:
# sudo su
# su - postgres
$ psql postgres
postgres=# CREATE DATABASE your_db OWNER your_preferred_user:
Now add the postgis features to that database:
$ psql -d your_db -f /usr/share/postgresql/9.1/contrib/postgis-2.0/
$ psql -d your_db -f /usr/share/postgresql/9.1/contrib/postgis-2.0/spatial_ref_sys.sql
That should be it. Let’s hope it works.
A final warning: you are mixing multiple distributions here. This can lead to problems. Due to version conflicts upgrading packages can become very difficult.
Tomáš Pospíšek tpo_hp@sourcepole.ch
This howto describes how to resize a root ext3 filesystem on a remote Debian wheezy server.
This howto is not an original work but only an update of an older howto by Stefan @ https://thunked.org/. This version is specifically adapted to a server running Debian wheezy.
DISCLAIMER:
THERE IS A DECENT CHANCE THAT IF YOU FUCK THIS UP YOUR
REMOTE SYSTEM SIMPLY WONT BOOT AT ALL. I URGE YOU TO TEST
THIS LOCALLY BEFORE USING THIS METHOD ON A PRODUCTION
SYSTEM. ESPECIALLY IF YOUR SYSTEM IS NOT DEBIAN WHEEZY,
SINCE THAT'S THE ONLY ONE I HAVE TESTED.
THE QUICK WAY:
If you don't want to read the whole thing you can only
execute the commands I run and probably skip the
explanations.
I’ve only done this on Debian Wheezy. If you’re using another distro the initrd layout and init scripts may be a bit different. However, I suspect it looks very similar on almost every distro out there. On Debian my root partition is an ext3 partition.
The general idea is pretty simple: you can’t shrink a mounted partition and it’s impossible to unmount or replace your root partition in a live system, so we have to resize the partition before it is mounted. What we’ll do to accomplish this is change the initrd image to make the init scripts resize the root partition before mounting it. This is by far the most flexible and easy method to resize your root partition I could think of. Most suggestions I found on google required you to create separate OS on a new root partition and boot into that, but I did not have any space to create a new root partition on my remote machine.
Unpacking the initrd image is fairly straight forward:
$ mkdir ~/initrd; cd ~/initrd
$ gunzip -c /boot/initrd.img-3.2.0-3-amd64 | cpio -i --make-directories
62631 blocks
$ ls -l
total 40
drwxr-xr-x 2 root root 4096 Sep 11 20:23 bin
drwxr-xr-x 3 root root 4096 Sep 11 20:23 conf
drwxr-xr-x 6 root root 4096 Sep 11 20:23 etc
-rwxr-xr-x 1 root root 6797 Sep 11 20:23 init
drwxr-xr-x 7 root root 4096 Sep 11 20:23 lib
drwxr-xr-x 2 root root 4096 Sep 11 20:23 lib64
drwxr-xr-x 2 root root 4096 Sep 11 20:23 run
drwxr-xr-x 2 root root 4096 Sep 11 20:23 sbin
drwxr-xr-x 6 root root 4096 Sep 11 20:23 scripts
First, we have to copy all the programs we need to resize our partition onto the initial ram disk. For my ext3 file system I need e2fsck and resize2fs. The programs are depending on a few libraries, so you’ll need to copy those to the new initrd image too. Libraries can also depend on other libraries, make sure you recursively check dependencies until you don’t have any missing dependencies anymore.
$ ldd /sbin/e2fsck
linux-vdso.so.1 => (0x00007fff3594c000)
libext2fs.so.2 => /lib/x86_64-linux-gnu/libext2fs.so.2 (0x00007f7cdddd5000)
libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007f7cddbd1000)
libblkid.so.1 => /lib/x86_64-linux-gnu/libblkid.so.1 (0x00007f7cdd9a9000)
libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f7cdd7a4000)
libe2p.so.2 => /lib/x86_64-linux-gnu/libe2p.so.2 (0x00007f7cdd59c000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7cdd214000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7cdcff8000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7cde01e000)
$ ldd /sbin/resize2fs
linux-vdso.so.1 => (0x00007fffa216a000)
libe2p.so.2 => /lib/x86_64-linux-gnu/libe2p.so.2 (0x00007fa01f7a2000)
libext2fs.so.2 => /lib/x86_64-linux-gnu/libext2fs.so.2 (0x00007fa01f55f000)
libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007fa01f35a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa01efd3000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa01edb7000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa01f9b0000)
We only copy the libraries that are not yet present in the initramfs. Fortunately in our case there are no recursive dependencies of those libraries.
$ for i in libext2fs.so.2.4 libcom_err.so.2.1 libe2p.so.2.3; do \
cp -i /lib/x86_64-linux-gnu/$i lib/x86_64-linux-gnu/; \
done
$ cd lib/x86_64-linux-gnu/
$ ln -s libcom_err.so.2.1 libcom_err.so.2
$ ln -s libext2fs.so.2.4 libext2fs.so.2
$ ln -s libe2p.so.2.3 libe2p.so.2
$ cd ~/initrd/
$ cp /sbin/e2fsck ~/initrd/bin/
$ cp /sbin/resize2fs ~/initrd/bin/
Next, we need to edit the init script. Debian uses busybox in its initrd image so the init script will be interpreted by a bourne shell. If you look through the init script file you’ll find the moment where the script mounts the root file system:
$ cat scripts/local
...
# FIXME This has no error checking
# Mount root
if [ "${FSTYPE}" != "unknown" ]; then
mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} ${rootmnt}
else
mount ${roflag} ${ROOTFLAGS} ${ROOT} ${rootmnt}
fi
...
Simply add in the commands to resize the file system right before the the file system is mounted. Resize2fs in Debian does not want to resize the file system before it is forcefully checked. It may be wise to add the -p or -y flag to e2fsck. -y will answer yes to all questions, this could prevent a hung system but may cause more damage to your files or filesystem. The -p flag will only automatically answer yes to safe operations. resize2fs takes two parameters, the first is the block device that has the ext2 or ext3 file system and the second is the new size you want to give it. By default the size is in blocks, but you can append a unit to change that. ‘K’ for kilobytes, ‘M’ for megabytes, ‘G’ for gigabytes and ‘T’ for terabytes. If you don’t specify a size, it will enlarge the file system to the total size of the partition or logical volume. After adding the commands the init script will look something like this:
#RESIZEROOTFS MODIFIED!!! DONT RUN MORE THAN ONCE
_log_msg "Starting e2fsck"
/bin/e2fsck -p -f -C 0 /dev/sda4 || true
_log_msg "Starting resize2fs"
/bin/resize2fs /dev/sda4 100G || true
# FIXME This has no error checking
# Mount root
if [ "${FSTYPE}" != "unknown" ]; then
mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} ${rootmnt}
else
mount ${roflag} ${ROOTFLAGS} ${ROOT} ${rootmnt}
fi
If you have access to the system’s console, you might want to add a “-C 0” to e2fsck’s parameters. That will show you the progress of the fscheck.
There’s one last thing we have to do before re-packing the initrd image. e2fsck and resize2fs will fail if there is no /etc/mtab file available so we’ll have to make sure /etc/mtab exists.
$ touch ~/initrd/etc/mtab
$ cd ~/initrd/
$ find ./ | cpio -H newc -o > /tmp/initrd.cpio
64097 blocks
$ gzip -c /tmp/initrd.cpio > /boot/initrd-resize.img
And lastly, we need to add a new default boot option in grub. In Debian grub’s configuration file is constructed from various bits under /etc/grub.d. The resulting total configuration file is put under /boot/grub/grub.cfg. Open up the grub.cfg file in your favorite text editor and look for the default entry. It’s usually the first one, but may vary. Add a copy of the original entry to /etc/grub.d/40_custom and change the initrd image to the one we just created.
$ cat /etc/grub.d/40_custom
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry 'resize' --class debian --class gnu-linux --class gnu --class os {
insmod gzio
insmod part_gpt
insmod ext2
set root='(hd0,gpt1)'
search --no-floppy --fs-uuid --set=root 0aa8bc27-17e3-4ae2-a9cf-497ab444970b
echo 'Loading Linux 3.2.0-3-amd64 ...'
linux /vmlinuz-3.2.0-3-amd64 root=UUID=660f79dc-c152-4e15-ad61-7075b42de609 ro quiet
echo 'Loading initial ramdisk ...'
initrd /initrd-resize.img
}
Now make sure that it’s this entry that will be booted into by default. Set GRUB_DEFAULT in /etc/default/grub to the name of the entry you’ve just created:
$ cat /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'
#GRUB_DEFAULT=0
GRUB_DEFAULT="resize"
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""
...
Finally, you can reboot the system. When it comes back online (if it comes back grin) your file system will be resized. Be aware that e2fsck and resizefs take a long time on big disks. On my system the two took 2 hours for a 1.5T filesystem. Thus don’t prematurely reboot your system if it doesn’t come up again quickly.
Don’t forget to remove the new grub entry, so your file system doesn’t get resized every time you boot.
Original howto at https://thunked.org/general/howto-shrink-a-remote-root-ext3-filesystem-t96.html
Original howto Written by Stefan @ https://thunked.org/
This version for Debian wheezy by Tomáš Pospíšek
For providing maps via WMS over the internet, it is important to generate image files with a small size. Because normally, most of the perceived WMS delay comes from transfering large images files over the internet (and not from map rendering itself). Therefore, QGIS server supports the conversion of png24 and png32 images into png8, therefore generating a file with only 1/3 resp. 1/4 of the original size (but with lower quality). However, until recently, QGIS server was using the default algorithm from the Qt library for conversion to png8, resulting in very ugly png8 images if used with a transparent background and sometimes with shifted colors. Therefore, I decided to implement a better conversion algorithm: the median cut algorithm, which was first described by Heckbert in 1982 ( Paul S. Heckbert, Color Image Quantization for Frame Buffer Display. ACM SIGGRAPH ‘82 Proceedings). This algorithm creates color boxes in 4-dimensional colour space and subdivides at the mean of the largest dimension. It stops if the number of boxes equals the requested number of colors (256 in the case of png8 conversion). First tests show the quality of the converted images are quite good for vector maps. So a performant configuration for a webmap means probably to fetch background rasters as jpg and to overlay vectors as png8 with transparent background.
Let’s see with an example what the conversion from png24 to png8 means in terms of image quality. The first file is a png24 image, 590 KB size:
And this one is the conversion to png8, only 190 KB size.
To test the png8 conversion, you need to have the latest QGIS version from git (or a nightly build tomorrow). Then simply replace the FORMAT paramter in the url with ‘&FORMAT=image/png; mode=8bit’.
In QGIS server, it is now possible to selectively exclude layers from WMS publication. These layers will be available only on the desktop and hidden from WMS clients. Similarly, print layouts can be excluded from WMS publication. Of course, these settings are conveniently accessible from the project properties dialog of QGIS (but you need to have a nightly build or a recent compile):
Additionally, attributes per layer can be excluded from WMS or WFS publication in the vector properties dialog:
There is also a new request type called ‘GetProjectSettings’. The output of this request is similar to the GetCapabilities output, but with more details and more specific to QGIS:
These new features have been developed in collaboration and with funding from the city of Uster. More details are available on the QGIS server / webclient wiki page
The Region of Umbria, Italy, sponsored 4 days of work to update QGIS Globe for current QGIS versions. Most of the functionality is working again and the globe is now compatible with osgEarth 1.0 up to 1.3. The bad news is, that the globe plugin is not working on Windows with OSGeo4W. It seems that one of the OSGeo4W libraries (GDAL?) is compiled with an incompatible MS compiler version. Christmas holidays are coming…
At least it gives Linux users the possibility to play with the globe using the current development version and do exciting stuff like Oslandia does:
Imagine someone would sponsor four weeks of QGIS Globe work!
Tuesday, 2012-03-20 11:00: FOSSGIS in Dessau, Germany starts with a workshop for programming QGIS plugins
A great conference begins, with about 400 people attending presentations and workshops over three days.
Tuesday, 2012-03-20 14:42: Changeset c27c89045c: “Add WFS support for QGIS server. Provided by René-Luc D’Hont”
Wow.
Tuesday, 2012-03-20 14.48: QGIS 1.7.4 uploaded to DebianGIS
Ok, QGIS 1.7.4 is already a few weeks old. But current version on Debian is 1.4.0! This will be a long “new features” list for Debian users. Thanks for your work, Francesco!
Tuesday, 2012-03-20 16:00: Marco Bernasocchi demonstrates a fully functional QGIS on a Android tablet.
GPS support, right click gesture, pinch zooming and offline editing plugin working. Just a few tickets are left for uploading it to Android market. Hopefully we find another great student for this years follow-up GSoC project!
Wednesday, 2012-03-21 16.05: Victor Olaya, author of SEXTANTE, announces his work on a QGIS processing framework with toolbox, graphical modeler, batch processing interface, etc.
Wow!!
Wednesday, 2012-03-21 18.30: QGIS and GRASS user meeting at FOSSGIS
Explaining whats going on in the QGIS code and the QGIS community. Live demonstration of raster resampling branch.
Wednesday, 2012-03-21 20.18: Tim announces QGIS 1.8 RC1 for April 9th.
Test it before the hackfest in Lyon!
Thursday, 2012-03-22 08:00: Bad news - three days in a row without any commit from jef!
What happened? Jürgen forgot to bring his power adapter to Dessau :-(
Thursday, 2012-03-22 13:30: FOSSGIS is over
with well attended QGIS presentations and workshops.
Thursday, 2012-03-22 23:37: Changeset 05f7d6baea “fix warnings”, authored by jef-n
Jürgen is back home again. Phew!
Friday, 2012-03-23 10:26: Changeset 585e58179d: Nathan Woodrow merges native MS SQL provider, written by Tamas Szekeres, into master.
Good news for MS SQL users, but also for Tim: “Finally a way to stop having to use PostGIS all the time…”
What a week for QGIS! Looking forward to more news from the QGIS Hackfest in Lyon.
Tuesday, 2012-03-20 11:00: FOSSGIS in Dessau, Germany starts with a workshop for programming QGIS plugins
A great conference begins, with about 400 people attending presentations and workshops over three days.
Tuesday, 2012-03-20 14:42: Changeset c27c89045c: “Add WFS support for QGIS server. Provided by René-Luc D’Hont”
Wow.
Tuesday, 2012-03-20 14.48: QGIS 1.7.4 uploaded to DebianGIS
Ok, QGIS 1.7.4 is already a few weeks old. But current version on Debian is 1.4.0! This will be a long “new features” list for Debian users. Thanks for your work, Francesco!
Tuesday, 2012-03-20 16:00: Marco Bernasocchi demonstrates a fully functional QGIS on a Android tablet.
GPS support, right click gesture, pinch zooming and offline editing plugin working. Just a few tickets are left for uploading it to Android market. Hopefully we find another great student for this years follow-up GSoC project!
Wednesday, 2012-03-21 16.05: Victor Olaya, author of SEXTANTE, announces his work on a QGIS processing framework with toolbox, graphical modeler, batch processing interface, etc.
Wow!!
Wednesday, 2012-03-21 18.30: QGIS and GRASS user meeting at FOSSGIS
Explaining whats going on in the QGIS code and the QGIS community. Live demonstration of raster resampling branch.
Wednesday, 2012-03-21 20.18: Tim announces QGIS 1.8 RC1 for April 9th.
Test it before the hackfest in Lyon!
Thursday, 2012-03-22 08:00: Bad news - three days in a row without any commit from jef!
What happened? Jürgen forgot to bring his power adapter to Dessau :-(
Thursday, 2012-03-22 13:30: FOSSGIS is over
with well attended QGIS presentations and workshops.
Thursday, 2012-03-22 23:37: Changeset 05f7d6baea “fix warnings”, authored by jef-n
Jürgen is back home again. Phew!
Friday, 2012-03-23 10:26: Changeset 585e58179d: Nathan Woodrow merges native MS SQL provider, written by Tamas Szekeres, into master.
Good news for MS SQL users, but also for Tim: “Finally a way to stop having to use PostGIS all the time…”
What a week for QGIS! Looking forward to more news from the QGIS Hackfest in Lyon.
Creating a shaded relief map from digital elevation data is a nice way to create a backround map for web mapping or other GIS work. Thanks to the know-how and the funding from the Swiss Humanitarian Aid Unit, QGIS now has a sophisticated function for relief map generation. The method is described in detail in an paper by Marc-André Bünzli. An important part of the method is the choice of the elevation colors. The QGIS plugin has the possibility to analyse the frequency distribution of the elevation values in the DEM and to propose color changes where significant changes in the histogram occure. It is of course also possible to modify the color scheme, to insert a completely different one in the dialog or to generat a shaded maps without color.
As illustrated below, the relief map is composed by three components modulated onto the final map to give it a more three-dimensional appearance. These intermediate steps are shown here to get a better understanding of the method. In QGIS, the user directly gets the combination as a result.
And the final relief map looks like this:
Creating a shaded relief map from digital elevation data is a nice way to create a backround map for web mapping or other GIS work. Thanks to the know-how and the funding from the Swiss Humanitarian Aid Unit, QGIS now has a sophisticated function for relief map generation. The method is described in detail in an paper by Marc-André Bünzli. An important part of the method is the choice of the elevation colors. The QGIS plugin has the possibility to analyse the frequency distribution of the elevation values in the DEM and to propose color changes where significant changes in the histogram occure. It is of course also possible to modify the color scheme, to insert a completely different one in the dialog or to generat a shaded maps without color.
As illustrated below, the relief map is composed by three components modulated onto the final map to give it a more three-dimensional appearance. These intermediate steps are shown here to get a better understanding of the method. In QGIS, the user directly gets the combination as a result.
And the final relief map looks like this:
QGIS already offers a lot of possibilities to visualize raster data (contrast enhancement, color map, handling of transparent pixels, …) Last year, Radim Blazek refactored the raster provider interface and added on-the-fly reprojection support for rasters to QGIS. Very cool!
One of the few things currently missing in QGIS raster layer is the possibility to have other resampling types than nearest neighbour. The problem is that rasters appear pixelated when zooming further than the source raster resolution. So for applications like web mapping, it is important to interpolate the pixel colors and to have a broader display scale range for layers. In the last few weeks, I’ve added bilinear and cubic raster resampling to QGIS (thanks to Canton Solothurn for funding these activities!).
A lot of refactoring was necessary in the raster layer code to add resampling in a clean way. Therefore these changes are available in branch ‘raster_resampler’ of the QGIS github clone (git://github.com/mhugent/Quantum-GIS.git). It probably needs a longer period of testing to make sure every feature of the raster layer class still works properly.
The resampling option can be chosen in the raster properties dialog:
And here is the effect for a three band color image.
Nearest neighbour:
Bilinear:
Cubic:
And here for a palletted background map
Nearest neighbour:
Bilinear:
QGIS already offers a lot of possibilities to visualize raster data (contrast enhancement, color map, handling of transparent pixels, …) Last year, Radim Blazek refactored the raster provider interface and added on-the-fly reprojection support for rasters to QGIS. Very cool!
One of the few things currently missing in QGIS raster layer is the possibility to have other resampling types than nearest neighbour. The problem is that rasters appear pixelated when zooming further than the source raster resolution. So for applications like web mapping, it is important to interpolate the pixel colors and to have a broader display scale range for layers. In the last few weeks, I’ve added bilinear and cubic raster resampling to QGIS (thanks to Canton Solothurn for funding these activities!).
A lot of refactoring was necessary in the raster layer code to add resampling in a clean way. Therefore these changes are available in branch ‘raster_resampler’ of the QGIS github clone (git://github.com/mhugent/Quantum-GIS.git). It probably needs a longer period of testing to make sure every feature of the raster layer class still works properly.
The resampling option can be chosen in the raster properties dialog:
And here is the effect for a three band color image.
Nearest neighbour:
Bilinear:
Cubic:
And here for a palletted background map
Nearest neighbour:
Bilinear:
One would expect that considered the complexity of gdm there would be a way to have per user X11 options. So no, there isn’t one. At least not after the great rewrite after V2.22.
However good old Unix paradigms can help us (this is all under Debian, other Unices will allow a similar trick):
$ vim /usr/local/bin/X
Add something similar like this:
#!/bin/sh # # start X with different options depending on user # check if the parent gdm process that started us contains # "--username le_gamer" in its commandline # if ps -p $PPID -o args= | grep -q 'username le_gamer'; then exec /etc/X11/X.orig $* -config /etc/X11/xorg.conf.le_gamer else exec /etc/X11/X.orig $* fi
We check whether gdm is starting us and using the parameter “–username le_gamer”. If it is, then we’re using a different config file for X.
Of course you’ll need to adapt all this, unless you are using Debian or Ubuntu. You need to adapt the path to the X Server, to the config files etc.
Why did I do that? The problem is that Intel’s X server in Ubuntu Lucid Lynx 10.04 is really unstable with DRI on a Intel GM965/GL960 graphics card.
So unless I’m playing 3D games which are a lot faster with DRI, I don’t want to enable DRI (more over, “NoDRI” is pulling less power out of my battery). So my normal config contains this:
$ cat /etc/X11/xorg.conf [...] Section "Device" Identifier "Configured Video Device" Option "NoDRI" EndSection
So now, the only thing you need to do is replace your “normal” X Server with the new “adaptable” one:
$ sudo mv /etc/X11/X /etc/X11/X.orig $ ln -s /usr/local/bin/X /etc/X11/X
That’s it,
Tomáš Pospíšek
One would expect that considered the complexity of gdm there would be a way to have per user X11 options. So no, there isn’t one. At least not after the great rewrite after V2.22.
However good old Unix paradigms can help us (this is all under Debian, other Unices will allow a similar trick):
$ vim /usr/local/bin/X
Add something similar like this:
#!/bin/sh # # start X with different options depending on user # check if the parent gdm process that started us contains # "--username le_gamer" in its commandline # if ps -p $PPID -o args= | grep -q 'username le_gamer'; then exec /etc/X11/X.orig $* -config /etc/X11/xorg.conf.le_gamer else exec /etc/X11/X.orig $* fi
We check whether gdm is starting us and using the parameter “–username le_gamer”. If it is, then we’re using a different config file for X.
Of course you’ll need to adapt all this, unless you are using Debian or Ubuntu. You need to adapt the path to the X Server, to the config files etc.
Why did I do that? The problem is that Intel’s X server in Ubuntu Lucid Lynx 10.04 is really unstable with DRI on a Intel GM965/GL960 graphics card.
So unless I’m playing 3D games which are a lot faster with DRI, I don’t want to enable DRI (more over, “NoDRI” is pulling less power out of my battery). So my normal config contains this:
$ cat /etc/X11/xorg.conf [...] Section "Device" Identifier "Configured Video Device" Option "NoDRI" EndSection
So now, the only thing you need to do is replace your “normal” X Server with the new “adaptable” one:
$ sudo mv /etc/X11/X /etc/X11/X.orig $ ln -s /usr/local/bin/X /etc/X11/X
That’s it,
Tomáš Pospíšek
One would expect that considered the complexity of gdm there would be a way to have per user X11 options. So no, there isn’t one. At least not after the great rewrite after V2.22.
However good old Unix paradigms can help us (this is all under Debian, other Unices will allow a similar trick):
$ vim /usr/local/bin/X
Add something similar like this:
#!/bin/sh # # start X with different options depending on user # check if the parent gdm process that started us contains # "--username le_gamer" in its commandline # if ps -p $PPID -o args= | grep -q 'username le_gamer'; then exec /etc/X11/X.orig $* -config /etc/X11/xorg.conf.le_gamer else exec /etc/X11/X.orig $* fi
We check whether gdm is starting us and using the parameter “–username le_gamer”. If it is, then we’re using a different config file for X.
Of course you’ll need to adapt all this, unless you are using Debian or Ubuntu. You need to adapt the path to the X Server, to the config files etc.
Why did I do that? The problem is that Intel’s X server in Ubuntu Lucid Lynx 10.04 is really unstable with DRI on a Intel GM965/GL960 graphics card.
So unless I’m playing 3D games which are a lot faster with DRI, I don’t want to enable DRI (more over, “NoDRI” is pulling less power out of my battery). So my normal config contains this:
$ cat /etc/X11/xorg.conf [...] Section "Device" Identifier "Configured Video Device" Option "NoDRI" EndSection
So now, the only thing you need to do is replace your “normal” X Server with the new “adaptable” one:
$ sudo mv /etc/X11/X /etc/X11/X.orig $ ln -s /usr/local/bin/X /etc/X11/X
That’s it,
Tomáš Pospíšek
One would expect that considered the complexity of gdm there would be a way to have per user X11 options. So no, there isn’t one. At least not after the great rewrite after V2.22.
However good old Unix paradigms can help us (this is all under Debian, other Unices will allow a similar trick):
$ vim /usr/local/bin/X
Add something similar like this:
#!/bin/sh # # start X with different options depending on user # check if the parent gdm process that started us contains # "--username le_gamer" in its commandline # if ps -p $PPID -o args= | grep -q 'username le_gamer'; then exec /etc/X11/X.orig $* -config /etc/X11/xorg.conf.le_gamer else exec /etc/X11/X.orig $* fi
We check whether gdm is starting us and using the parameter “–username le_gamer”. If it is, then we’re using a different config file for X.
Of course you’ll need to adapt all this, unless you are using Debian or Ubuntu. You need to adapt the path to the X Server, to the config files etc.
Why did I do that? The problem is that Intel’s X server in Ubuntu Lucid Lynx 10.04 is really unstable with DRI on a Intel GM965/GL960 graphics card.
So unless I’m playing 3D games which are a lot faster with DRI, I don’t want to enable DRI (more over, “NoDRI” is pulling less power out of my battery). So my normal config contains this:
$ cat /etc/X11/xorg.conf [...] Section "Device" Identifier "Configured Video Device" Option "NoDRI" EndSection
So now, the only thing you need to do is replace your “normal” X Server with the new “adaptable” one:
$ sudo mv /etc/X11/X /etc/X11/X.orig $ ln -s /usr/local/bin/X /etc/X11/X
That’s it,
Tomáš Pospíšek