55 Commits

Author SHA1 Message Date
Alessandro Pasotti
bd3d75fce8 Indent on JSON export 2019-05-03 19:02:58 +02:00
Alessandro Pasotti
ba816459e1 Update tests 2019-05-02 10:16:00 +02:00
Alessandro Pasotti
8378eae0e5 Layout 2019-04-24 10:08:08 +02:00
Alessandro Pasotti
63711510b6 Dear Qt, I love you but ...
... you are too slow and QJson API is so ugly.

Now using this wonderful json lib:
https://github.com/nlohmann/json

Results in release mode (QJson tests are not shown but
QJson was even slower than string concat).

PASS   : TestQgsJsonUtils::testExportAttributesJson(Use json)
RESULT : TestQgsJsonUtils::testExportAttributesJson():"Use json":
     0.0022 msecs per iteration (total: 75, iterations: 32768)
PASS   : TestQgsJsonUtils::testExportAttributesJson(Use old string concat)
RESULT : TestQgsJsonUtils::testExportAttributesJson():"Use old string concat":
     0.0032 msecs per iteration (total: 54, iterations: 16384)
PASS   : TestQgsJsonUtils::testExportFeatureJson(Use json)
RESULT : TestQgsJsonUtils::testExportFeatureJson():"Use json":
     0.011 msecs per iteration (total: 96, iterations: 8192)
PASS   : TestQgsJsonUtils::testExportFeatureJson(Use old string concat)
RESULT : TestQgsJsonUtils::testExportFeatureJson():"Use old string concat":
     0.015 msecs per iteration (total: 64, iterations: 4096)
PASS   : TestQgsJsonUtils::testExportGeomToJson(Use json)
RESULT : TestQgsJsonUtils::testExportGeomToJson():"Use json":
     0.76 msecs per iteration (total: 98, iterations: 128)
PASS   : TestQgsJsonUtils::testExportGeomToJson(Use old string concat)
RESULT : TestQgsJsonUtils::testExportGeomToJson():"Use old string concat":
     0.85 msecs per iteration (total: 55, iterations: 64)
PASS   : TestQgsJsonUtils::cleanupTestCase()
2019-04-18 17:04:30 +02:00
Alessandro Pasotti
75537a4365 More 3d and use jsonobject attrs in exporter 2019-04-16 14:00:59 +02:00
Alessandro Pasotti
be8822ed8b Precision and 3d 2019-04-16 14:00:59 +02:00
Alessandro Pasotti
6967a21882 toJsonV2 2019-04-16 14:00:59 +02:00
Alessandro Pasotti
722282828e Use QJson for JSON encoding of features 2019-04-16 14:00:59 +02:00
Matthias Kuhn
398f7f27b8
More Q_FOREACH to range-based for loop conversion 2019-04-05 13:08:17 +02:00
Matthias Kuhn
6958b7a251
Massive Q_FOREACH to range-based-for conversion 2019-04-05 12:06:20 +02:00
Blottiere Paul
81a8bc01ec Small fix 2019-01-28 11:42:14 +00:00
Blottiere Paul
724813a52e GeoServer compatibility 2019-01-28 11:42:14 +00:00
Blottiere Paul
eee940dc8f Export aliases is an option 2019-01-28 11:42:14 +00:00
Blottiere Paul
f841681c06 Some cleaning 2019-01-28 11:42:14 +00:00
Blottiere Paul
5da6004b78 Update method's name and add doc 2019-01-28 11:42:14 +00:00
Blottiere Paul
f9eba37b10 Add layers tag and their names in exported json 2019-01-28 11:42:14 +00:00
Blottiere Paul
7e414b0677 Json exporter use the field's alias if necessary 2019-01-28 11:42:14 +00:00
Pierre-Eric Pelloux-Prayer
f1760ee56b Remove include "qgsapplication.h" from qgswkbptr.h
qgswkbptr.h is included indirectly by a large number of source files.
So this commit does the following:
  - remove #include "qgsapplication.h" from qgswkbptr.h, and copy-paste the swap_endian
    function where it's used.
  - add the missing #include "qgsapplication.h" in other files

The rationale for this change is:
  - qgswkbptr.h doesn't really needs QgsApplication, since it only used swap_endian.
    We don't need to add a fake dependency on QgsApplication on every (indirect) "includers"
    of qgswkbptr.h
 - qgsapplication.h depends on qgsconfig.h which itself changes quite often (on every git op
   at least). Before this change, a 'git commit' would trigger a rebuild of about 3500 files.
   With this change we're down to ~700.
2019-01-22 21:45:38 +01:00
Alessandro Pasotti
859b39a634 Fixes #20053 decimal separator in csv files
Actually it had nothing to do with CSV being the
source, but it was the json exporter passing
the values through all field formatters except for
the fallback.

This resulted in all fields using a 'Range' formatter
(which is the default for all numeric types) passing
through the formatter and being returned as strings
in the json. Worse, if the locale was not a "dot"
locale and decimal separator was on, the resulting
string could not be easily converted into its original
numeric type.

Now, instead of checking for the fallback formatter
only, there is a white list of formatters that
can be applied when we want a json.

This is a temporary solution because the "right" way
to do it would be either a flag in the formatter to
tell if it can be applied when converting to json
and/or other "data" formats (csv etc.) or a different
new method similar to representValue.
2018-10-09 11:03:06 +02:00
Denis Rouzaud
73528cd152
avoid detach when looping on fields and convert some Q_FOREACH (#7905)
* avoid detach when looping on fields and convert some Q_FOREACH

* fields already exist
2018-09-14 08:25:00 -08:00
Nyall Dawson
75885d70d5 Rename various WKT/WKB/GeoJSON/GML methods for consistency
and consistent capitalisation
2017-11-15 20:51:05 +10:00
Nyall Dawson
70361063d8 Rename QgsGeometry::geometry as QgsGeometry::get()
Because feature.geometry().geometry() is confusing, and impossible
to search for in python code (e.g. is input.geometry() a QgsGeometry
or a QgsAbstractGeometry?)

But more importantantly: also add a const version
QgsGeometry::constGet(). The non-const
version is slow, since it now forces a detach to avoid corrupting
geometries (since QgsGeometry is shared, it's not safe to directly
access its primitive QgsAbstractGeometry and start messing with
it without first detaching). This is a big risk in the 2.x API
which could potentially corrupt feature geometries with unexpected
outcomes.

Update all uses to constGet where possible.
2017-10-26 07:06:34 +10:00
Nyall Dawson
a87d352bd7 Run clang-tidy modernize-use-default-member-init to move member
initialization to headers (c++11 style)
2017-09-27 05:02:34 +10:00
Nyall Dawson
2a33844416 Pass by const ref where possible 2017-09-11 21:19:22 +10:00
Nyall Dawson
be5d2979b9 Fix some Clazy detaching container warnings
(not all are valid, but at worst this flips some more
Q_FOREACH uses to c++11 for loops)
2017-08-29 18:04:29 +10:00
Nyall Dawson
cbc9e03b9d Consolidate all QgsException subclasses in the same header 2017-06-23 12:08:54 +10:00
Nyall Dawson
5b0bc93834 Rename QgsJSONExporter/Utils to QgsJsonExporter/Utils
Follows proper QGIS/Qt capitalization convention
2017-05-25 07:43:03 +10:00
Nyall Dawson
4b33e2fb1c Small optimisations 2017-05-25 07:36:04 +10:00
Nyall Dawson
a5e3f1931b Use field formatter when exporting feature attributes to JSON
This means that field values which utilise widget setups like
value maps will correctly show the "friendly" value
for the field, instead of the raw values.
2017-05-25 07:29:53 +10:00
Nyall Dawson
987f80a4ce Use weak layer pointer instead of layer id in QgsJsonExporter 2017-05-25 07:29:53 +10:00
Denis Rouzaud
40c056cae0 run astyle on src/core 2017-03-03 09:09:37 +01:00
Nyall Dawson
49aae6e908 Rename QgsGeometry::isEmpty to isNull
Differentiates missing geometries from empty geometries (eg
empty geometry collections)
2017-01-30 21:58:23 +10:00
Martin Dobias
d56a97d4fe Merge QgsMapLayerRegistry into QgsProject
All methods/signals of QgsMapLayerRegistry moved verbatim to QgsProject.
2016-12-10 15:18:12 +08:00
Nyall Dawson
4166a3ea62 Fix most clazy qstring-unneeded-heap-allocations warnings
By flipping string literals to QStringLiteral/QLatin1String

see

https://woboq.com/blog/qstringliteral.html
2016-10-24 15:26:24 +10:00
Nyall Dawson
06cf59a4c2 Add missing references in Q_FOREACH loops 2016-10-22 22:46:17 +10:00
Nyall Dawson
fae8071a1e Fix clazy qstring-arg warnings
Avoid chained QString::arg() calls and instead use the multi-arg
overload to save memory allocations
2016-10-22 22:46:15 +10:00
Patrick Valsecchi
1a71ee5a00 Use the Qt5 JSON classes 2016-09-21 14:21:48 +02:00
Patrick Valsecchi
6260f9dea5 Add support for arrays in the spatialite provider
New versions of GDAL/OGR (since trunk@35289) convert list types (StringList,
IntegerList, Integer64List and RealList) to a JSON string when it stores a
Spatialite table. It sets the column type as JSONSTRINGLIST, JSONINTEGERLIST,
JSONINTEGER64LIST or JSONREALLIST.
2016-09-20 13:18:32 +02:00
Nyall Dawson
967d37adc7 QgsFeature::fields() returns a value, not a pointer
Also remove all other QgsFields pointers and replace with
references/values, since QgsFields objects are implicitly shared
2016-08-05 06:07:02 +10:00
Matthias Kuhn
bb79d13e82 Remove deprecated Qgis::WKBType and API cleanup (#3325)
* Remove deprecated Qgis::WKBType and API cleanup

Renames QgsWKBTypes to QgsWkbTypes

Replaces usage of the enums:

* Qgis::WKBType with QgsWkbTypes::Type
* Qgis::GeometryType with QgsWkbTypes::GeometryType

Their values should be forward compatible (a fact that was already
explited up to now by casting between the types)

Renames some SSLxxx to SslXxx and URIxxx to UriXxx

* Fix build warnings and simplify type handling

* Add a fixer to rewrite imports

* The forgotten rebase conflictThe forgotten rebase conflicts

* QgsDataSourcURI > QgsDataSourceUri

* QgsWKBTypes > QgsWkbTypes

* Qgis.WKBGeom > QgsWkbTypes.Geom

* Further python fixes

* Guess what... Qgis::wkbDimensions != QgsWkbTypes::wkbDimensions

* Fix tests

* Python 3 updates

* [travis] pull request caching cannot be disabled

so at least use it in r/w mode

* Fix python3 print in plugins
2016-08-04 09:10:08 +02:00
Nyall Dawson
bd7d913379 Refine QgsFeature geometry getters/setters
All pointer based methods have been removed.

Now we have only:

  void setGeometry( const QgsGeometry& geom )

and

  QgsGeometry geometry() const

Benefits include avoiding a whole lot of tricky pointer lifetime
issues, potential memory leaks, and finally closing #777, which
has survived for over 9 years!...

Impacts on PyQGIS code:
- no more need for the messy
  g = QgsGeometry( feature.geometry() )
  workaround, just use g = feature.geometry() instead
- IMPORTANT: you can no longer test whether a feature has geometry
 using `if f.geometry():`, since QgsFeature::geometry() will
 *always* return an object. Instead, use
 `if not f.geometry().isEmpty():`, or preferably the new method
 `if not f.hasGeometry():`

Fix #777
2016-08-01 16:25:46 +10:00
Nyall Dawson
c628c0f434 Rework includes to forward declare as much as possible
Should speed up recompilation when headers change
2016-07-18 19:10:19 +10:00
Nyall Dawson
ffa9b9b676 API breaks and cleanups for QgsCoordinateTransform
- isInitialised() has been renamed to isValid()
- theCRS parameter in setSourceCrs has been renamed to 'crs'
- setDestCRS() has been renamed to setDestinationCrs() for consistency
- destCRS() has been renamed to destinationCrs() for consistency
- theSource, theDest, theSourceSrsId, theDestSrsId, theSourceWkt,
theDestWkt, theSourceCRSType parameters in the QgsCoordinateTransform
constructors have been renamed to source, destination, sourceSrsId,
destinationSrsId, sourceWkt, destinationWkt, sourceCrsType respectively
- 'p' argument in transform() has been renamed to 'point', 'theRect' to
'rectangle', 'poly' to 'polygon'
- setDestCRSID has been removed, use setDestinationCrs() instead
- 'theNode', 'theDoc' parameters in readXML and writeXML have been
renamed to 'node' and 'document' respectively
- readXML() and writeXML() have been renamed to readXml() and writeXml()
for consistency
2016-07-16 16:33:04 +10:00
Nyall Dawson
7d2027faa9 Fix most remaining methods which return a reference to
QgsCoordinateReferenceSystem or which take a pointer to a
CRS
2016-07-15 06:01:39 +10:00
Nyall Dawson
718c5fde2e Catch errors when reprojecting for GeoJSON export 2016-05-09 21:19:28 +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
Nyall Dawson
34d468e64b Allow setting list of attributes to exclude from json exports 2016-05-09 21:19:28 +10:00