-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathqgsvctprovider.h
More file actions
141 lines (112 loc) · 4.27 KB
/
Copy pathqgsvctprovider.h
File metadata and controls
141 lines (112 loc) · 4.27 KB
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
#pragma once
#include "qgsvctprovider_global.h"
#include "qgsvectordataprovider.h"
#include "qgscoordinatereferencesystem.h"
#include "qgsfields.h"
#include "qgsspatialindex.h"
#include "qgsprovidermetadata.h"
#include "QTextStream"
typedef QMap<QgsFeatureId, QgsFeature> QgsFeatureMap;
class QgsFeature;
class QgsField;
class QgsGeometry;
class QgsPointXY;
class QFile;
class QTextStream;
class QgsVctFeatureIterator;
class QgsExpression;
class QgsSpatialIndex;
class QGSVCTPROVIDER_EXPORT QgsVctProvider final: public QgsVectorDataProvider
{
Q_OBJECT
public:
static const QString VCT_PROVIDER_KEY;
static const QString VCT_PROVIDER_DESCRIPTION;
explicit QgsVctProvider(const QString &uri, const QgsDataProvider::ProviderOptions &providerOptions);
~QgsVctProvider() override;
/* Implementation of functions from QgsVectorDataProvider */
QgsAbstractFeatureSource *featureSource() const override;
QString storageType() const override;
QgsFeatureIterator getFeatures(const QgsFeatureRequest &request) const override;
QgsWkbTypes::Type wkbType() const override;
long featureCount() const override;
QgsFields fields() const override;
QgsVectorDataProvider::Capabilities capabilities() const override;
bool createSpatialIndex() override;
QgsFeatureSource::SpatialIndexPresence hasSpatialIndex() const override;
QString name() const override;
QString description() const override;
QgsRectangle extent() const override;
bool isValid() const override;
QgsCoordinateReferenceSystem crs() const override;
bool setSubsetString(const QString &subset, bool updateFeatureCount = true) override;
bool supportsSubsetString() const override { return false; }
QString subsetString() const override
{
return mSubsetString;
}
QString dataComment() const override;
bool addFeatures(QgsFeatureList &flist, QgsFeatureSink::Flags flags = nullptr) override;
bool deleteFeatures(const QgsFeatureIds &id) override;
bool addAttributes(const QList<QgsField> &attributes) override;
bool renameAttributes(const QgsFieldNameMap &renamedAttributes) override;
bool deleteAttributes(const QgsAttributeIds &attributes) override;
bool changeAttributeValues(const QgsChangedAttributesMap &attr_map) override;
bool changeGeometryValues(const QgsGeometryMap &geometry_map) override;
void updateExtents() override;
private:
QString mSubsetString;
bool mLayerValid = false;
int mNextFeatureId = 0;
//Vct file writing functions
void writeData();
//Vct file reading functions
QString mUri;
void readData(QString uri);
void readComment(QTextStream &stream);
void readHead(QTextStream &stream);
void readFeatureCode(QTextStream &stream);
void readTableStructure(QTextStream &stream);
void readPoint(QTextStream &stream);
void readLine(QTextStream &stream);
void readPolygon(QTextStream &stream);
void readSolid(QTextStream &stream);
void readAggregation(QTextStream &stream);
void readAnnotation(QTextStream &stream);
void readTopology(QTextStream &stream);
void readAttribute(QTextStream &stream);
void readStyle(QTextStream &stream);
//注释
QStringList mComments;
//文件头
QgsCoordinateReferenceSystem mCrs;
mutable QgsRectangle mExtent;
QVector<QString> mHead;
//要素类型参数
QString mFeatureTypeCode;//要素类型编码
QString mFeatureTypeName;//要素类型名称
QString mAttributeTableName;//属性表名
QgsWkbTypes::Type mWkbType = QgsWkbTypes::NoGeometry;
QgsWkbTypes::GeometryType mGeometryType = QgsWkbTypes::UnknownGeometry;
QVector<QString> mCustomItems;//用户自定义项
//属性数据结构
QgsFields mFields;
//Features
QgsFeatureMap mFeatures;
//std::unique_ptr< QgsExpression > mSubsetExpression;
//Spatial index
QgsSpatialIndex *mSpatialIndex = nullptr;
/*mutable QList<quintptr> mSubsetIndex;
mutable bool mUseSubsetIndex = false;
mutable bool mCachedUseSubsetIndex;*/
friend class QgsVctFeatureIterator;
friend class QgsVctFeatureSource;
};
class QgsVctProviderMetadata final : public QgsProviderMetadata
{
public:
QgsVctProviderMetadata();
QgsDataProvider *createProvider(const QString &uri, const QgsDataProvider::ProviderOptions &options) override;
QVariantMap decodeUri(const QString &uri) override;
QString encodeUri(const QVariantMap &parts) override;
};