/usr/include/qgis/qgsjsonutils.h is in libqgis-dev 2.18.17+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 | /***************************************************************************
qgsjsonutils.h
-------------
Date : May 206
Copyright : (C) 2016 Nyall Dawson
Email : nyall dot dawson at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSJSONUTILS_H
#define QGSJSONUTILS_H
#include "qgsfeature.h"
#include "qgscoordinatereferencesystem.h"
#include "qgscoordinatetransform.h"
class QTextCodec;
class QgsVectorLayer;
/** \ingroup core
* \class QgsJSONExporter
* \brief Handles exporting QgsFeature features to GeoJSON features.
*
* Note that geometries will be automatically reprojected to WGS84 to match GeoJSON spec
* if either the source vector layer or source CRS is set.
* \note Added in version 2.16
*/
class CORE_EXPORT QgsJSONExporter
{
public:
/** Constructor for QgsJSONExporter.
* @param vectorLayer associated vector layer (required for related attribute export)
* @param precision maximum number of decimal places to use for geometry coordinates,
* the RFC 7946 GeoJSON specification recommends limiting coordinate precision to 6
*/
QgsJSONExporter( const QgsVectorLayer* vectorLayer = nullptr, int precision = 6 );
/** Sets the maximum number of decimal places to use in geometry coordinates.
* The RFC 7946 GeoJSON specification recommends limiting coordinate precision to 6
* @param precision number of decimal places
* @see precision()
*/
void setPrecision( int precision ) { mPrecision = precision; }
/** Returns the maximum number of decimal places to use in geometry coordinates.
* @see setPrecision()
*/
int precision() const { return mPrecision; }
/** Sets whether to include geometry in the JSON exports.
* @param includeGeometry set to false to prevent geometry inclusion
* @see includeGeometry()
*/
void setIncludeGeometry( bool includeGeometry ) { mIncludeGeometry = includeGeometry; }
/** Returns whether geometry will be included in the JSON exports.
* @see setIncludeGeometry()
*/
bool includeGeometry() const { return mIncludeGeometry; }
/** Sets whether to include attributes in the JSON exports.
* @param includeAttributes set to false to prevent attribute inclusion
* @see includeAttributes()
*/
void setIncludeAttributes( bool includeAttributes ) { mIncludeAttributes = includeAttributes; }
/** Returns whether attributes will be included in the JSON exports.
* @see setIncludeAttributes()
*/
bool includeAttributes() const { return mIncludeAttributes; }
/** Sets whether to include attributes of features linked via references in the JSON exports.
* @param includeRelated set to true to include attributes for any related child features
* within the exported properties element.
* @note associated vector layer must be set with setVectorLayer()
* @see includeRelated()
*/
void setIncludeRelated( bool includeRelated ) { mIncludeRelatedAttributes = includeRelated; }
/** Returns whether attributes of related (child) features will be included in the JSON exports.
* @see setIncludeRelated()
*/
bool includeRelated() const { return mIncludeRelatedAttributes; }
/** Sets the associated vector layer (required for related attribute export). This will automatically
* update the sourceCrs() to match.
* @param vectorLayer vector layer
* @see vectorLayer()
*/
void setVectorLayer( const QgsVectorLayer* vectorLayer );
/** Returns the associated vector layer, if set.
* @see setVectorLayer()
*/
QgsVectorLayer* vectorLayer() const;
/** Sets the source CRS for feature geometries. The source CRS must be set if geometries are to be
* correctly automatically reprojected to WGS 84, to match GeoJSON specifications.
* @param crs source CRS for input feature geometries
* @note the source CRS will be overwritten when a vector layer is specified via setVectorLayer()
* @see sourceCrs()
*/
void setSourceCrs( const QgsCoordinateReferenceSystem& crs );
/** Returns the source CRS for feature geometries. The source CRS must be set if geometries are to be
* correctly automatically reprojected to WGS 84, to match GeoJSON specifications.
* @see setSourceCrs()
*/
const QgsCoordinateReferenceSystem& sourceCrs() const;
/** Sets the list of attributes to include in the JSON exports.
* @param attributes list of attribute indexes, or an empty list to include all
* attributes
* @see attributes()
* @see setExcludedAttributes()
* @note Attributes excluded via setExcludedAttributes() take precedence over
* attributes specified by this method.
*/
void setAttributes( const QgsAttributeList& attributes ) { mAttributeIndexes = attributes; }
/** Returns the list of attributes which will be included in the JSON exports, or
* an empty list if all attributes will be included.
* @see setAttributes()
* @see excludedAttributes()
* @note Attributes excluded via excludedAttributes() take precedence over
* attributes returned by this method.
*/
QgsAttributeList attributes() const { return mAttributeIndexes; }
/** Sets a list of attributes to specifically exclude from the JSON exports. Excluded attributes
* take precedence over attributes included via setAttributes().
* @param attributes list of attribute indexes to exclude
* @see excludedAttributes()
* @see setAttributes()
*/
void setExcludedAttributes( const QgsAttributeList& attributes ) { mExcludedAttributeIndexes = attributes; }
/** Returns a list of attributes which will be specifically excluded from the JSON exports. Excluded attributes
* take precedence over attributes included via attributes().
* @see setExcludedAttributes()
* @see attributes()
*/
QgsAttributeList excludedAttributes() const { return mExcludedAttributeIndexes; }
/** Returns a GeoJSON string representation of a feature.
* @param feature feature to convert
* @param extraProperties map of extra attributes to include in feature's properties
* @param id optional ID to use as GeoJSON feature's ID instead of input feature's ID. If omitted, feature's
* ID is used.
* @returns GeoJSON string
* @see exportFeatures()
*/
QString exportFeature( const QgsFeature& feature,
const QVariantMap& extraProperties = QVariantMap(),
const QVariant& id = QVariant() ) const;
/** Returns a GeoJSON string representation of a list of features (feature collection).
* @param features features to convert
* @returns GeoJSON string
* @see exportFeature()
*/
QString exportFeatures( const QgsFeatureList& features ) const;
private:
//! Maximum number of decimal places for geometry coordinates
int mPrecision;
//! List of attribute indexes to include in export, or empty list to include all attributes
//! @see mExcludedAttributeIndexes
QgsAttributeList mAttributeIndexes;
//! List of attribute indexes to exclude from export
QgsAttributeList mExcludedAttributeIndexes;
//! Whether to include geometry in JSON export
bool mIncludeGeometry;
//! Whether to include attributes in JSON export
bool mIncludeAttributes;
//! Whether to include attributes from related features in JSON export
bool mIncludeRelatedAttributes;
//! Layer ID of associated vector layer. Required for related attribute export.
QString mLayerId;
QgsCoordinateReferenceSystem mCrs;
QgsCoordinateTransform mTransform;
};
/** \ingroup core
* \class QgsJSONUtils
* \brief Helper utilities for working with JSON and GeoJSON conversions.
* \note Added in version 2.16
*/
class CORE_EXPORT QgsJSONUtils
{
public:
/** Attempts to parse a GeoJSON string to a collection of features.
* @param string GeoJSON string to parse
* @param fields fields collection to use for parsed features
* @param encoding text encoding
* @returns list of parsed features, or an empty list if no features could be parsed
* @see stringToFields()
* @note this function is a wrapper around QgsOgrUtils::stringToFeatureList()
*/
static QgsFeatureList stringToFeatureList( const QString& string, const QgsFields& fields, QTextCodec* encoding );
/** Attempts to retrieve the fields from a GeoJSON string representing a collection of features.
* @param string GeoJSON string to parse
* @param encoding text encoding
* @returns retrieved fields collection, or an empty list if no fields could be determined from the string
* @see stringToFeatureList()
* @note this function is a wrapper around QgsOgrUtils::stringToFields()
*/
static QgsFields stringToFields( const QString& string, QTextCodec* encoding );
/** Encodes a value to a JSON string representation, adding appropriate quotations and escaping
* where required.
* @param value value to encode
* @returns encoded value
*/
static QString encodeValue( const QVariant& value );
/** Exports all attributes from a QgsFeature as a JSON map type.
* @param feature feature to export
*/
static QString exportAttributes( const QgsFeature& feature );
};
#endif // QGSJSONUTILS_H
|