Project: QGIS

Changelog for version: 3.0.0


The greatest QGIS release ever! QGIS 3.0 is a huge overhaul and cleanup of our beloved Open Source GIS. QGIS 3.0 brings a massive list of new changes - the highlights of which we will try to cover here. As always can we remind you that QGIS is an open source project and if you are able to, consider supporting our work through donations, sponsorship or contributions to the code documentation, web site and so on.

Note: QGIS 3.0 is not released yet. This is the working area for contributing to the new changelog for version 3.0


User Interface


Feature: Improved consistency to the user interface

This work sponsored by the QGIS grant program on "adding consistency to UI controls" is now complete and merged into master. The following tasks were done as part of this
work:

  • All API regarding transparency/opacity/alpha was standardised to setOpacity() and opacity(). The methods take a double value between 0 (transparent) and 1 (opaque), keeping consistency with the Qt API.
  • A new widget QgsOpacityWidget was created, and is now used everywhere through the UI where opacity is set. This ensures consistent behavior and look for opacity controls everywhere.
  • Rotation has been standardised in the API and UI, so now rotation is always applied clockwise. All rotation widgets have been updated so they accept values from -360 to 360.
  • 2.x Projects with labeling using rotation and data defined rotation are transparently upgrade upon opening in 3.0
  • Scale APIs have been made consistent throughout the QGIS API. The confusing mix of scale denominators vs real scales has been removed, with everything now operating on scale denominators. The behaviour of all scale range calls is standardised with a common meaning for min/max scales (and explicit api documentation regarding this)
  • All scale controls now use the standard scale widgets for consistency across the UI
  • Labeling now uses the same definition for min/max scale as the rest of the UI, and existing projects are transparently upgraded on opening in 3.0.
  • Fixed most outstanding bugs relating to scale usage, including bugs breaking the rule based scale limits

Thanks to the QGIS PSC and project donors for sponsoring this work and allowing it to proceed!

This feature was funded by QGIS Sponsors and Donors

This feature was developed by Nyall Dawson


Feature: Enable tabbed floating docks

For qt > 5.6 builds (most)
see https://woboq.com/blog/qdockwidget-changes-in-56.html


Feature: add search bar to the Configure Shortcuts dialog

Supports search by action name and by shortcut

This feature was developed by Alexander Bruy


Feature: Add support for fine-resolution mouse wheel zooming

Some mouses (notably on mac) have finer resolutions. They send mouse
wheel events in a higher frequency but with smaller delta values.
So far, zooming with such mouses was leading to unusable fast zoom
actions.

This feature was developed by Matthias Kuhn


Feature: Toggle visibility of opened panels in main window

Accessible via:
- View menu > Toggle Panels Visibility
- Ctrl+Tab keyboard shortcut

This feature was developed by Mathieu Pellerin


Feature: Locator bar

We have the awesome new locator bar - yay!


Feature: More non-blocking, inline editing

  • map unit scaling
  • color brewer and limited random ramp editors
  • editing colors in a color list inline in the style panel
  • inline editing of colors and symbols in composer

now shown inline in style panel


Feature: Add an option to show user color schemes menus

This adds the ability for users to set whether a user created
color scheme should show up in the color button drop-down menus.

It's accessed through the color picker dialog, on the lists tab.
Just add a new color scheme, then from the scheme menu tick the
new "show in buttons" option.

Handy if you have sets of common palettes and want them to be
instantly available through the color menu.

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: Improved map canvas' save as image

The map canvas' save as image function has been expanded and now offers users the possibility to tweak the scale, resolution, and extent on-the-fly. A save as PDF function was also added to quickly export the map canvas into a resolution-independent PDF.

This feature was developed by Mathieu Pellerin


Feature: Color setting for map canvas north arrow decoration

Color setting has been added for all map canvas north arrow decoration.

This feature was developed by Mathieu Pellerin


Symbology


Feature: NEW MAP COLORING ALGORITHMS IN QGIS 3.0

http://nyalldawson.net/2017/02/new-map-coloring-algorithms-in-qgis-3-0/

This feature was developed by Nyall Dawson


Feature: New "preset" colors color ramp option

Allows use of a color ramp consisting of a list of selected colors.
Currently there's no way in QGIS to classify a renderer using
some list of colors you've previously selected. So you can modify
the colors manually after classifying, but that's a pain
if you're regularly using the same color scheme.

Basically, it's like the color brewer color ramp options but
allowing users to pick their own preset list of colors to use*

(Because Cynthia Brewer isn't the only cartographic color expert!)

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: Allow symbol layers to be temporarily disabled

Adds a new checkbox at the bottom of each symbol layer's
properties which allows you to control whether the layer is
enabled or not.

Disabled layers are not drawn, but are saved and can be
enabled at a later stage.

This makes it easier to tweak symbol appearance without
having to totally delete a symbol layer.

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: Data defined symbol layer visibility

Adds a data defined override to control a symbol layer's
visibility. Allows users to disable drawing certain symbol layers
for matching features.

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: save and restore color ramp used for singleband pseudocolor rendering

This feature was developed by Alexander Bruy


Feature: save and restore color ramp used for singleband pseudocolor rendering

This feature was developed by Alexander Bruy


Feature: Add Points and Inches to available symbol units

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: New color ramp button widget

In QGIS 3.0, handling of color ramps has gotten much better via a newly introduced color ramp button widget. Improvements include:
- custom color ramp settings are remembered when projects are re-opened
- color ramp inversion is implemented within the widget, enabling this action across QGIS
- quick access to "favorite" color ramps within the widget pop-up menu
- interfacing with catalogs (cpt-city and ColorBrewer) is now much more pleasant

This feature was developed by Mathieu Pellerin


Feature: Style management re-work and upgrade

Style management has received a major upgrade. The improvements include:
- A new favorite grouping system was added, which the symbols list widget defaults to
- The selected tag / smartgroup in the symbols list widget now persists when switching layers (and across sessions)
- The symbols list widget will update the tag / smartgroup combo box when users add / rename / remove categories
- Users can now directly tag, as well as add to favorites, symbols while saving those to the style database
- To streamline style management, groups have been removed and fully replaced by tags
- Tags have been integrated into the import/export user interface

This feature was developed by Mathieu Pellerin


Feature: Show an alpha slider in color button drop down menu

Allows quick tweaks to the color alpha

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: Support setting of color and transparency on multiple items for raster renderers

It is now possible to change the color and transparency for multiple values at the same time for the singleband pseudocolor and the paletted renderers. Simply select values within the values' list and right click to have a pop-up menu appear.

This feature was developed by Mathieu Pellerin


Feature: raster auto-stretching when updating canvas

see https://lists.osgeo.org/pipermail/qgis-developer/2016-September/044393.html

  • follow up to raster pseudocolor updated extent auto classification

This feature was developed by Even Rouault


Feature: Raster stretch toolbar actions support for pseudocolor renderer

This feature was developed by Mathieu Pellerin


Feature: Transparency support for paletted renderer

In QGIS 3.0, it is now possible to change the transparency value for unique values for the paletted renderer.

This feature was developed by Mathieu Pellerin


Feature: Control over annotation contents margins

Allows setting left/top/right/bottom margins for the contents
within an annotation.

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: Annotations can be styled using fill symbol styles

This changes the rendering of annotation frames to use QGIS' symbology
engine, which means that all the existing fill styles can now be
used to style annotation frames.

Also paint effects & data defined symbol parameters.

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Labelling


Feature: Allow label font size in mm/pixels

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Diagrams


Feature: Data definable properties

Add support for more data definable properties to diagrams:

- Distance
- Priority
- ZIndex
- IsObstacle
- Show
- AlwaysShow
- Diagram Start Angle

This feature was funded by QGIS Grant Program

This feature was developed by Nyall Dawson (North Road)


Rendering


Feature: Live layer support

QGIS 3.0 now supports live layers. These layers get re-rendered automatically at a time interval that you determine, in a clean and flicker free way. Live layers are great for tracking continuously changing data like a fleet of cars, a flock of birds that you have telemetry data for and so on.

This feature was developed by Kartoza & North Road


Feature: Point cluster renderer

Groups nearby points into a single rendered marker symbol.

QgsPointDisplacementRenderer has been split into a new pure virtual QgsPointDistanceRenderer base class which handles the detection of clusters and grouping of points. The new cluster renderer reuses this base class to avoid code duplication.

Additionally, some improvements have been made to the displacement renderer, specifically:
points are now assigned to the group which is "nearest" them, rather then just assigning them first group within the search distance. In some cases this was assigning features to a more distant cluster, resulting in less predictable cluster patterns
individual points are now correctly shown in their own selection state
* lots of code cleanup + documentation too.

See the crowd funding programme for more details.

This feature was funded by Andreas Neumann, Qtibia Engineering (Tudor Barascu), Karl-Magnus Jönsson, Geonesia (Nicolas Ponzo) & numerous additional anonymous backers whose generous contributions are also highly valued!

This feature was developed by Nyall Dawson


Feature: Cache labeling result to avoid unnecessary redraws when refreshing canvas

This change allows the labeling results to be cached to an image
following a map render. If the cached label result image can be
reused for the next render then it will be, avoiding the need
to redraw all layers participating in the labeling problem and
resolving the labeling solution.

Basically this means that canvas refreshes as a result of changes
to any NON-LABELED layer are much faster. (Changing a layer which
is part of the labeling solution still requires all labeled
layers to be completely redrawn)

This feature was developed by Nyall Dawson (North Road)


Digitising


Feature: Range vertex selection in node tool

This little feature makes it possible to select a range of vertices from one feature.

It can be activated by pressing Shift+R - afterwards one needs to click start and final point within a feature - this will selected all vertices between the two.

The range selection can be cancelled anytime by right-click or by pressing Esc key.

For closed curves (polygons), it is possible to switch to the "longer" way around the ring by holding Ctrl while clicking the final point.

This feature was developed by Martin Dobias


Feature: add functionnality to copy/move feature to move feature map tool

This feature was developed by Denis Rouzaud


Feature: Add default Z value option

This feature was developed by Alexander Lisovenko


Feature: Move feature now benefits from Advanced Digitizing

This feature was developed by Denis Rouzaud


Data Management


Feature: Auxilliary Storage Support

A new tab is available in vector layer properties to manage auxiliary storage :

as323

A new action Store data in the project is available in the data defined menu providing an easy way to manage auxiliary data for a property :

as00

Auxiliary data is stored in a sqlite database and managed thanks to the OGR data provider (instead of the spatialite provider) to keep as small as possible the database file. This database file (with extension .qgd) is either saved just next to the project file or directly embedded within the new .qgz format.

See the original pull request and this article which explains more

This feature was developed by Paul Blottiere / Oslandia


Feature: Metadata overhaul


Feature: Pan to current feature in attribute table

This feature was developed by Marco Hugentobler


Forms and Widgets


Feature: Allow controlling labels for individual edit widgets

In the drag and drop designer, a double click on an item will allow
controlling if the label should be shown for each item individually.

This feature was developed by Matthias Kuhn


Feature: Smarter default edit widgets with plugins to pick them

Now the widgets factories can give a score on how good they could handle
a widget.

Additionaly, plugins can be added to choose a widget factory in function
of an external information. One of them uses a table in PostgresQL to
allow specification of the widget type and configuration.

Automatically pick RelationReference widgets for foreign keys.

This feature was developed by Patrick Valsecchi


Feature: Allow configuring link/unlink feature buttons on relation editor widget

This feature was developed by Matthias Kuhn


Feature: conditional visibility for tabs and groupboxes

This adds a new configuration option to conditionally show or hide
tabs and groupboxes in drag and drop designer forms.

Configuration is done via a double click in the designer tree in the
fields configuration interface.

An expression can be entered to control the visibility. The expression
will be re-evaluated everytime values in the form change and the tab or
groupbox shown/hidden accordingly.

This feature was developed by Matthias Kuhn


Feature: Field constraints can be enforced or not

Non-enforced constraints just show a warning to the user, but
do not prevent committing the feature. Enforced constraints
block users from comitting non compliant features.

Any constraints detected by the provider are always
enforced.

This feature was funded by OpenGIS.ch

This feature was developed by Nyall Dawson (North Road)


Feature: Add layer scoped actions

Within the attribute table, there is a new button to trigger actions
which are not based on individual features but instead on the whole layer.
Normally they will perform actions based on all features or the selection.

This feature was developed by Matthias Kuhn


Feature: Add between/not between to numerical fields in select by form

This feature was developed by Mathieu Pellerin


Feature: Show field values in autocompleter in form filter mode

The autocompleter is nicely updated in the background so that
the gui remains nice and responsive, even if there's millions
of records in the associated table.

It's now used as a search widget for text fields, so can be seen
in the browser window if you set the filter to a text field, or
if you launch the form based select/filter by selecting a layer
and pressing F3.

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: Add zoom to features and flash features shortcuts in select by form dialog

Allows very quick navigation and identification of features which match the criteria
in the form

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Layer Legend


Feature: Hide Deselected Layers action

Allows you to quickly hide all deselected layers. This is very handy
when you have a large project and want to quickly hide all except
for a couple of layers

This feature was funded by SMEC (Surbana Jurong)

This feature was developed by Nyall Dawson (North Road)


Feature: Change of ergonomy of the visibility of layers inside groups

- Checking/unchecking a group doesn't change the check state of its children.
A node is visible if and only if it is checked and all its parents too.
- There is no more a semi-checked state for a group
- Ctrl-clic on a unchecked group will check the group and all its descendants.
-  clic on a unchecked layer will check the lager and all its parents.
- Ctrl-clic on a checked group will uncheck the group and all its descendants.
- Ctrl-clic on a checked layer will uncheck the layer and all its parents.
- Those actions are available in contextual menu items in the tree view.
- Invisible layers because they or their parent(s) is unchecked are greyed out.

This feature was developed by Even Rouault


Map Composer


Feature: Control over drawing of composer table grid horizontal & vertical lines

It is now possible to independently control horizontal and vertical line rendering of composer table items. This added flexibility expends the styling possibilities of this item directly within QGIS.

This feature was developed by Mathieu Pellerin


Feature: Map Composer Overhaul

This PR implements a major rework to how compositions are managed.

Highlights are:

  • A new QgsLayoutManager class which is used for storage and serializing/deserializing of compositions. A QgsLayoutManager is attached to QgsProject. This allows core code to access the compositions attached to a project. All handling of compositions has been moved from app to core, making it easy for server (and other non-app based projects. QField/roam?) to access project compositions without resorting to fragile xml parsing.
  • Composer windows are created on demand and destroyed on close. This avoids the heavy requirement of creating all composer windows and widgets for every single composer item when loading projects. It's the main reason loading projects with compositions is so slow currently. Now, composer windows are created only when the window is opened and destroyed when the window is closed. Composer item configuration widgets are also only created on demand (when an item is selected) instead of precreating all widgets.
  • A side benefit of destroying composer windows on close is that we now no longer suffer from a Qt bug which blocked use of floating docks in composer windows. Now you can float the item/composition/etc panels! Much nicer for full screen working with compositions on multi-monitor setups.
  • Reworked API for working with composers through iface. Since composer windows don't exist unless they are currently open, I've redone all the iface methods for interacting with composers to make it clear that they only apply to open windows (code which works with compositions (not composers) should be updated to use the layoutManager() attached to the active project instead, since compositions in the manager always exist). Additionally, I've added a simple composer interface which provides a stable API for plugins and scripts to work with composer windows. Very basic for now, but in future we can extend with more hooks to allow plugins to interact with composer windows.
  • Lots of code cleanups and removal

This feature was funded by The Swiss QGIS User Group!

This feature was developed by Nyall Dawson (North Road)


Feature: Drag qpt to QGIS to create new composer from template

This feature was funded by SMEC (Surbana Jurong)

This feature was developed by Nyall Dawson (North Road)


Feature: Allow customization of line spacing for composer legend item labels

This feature was developed by Mathieu Pellerin


Feature: Allow choice of CRS for map items

This allows the CRS for map items to differ from the canvas/project
CRS. It also allows different map items to have different CRS,
eg an overview map can be set to a different CRS to the main map.

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: Data definable controls

item frame and background colors
Data defined svg colors and outline width for
composer picture items ( Especially useful when the picture is showing a north arrow!)

Data defined legend titles and column count
Data defined scalebar colors and line width

This feature was funded by QGIS Grant Program

This feature was developed by Nyall Dawson (North Road)


Feature: Holding shift while drawing polyline/polygon constrains line angles

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Analysis Tools


Feature: Raster unique values count for processing

http://imhere-asia.com/blog/post/qgis-raster-layer-unique-values-count

This feature was developed by http://imhere-asia.com/


Processing


Feature: New algorithm for offsetting lines

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: New algorithm for single sided buffers

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: Optimised points along geometry algorithm

Supports also polygon geometries, handles null geometries,
and records the original line angle along with the distance
for each point.

This feature was funded by Andreas Neumann

This feature was developed by Nyall Dawson (North Road)


Feature: Add choice of simplification method to simplify

This change allows users to choose which method to use when running
the simplify geometries algorithm, with choices of the existing
distance based (Douglas Peucker) algorithm, area based (Visvalingam)
algorithm and snap-to-grid.

Visvaligam in particular usually results in more cartographically
pleasing simplification over the standard distance based methods.

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: support for output geometry types in models

Model child algorithm inputs are now filtered to only those which generate applicable geometry types for the input to another child algorithm

This feature was developed by Alexander Bruy


Feature: Angle threshold for smooth algorithm

Add option to QgsGeometry::smooth to not smooth
segments shorter than a certain threshold or sharp corners
with an angle exceeding a threshold

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: Better support for Z/M dimensions and curved geometries

Many more algorithms now respect Z/M values and do not discard this information, and additionally many algorithms now correctly maintain curved geometries without forced segmentization of these geometries.


Feature: Raster analysis algorithms added to processing

The following algorithms were added to processing from the raster analysis plugin:
- Aspect
- Slope
-Ruggedness
-Hillshade
- Relief

This feature was developed by Alexander Bruy


Feature: New algorithm to extract specific nodes

This algorithm allows you to extract specific nodes from geometries.
Eg you can extract the first or last node in the geometry.

The algorithm accepts a comma separated list of node indices to
extract, eg 0 = first node, 1 = second node, etc. Negative indices
can be used to extract nodes from the end of the geometry. Eg
-1 = last node, -2 = second last node.

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: expose zonal statistics from Zonal statistics plugin in toolbox

This feature was developed by Alexander Bruy


Feature: add a spatialite execute SQL algorithm

This feature was developed by Mathieu Pellerin


Feature: New algorithm to extend lines

Allows extending linestrings by a set distance at the start
and end of the line

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: New extract by expression algorithm

Filters an input layer by expression

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: add import into spatialite algorithm

This feature was developed by Mathieu Pellerin


Feature: Interpolation algorithms

expose IDW and TIN interpolation from Interpolation plugin in toolbox

Interpolation plugin has been removed as a result

This feature was developed by Alexander Bruy


Feature: New algorithm to compute geometry by expression

This algorithm updates existing geometries (or creates new
geometries) for input features by use of a QGIS expression. This
allows complex geometry modifications which can utilise all the
flexibility of the QGIS expression engine to manipulate and create
geometries for output features.

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: Snap geometries to layer algorithm

Port the Geometry Snapper plugin to processing

Snap geometries algorithm allows snapping
to other layer types, supports point/line layers

Snap to layer algorithm accepts a mode parameter. With a new option to prefer to snap to closest point on geometry.
The old behaviour was to prefer to snap to nodes, even if a node
was further from the input geometry than a segment. The new option
allows you to snap geometries to the closest point, regardless
of whether it's a node or segment.

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: New input type for expressions

This adds a new input type for expression inputs. Expression
inputs can be linked to a parent layer so that the builder
shows the correct fields and layer variables.

It's designed to be used when an algorithm specifically requires an expression,
eg Select by Expression and Extract by Expression.

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: SplitWithLines

Rename algorithm SplitLinesWithLines to SplitWithLines
Accept polygon as input, too
Use only selected lines to split with (if processing is set to use selection only)
Issue log message if trying to split multi geometries
Update help

This feature was developed by Bernhard Ströbl


Feature: pole of inaccessibility algorithm

Implements a processing algorithm to
calculate the pole of inaccessibility for a surface, which is the
most distant internal point from the boundary of the surface. This function
uses the 'polylabel' algorithm (Vladimir Agafonkin, 2016), which is an iterative
approach guaranteed to find the true pole of inaccessibility within a specified
tolerance. More precise tolerances require more iterations and will take longer
to calculate.

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: Extract by attribute can extract for null/notnull values

Adds support for filtering where an attribute value is null or not null

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: Create attribute index algorithm

Allows creation of an index on an attribute in a layer for faster
attribute based filtering

Support depends on the underlying data provider for the layer

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: New 'drop geometries' algorithm


Simply removes any geometries from an input layer and returns
the features with attributes only

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: New universal 'basic stats for field' algorithm

Replaces the existing 'Basic Stats for Numeric Fields' and
'Basic Stats for String Fields' algorithms and adds support
for date/time/datetime fields.

Having a single unified algorithm allows more flexible models
where a field type may not be known in advance.

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: Port heatmap plugin to processing algorithm

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: New algorithm to orthagonalize geometries

Adds a new algorithm which tries to make  angles in geometries either right angles or straight lines

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: Network analysis algorithms

add shortest path and service area algorithms to Processing

also allow calculating shortest path from a point to all points in a layer, or from all points in a layer to an end point. And creating service areas for all points in a layer.

Roadgraph plugin has been removed as a result.

This feature was developed by Alexander Bruy


Feature: Export processing models as PDF/SVG

In addition to exporting processing models as bitmap images, it is now possible to export processing models as resolution-independent PDFs and SVGs. This allows for high-resolution export of models which can be embedded into papers and books being published.

This feature was developed by Mathieu Pellerin


Feature: New algorithm to truncate tables

Irretrievably deletes all features from a table... use with caution!

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: added ‘invalid feature handling’ option

This feature was developed by Victor Olaya


Feature: algorithm to fix invalid geometries using native makeValid() implementation

This feature was developed by Alexander Bruy


Feature: add search to Get Scripts and Models dialog

This feature was developed by Alexander Bruy


Feature: Generic centroid algorithm

Reworked centroid algorithm which handles non-polygon layers

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: improved Extract nodes algorithm

Extract nodes algorithm now saves node
index, distance along line and angle at node

This feature was funded by Andreas Neumann

This feature was developed by Nyall Dawson (North Road)


Feature: New algorithm for translating (moving) points

Allows geometries to be shifted by a x/y displacement

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: Improved processing modeler window

The processing modeler window has received a lot of attention for this release. Improvements include:
- zoom controls in the window's toolbar
- customization of inputs and algorithms panels' location
- panels can now float above the processing window

This feature was developed by Mathieu Pellerin


Feature: New raster unique values report algorithm

A new algorithm was added to processing which returns the count and area of each unique value within a given raster layer.

This feature was developed by Mathieu Pellerin


Application and Project Options


Feature: Add support for user profiles

FEATURE] Add user profiles.

All user settings/plugins, etc are now loaded from APPDATA for each platform and no longer .qgis3 and are isolated from each other.
This allows for different profiles depending on what the user of QGIS needs, e.g test, prod, demo, etc

Profile menu allows for switching between profiles, or creating new ones.

https://github.com/qgis/QGIS/commit/7b92f1f1e445e069db0a6fb454318ad789c98778#commitcomment-23264727


Browser


Feature: Drag'n'drop layers from layer tree view to browser dock

Makes it easy to e.g. store your temporary layers in PostGIS

This feature was developed by Martin Dobias


General


Feature: Remove dxf2shp converter plugin

This functionality is available in OGR and there is no longer
a need for a dedicated QGIS plugin to do this task

Feature: Remove zonal stats plugin

This is now fully exposed via processing, which is the logical
place for this feature to reside.


Feature: Remove orphaned oracle raster plugin


Feature: add possibility to configure location of the QGIS help

This feature was developed by Alexander Bruy


Feature: remove TauDEM provider from core Processing

TauDEM is quite specific set of tools and it requires installation of
some additional tools. So we decide to turn it into separate provider,
reducing core codebase size and maintenance efforts.


Feature: removed otb and lidartools providers from processing


Feature: Migrate Photo, WebView and FileName widgets to Attachment


Data Providers


Feature: GeoPackage

  • processing uses pkg by default
  • save as uses pkg by default
  • create new layer uses pkg by default
  • browser drag and drop import layers

This feature was developed by Alessandro Pasotti


Feature: Support all GDAL writable raster formats for 'Save as' dialog on raster layers

This feature was developed by Nyall Dawson


Feature: New unified 'add layer' dialog

You can now use a single dialog to add a huge variety of data formats to QGIS.

This feature was developed by Alessandro Pasotti


Feature: Create attribute index support for spatialite provider

Allows creation of attribute indexes for spatialite layers

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: GeoNode integration


Feature: Support for HStore in PostGIS data provider


Feature: Data dependencies between layers

This allows to declare data dependencies between layers. A data
dependency occurs when a data modification in a layer, not by direct
user manipulation may modify data of other layers.
This is the case for instance when geometry of a layer is updated by a
database trigger after modification of another layer's geometry.

This feature was developed by Hugo Mercier


Feature: hstore support to the postgres provider

This feature was developed by Patrick Valsecchi


Feature: dxf export: support reprojection

This feature was developed by Juergen E. Fischer


Feature: Add support for arrays

Supported by postgres, spatialite

This feature was developed by Patrick Valsecchi


Feature: Add auto-discovery of relations for PostgresQL

This feature was developed by Patrick Valsecchi


Feature: Load/save style in database for GPKG and Spatialite

This feature was developed by Even Rouault


Feature: Unique and not-null constraint handling

Automatic detection of provider-side unique and not-null constraints implemented for postgres, spatialite, ogr provider

Client side unique and not-null constraints can be set within QGIS.

Unique constraints are enforced in attribute form

This feature was funded by OpenGIS.ch

This feature was developed by Nyall Dawson (North Road)


Feature: Detect literal default values for spatialite provider

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: Improved handling of defaults

Improve handling of defaults (inc provider default clauses,
literal defaults, and qgis expression defaults) and automatically
handle unique value constraints on layers

Any fields
with unique value constraints will be guaranteed to have a value
which is unique for the field.

This feature was funded by Canton of Zug and the QGEP project

This feature was developed by Nyall Dawson (North Road)


Feature: support for Z/M geometries in memory provider

This feature was developed by Alexander Bruy


QGIS Server


Feature: QGIS Server overhaul

As you may know, QGIS is jumping to a new major version (yes!). Doing so was made necessary because of the need to switch to python 3, QT5, but also because we needed to break the QGIS API in several places. (http://blog.qgis.org/2016/02/10/qgis-3-0-plans/)

A year ago, a tiny troll from switzerland rang a bell about the strong need for love server code base required. Indeed, the API was locked by some old methods of QGIS server. In short, QGIS server was reparsing the qgs project file in his own way, and created dependencies to part of QGIS we needed to drop.

As outsourcing the server code base was not an option, so we had to refactor it. The involved parties decided to get engaged in a code sprint in the city of Lyon, France dedicated to sharing their vision, planning the work and finally making all the following happen:

Higher level refactoring

All services (WMS GetMap, WFS GetFeature, GetLegendGraphics, WCS, GetPrint etc..) have been rewritten. Some like WMS were entirely rewritten. Kudos to the devs!

New features

  • Multi-thread rendering like in the desktop

  • A new option to trust layer metadata and thus speed up project loading

  • WFS 1.1 support https://github.com/qgis/QGIS/pull/5297

  • Full Python bindings for the server API

  • Server Services as plugins like providers

Deep, complex and unrewarding tasks

  • Remove all singleton calls

  • Cut all the dependencies to the old QGIS project file parser

  • Minimize dependencies to GUI library. Since fonts are necessary to render maps, totally removing them was not feasable.

Infrastructure tasks

  • Build a OGC compliancy platform and integrate it to a continuous integration platform. Conformity reports are now pushed to tests.qgis.org

  • Add unit tests ... and again more unit tests

  • Stress QGIS server against security leaks (SQL injections and other malicious attacks)

  • Start profiling and bench marking performances. This work still need some love - and funding - to be achieved

A presentation was given at FOSS4G-EU in July.

This feature was funded by QGIS.ORG Donors


Feature: possibility to segmentize feature info geometry in server

This feature was developed by Marco Hugentobler


Plugins


Feature: Remove trusted status from Plugin Manager

https://github.com/qgis/QGIS/pull/5272


Feature: Offline editing: Add flag to only copy selected features

This extends the offline editing possibilities to only work on subset of
large layers

This feature was funded by DB Fahrwegdienste GmbH

This feature was developed by Matthias Kuhn


Feature: GDALTools moved to processing

All functions previously available through the GDALTools plugin were moved to processing algorithms, allowing scripting of these functions and use in graphical models.

As a result the GDALTools plugin has been removed.

This feature was developed by Alexander Bruy


Feature: allow installing plugins from local ZIP packages

This feature was developed by Alexander Bruy


Programmability


Feature: Geometry class updates

There has been a major overhaul of the geometry classes in QGIS. The old classes have been renamed (as per the table below). New geometry classes will properly preserve Z and M attributes if present.

References https://github.com/qgis/qgis3.0_api/issues/11

This finally brings back a consistent state in naming within the geometry API

Renames

| QGIS 2 | QGIS 3 |
|--------------------|--------------------|
| QgsPolygon | QgsPolygonXY |
| QgsMultiPoint | QgsMultiPointXY |
| QgsMultiPolyline | QgsMultiPolylineXY |
| QgsMultiPolygon | QgsMultiPolygonXY |
| QgsPolygonV2 | QgsPolygon |
| QgsMultiPointV2 | QgsMultiPoint |
| QgsMultiPolylineV2 | QgsMultiPolyline |
| QgsMultiPolygonV2 | QgsMultiPolygon |

See also https://github.com/qgis/QGIS/pull/5491

This feature was developed by Matthias, Nyall and others


Feature: Support aggregation of geometry in expressions

This feature adds a 'collect' aggregation method resulting in a single multipart geometry from a list of geometries. This is exposed in the expression engine via the existing aggregate() function, as well as a new collect() function.

This feature was developed by Mathieu Pellerin


Feature: Expose @parent variable in aggregate functions

This makes it possible to access attributes and geometry from the parent
feature when in the filter of the "aggregate" expression function.

With this in place aggregates can be calculated per feature.

E.g. max "measurement" for each point_station per polygon_research_area.

Or a default attribute value when digitizing features:

    aggregate(layer:='countries', aggregate:='max', expression:=\"code\",
filter:=intersects( $geometry, geometry(@parent) ) )

This feature was developed by Matthias Kuhn


Feature: New expression variables

Adds @project_crs and @project_crs_definition variables
for retrieving the current project CRS


Feature: new global expression variable @qgis_locale

Returns current locale used by QGIS. By default this is current
system locale. If user enabled locale override in QGIS settings
overriden locale will be returned.

This feature was developed by Alexander Bruy


Feature: item_variables expression function inside compositions

This adds a new item_variables expression function when expressions
are used inside a composition context.

The function takes a single argument, the id for an item inside
the composition, and returns a map of variable name to value
for that item.

This allows you to do things like insert text in a label fetching
properties of another item in the composition, eg

Insert scale of map into a label:

map_get( item_variables( 'map'),'map_scale')

Insert x coordinate of map center into a label:

x(map_get( item_variables( 'map'),'map_extent_center'))

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: New expression variables for map settings

- map_crs, map_crs_definition: retrieves crs details for map
- map_units: retrieves units for map (eg 'meters','degrees')

This feature was funded by North Road

This feature was developed by Nyall Dawson (North Road)


Feature: Task manager

Introduces a framework for creating background tasks, which are interacted with through a centralised manager

Adds new classes:
- QgsTask. An interface for long-running background tasks
- QgsTaskManager. Handles groups of tasks - also available as a QgsApplication member  for tracking application wide tasks

Add simple python method QgsTask.fromFunction for creation of tasks     from a function without having to create a QgsTask subclass

Support for dependent tasks

Cancelling a task on which others depend leads to all these other
tasks getting cancelled as well.

Add handling of dependent layers to task manager

If a task has dependent layers which are about to be removed,
the task will automatically be cancelled

QgsTasks can have subtasks

Now, a QgsTask can have subtask QgsTasks set by calling
QgsTask::addSubTask. Sub tasks can have their own set of
dependent tasks.

Subtasks are not visible to users, and users only see the overall
progress and status of the parent task.

This allows creation of tasks which are themselves built off
many smaller component tasks. The task manager will still handle
firing up and scheduling the subtasks, so eg subtasks can run
in parallel (if their dependancies allow this).

Subtasks can themselves have subtasks.

This change is designed to allow the processing concept of
algorithms and modeller algorithms to be translatable
directly to the task manager architecture.

This feature was funded by QGIS Grant Program

This feature was developed by Nyall Dawson (North Road)


Feature: API to allow drag'n'drop of custom browser items

QgsDataItem implementations may provide hasDragEnabled(), mimeUri()
and QgsCustomDropHandler implementation to deal with drop of custom items.

This feature was developed by Martin Dobias


Feature: New expression functions

offset_curve
single_sided_buffer
- line_interpolate_point: interpolates a point by a given distance
along a linestring geometry
- line_locate_point: returns the distance along a linestring to
the closest position on the linestring to a given point
- angle_at_vertex: returns average (bisector) angle to a geometry at a specified vertex index
- distance_to_vertex: returns distance along geometry to a specified vertex index
- line_interpolate_angle: calculates the angle parallel to a geometry at the specified distance along the geometry
- simplify(): applies Douglas-Peucker geometry simplification
- simplify_vw(): applies Visvalingam-Whyatt geometry simplification
- smooth(): smooths a geometry
- extend() Extends linestrings by a specified amount at the start and end of the line
* is_selected() returns if the current feature is selected
* num_selected() returns the number of selected features on the current layer
* is_selected(layer, feature) returns if the "feature" is selected. "feature"
must be on "layer".
* num_selected(layer) returns the number of selected features on "layer"

array and map support for the replace() expression function
string_to_array() and array_to_string()
array_distinct()

ADD ALL new array, map expressions too!!

add regexp_matches() function
The new function returns an array of strings captured by capturing
groups in a supplied regular expression. For e.g., the following
expression: regexp_matches('qgis=>rocks','(.)=>(.)')
will return the following array: 'qgis', 'rocks'.

upgrade the substr() function
- support negative start value (e.g. substr('hello',-2) returns 'lo')
- support negative length value (e.g. substr('hello',3,-1) returns 'll')
- length parameter now optional, defaults to end of string
(e.g. substr('hello world',7) returns 'world')

- strpos() now relies on a simple string within a string search
- regexp_match() now returns pos of a matching regular expression

pole_of_inaccessibility - calculate the pole of inaccessibility for a surface, which is the
most distant internal point from the boundary of the surface

raster_statistic expression function for retrieving
raster band stats from a loaded layer Allows raster band stats (eg min, max, avg) to be used in
expressions

is_layer_visible


Comments
blog comments powered by Disqus