2291 Commits

Author SHA1 Message Date
Martin Dobias
7eb05e2c3c Fix composer map tests 2016-05-17 12:52:32 +08:00
Nyall Dawson
307aabd66a [FEATURE] Aggregates for expressions
This commit adds a number of different forms of aggregates to
the expression engine.

1. Aggregates within the current layer, eg sum("passengers")
Supports sub expressions (ie sum("passengers"/2) ), group by
( sum("passengers", group_by:="line_segment") ), and optional
filters ( sum("passengers", filter:= "station_class" > 3 ) )

2. Relational aggregates, which calculate an aggregate over
all matching child features from a relation, eg
relation_aggregate( 'my_relation', 'mean', "some_child_field" )

3. A summary aggregate function, for calculating aggregates
on other layers. Eg aggregate('rail_station_layer','sum',"passengers")
The summary aggregate function supports an optional filter,
making it possible to calculate things like:

aggregate('rail_stations','sum',"passengers",
  intersects(@atlas_geometry, $geometry ) )

for calculating the total number of passengers for the stations
inside the current atlas feature

In all cases the calculations are cached inside the expression
context, so they only need to be calculated once for each
set of expression evaluations.

Sponsored by Kanton of Zug, Switzerland
2016-05-17 10:53:25 +10:00
Nyall Dawson
ea066599a1 [relations] Add method to manager to retrieve relations by name
Also
- Begin unit tests for QgsRelationManager
- Make project optional when constructing QgsRelationManager
2016-05-17 10:53:25 +10:00
Nyall Dawson
84fc3c3b3d Implement method for caching values within expression contexts
Can be used to store the results of expensive sub-expression
calculations (eg layer aggregates), so that future expression
evaluation using the same context does not have to recalculate
the cached values.
2016-05-17 10:53:24 +10:00
Nyall Dawson
821134ca91 Add method to convert string to aggregate type 2016-05-17 10:53:24 +10:00
Nyall Dawson
dcc047af49 Add possibility to handle aggregate calculation at data provider
(not implemented for any providers yet)
2016-05-17 10:53:24 +10:00
Nyall Dawson
50e41c8133 New utility class QgsAggregateCalculator, simplifies calculating
aggregates from vector layer fields and expressions
2016-05-17 10:53:24 +10:00
Nyall Dawson
1c45b940a8 Add calculation of number of null values to QgsStatisticalSummary 2016-05-17 10:53:04 +10:00
Nyall Dawson
4dea723cae Add methods to stats calculators to accept values one at a time
This can be more efficient for large quantities of values, since
it avoids the need to create a list of all values in advance
2016-05-17 10:52:06 +10:00
Juergen E. Fischer
c198b1afe9 indentation fix 2016-05-16 16:59:29 +02:00
Nyall Dawson
858914eef5 Ensure that providers fetch geometry for a QgsFeatureRequest
with an expression filter which requires geometry
2016-05-16 23:09:18 +10:00
Juergen E. Fischer
b514f521e6 cppcheck fixes 2016-05-16 14:14:14 +02:00
Matthias Kuhn
ee533a7dea Add test for attribute table sorting 2016-05-16 11:16:13 +02:00
Nyall Dawson
5c7f4c7664 Merge pull request #3072 from rouault/qt5_fix_testqgsfield
Make qgis_fieldtest all Qt 5.X compatible
2016-05-16 07:04:43 +10:00
Even Rouault
c4819adea4 Merge remote-tracking branch 'rouault/fix_qt5_wfs_ogcutils_tests' 2016-05-15 21:30:56 +02:00
Even Rouault
202420c70a Make qgis_fieldtest all Qt 5.X compatible
In https://codereview.qt-project.org/#/c/99815/ implemented in QT 5.5,
doubles are converted to strings using '%.17g', so short decimal values
might be expanded to long strings depending on their values.
https://wiki.qt.io/New_Features_in_Qt_5.7 has a logic to avoid this, but
if we select carefully the double to have both an exact binary and decimal
representation, that can work will all versions.

$ python -c "print('%.17g' % 9.7)"
9.6999999999999993

$ python -c "print('%.17g' % 1.25)"
1.25
2016-05-15 19:44:13 +02:00
Even Rouault
9a49c6aace Make ogcutils and WFS tests Qt 5 compatible 2016-05-15 19:17:58 +02:00
Nyall Dawson
a3d6227e2e Avoid detaching temporary containers 2016-05-15 20:50:44 +10:00
Nyall Dawson
57d114e2e2 Update test masks for Qt5, enable labeling tests 2016-05-15 20:38:38 +10:00
Even Rouault
abd182c50c Merge pull request #3061 from rouault/saveas_human_readable_values
[FEATURE] Export vector layer with "human-readable" values from edit widgets
2016-05-14 14:23:10 +02:00
Even Rouault
90cc0ed495 QgsVectorLayerSaveAsDialog: add checkboxes to decide which fields should be exported with their displayed values, and bind it in QgisApp with QgsVectorFileWriter 2016-05-14 12:33:10 +02:00
Even Rouault
038b3b7950 QgsVectorFileWriter: add capability to export displayed values of fields (typically coming from edit widgets) instead of their raw values 2016-05-14 12:33:10 +02:00
Matthias Kuhn
10134587ed Add note for failing Qt5 test 2016-05-14 00:38:19 +02:00
Matthias Kuhn
af1de6e3e0 Migrate more tests to Python3 2016-05-14 00:02:20 +02:00
Matthias Kuhn
7dfc69657f Migrate provider test to python 3 2016-05-13 22:23:03 +02:00
Even Rouault
8259b3fcc9 QgsSQLStatement::quotedIdentifierIfNeeded(): make it quote SQL reserved keywords 2016-05-12 23:24:39 +02:00
Even Rouault
84a797ea86 [FEATURE] [WFS provider] Add support for WFS 2.0 joins and other improvements
Second part of qgis/QGIS-Enhancement-Proposals#53
(QEP 35: WFS provider enhancements)

- URI parameter with sql with SELECT / FROM / JOIN / WHERE / ORDER BY clauses
- handle WFS 2.0 joins
- handle DateTime fields
- enable "Only request features overlapping the view extent" by default (and memorize the settings)
- rework DescribeFeatureType parsing to handle responses with several documents, and some support for attribute types being complexType
- rework feature transfer between downloader and iterator so as to avoid uncontrolled RAM usage when the iterator cannot keep up with the downloader
- turn on WAL journaling for better reader / writer concurrency
- add retry logic based on the 'Max retry in case of tile request errors' setting (renamed 'Max retry in case of tile or feature request errors')
- error to MessageBar in case of failed download
- in progress dialog, add a "Hide" button to mask the dialog
- improve automated testing
- add testing of the GUI of QgsWFSSourceSelect
2016-05-12 23:24:39 +02:00
Even Rouault
1da1c278e7 QgsOgcUtils: add conversion from QgsSQLStatement to OGC filters 2016-05-12 23:24:39 +02:00
Even Rouault
84129604a9 Add a QgsSQLComposerDialog GUI to edit QgsSQLStatement 2016-05-12 23:24:39 +02:00
Even Rouault
9df19e0133 Add QgsSQLStatement class to parse SELECT statements 2016-05-12 23:24:39 +02:00
Even Rouault
12a630f050 QgsGML: extend to be able to parse WFS 2.0 GetFeature response with join layers
And also fix handling srsDimension=3 on main GML geometry objects and not only posList
2016-05-12 23:23:44 +02:00
Even Rouault
b38a16fe2e Implement representValue() for Relation Reference widget 2016-05-12 19:52:26 +02:00
Nyall Dawson
79f3d4221b Add equality operator for gradients, ensure stops are always in order 2016-05-12 20:55:27 +10:00
Nyall Dawson
b053ad8769 New class QgsDateTimeStatisticalSummary
Calculates summary statistics on lists of datetime values, such
as count, count distinct, min, max and range
2016-05-11 23:02:33 +10:00
Nyall Dawson
5177d93b5a Add time field filter option for QgsFieldComboWidget (also add docs) 2016-05-11 11:59:39 +10:00
Nyall Dawson
b4029dc7f0 Fix datetime fields not shown in QgsFieldComboWidget when set to date filter 2016-05-11 11:59:39 +10:00
Nyall Dawson
0f6838df2a Merge pull request #3034 from rouault/ogr_concurrent_opening
[BUGFIX / FEATURE] [OGR] Allow concurrent edition of Shapefiles and Tabfiles in QGIS & MapInfo
2016-05-11 05:07:57 +10:00
Nyall Dawson
7ae80b106d Fix sip bindings for QgsStringStatisticalSummary 2016-05-10 20:14:51 +10:00
Marco Hugentobler
daabda8ca7 Add test to make sure the curve point is part of the segmented result 2016-05-10 11:53:06 +02:00
Nyall Dawson
0493cbfc21 New class QgsStringStatisticalSummary, for calculating statistics
on lists of strings
2016-05-10 19:06:13 +10:00
Nyall Dawson
ceba5264f7 New class QgsInterval for storing durations between datetimes
Move the QgsExpression::Interval class out to its own QgsInterval
class, extend with new methods and add tests

Add a typedef to keep API compatibility for 2.16
2016-05-10 19:00:33 +10:00
Nyall Dawson
3340d8ea70 Fix feature fields does not include virtual or joined fields when
feature is requested using a QgsFeatureRequest with FilterFid
2016-05-10 17:04:37 +10:00
Nyall Dawson
56783c915e Merge pull request #3051 from nyalldawson/cad_fixes
Improvements and fixes to advanced digitising dock
2016-05-09 21:38:37 +10:00
Nyall Dawson
81e72b782f Merge pull request #3060 from nyalldawson/filled_marker
New "Filled marker" symbol layer type
2016-05-09 21:23:59 +10:00
Nyall Dawson
794ab065dc [FEATURE] Embed atlas feature into composer HTML source as GeoJSON
This change makes the current atlas feature (and additionally all
attributes of related child features) available to the source of
a composer HTML item, allowing the item to dynamically adjust
its rendered HTML in response to the feature's properties. An
example use case is dynamically populating a HTML table with
all the attributes of related child features for the atlas
feature.

To use this, the HTML source must implement a "setFeature(feature)"
JavaScript function. This function is called whenever the atlas
feature changes, and is passed the atlas feature (+related attributes)
as a GeoJSON Feature.

Sponsored by Kanton of Zug, Switzerland
2016-05-09 21:19:29 +10:00
Nyall Dawson
c3d6c796f4 [FEATURE] Allow copying features from QGIS in GeoJSON format
The previous setting for include WKT when copying features has been
replaced with a choice of copying features as "Plain text, attributes
only", "Plain text, WKT geometry" and a new "GeoJSON" option.

When set to "GeoJSON", copying features in QGIS will place a GeoJSON
text representation of the features on the clipboard for easy
pasting into other applications/javascript code.

Sponsored by North Road
2016-05-09 21:19:29 +10:00
Nyall Dawson
ca2c6290b1 Always export GeoJSON features in WGS84 (match specifications) 2016-05-09 21:19:28 +10:00
Nyall Dawson
55793a4534 Always create valid GeoJSON (both geometry and properties members
are required
2016-05-09 21:19:28 +10:00
Nyall Dawson
3681e2ceeb Add method for exporting QgsFeatureList to GeoJSON featurecollection 2016-05-09 21:19:28 +10:00
Nyall Dawson
5c1a05c8a1 Support including attributes of related (child) features in
GeoJSON feature export

Sponsored by Kanton of Zug, Switzerland
2016-05-09 21:19:28 +10:00