23 #include <QJsonObject> 24 #include <nlohmann/json.hpp> 33 return QStringLiteral(
"MultiPoint" );
38 auto result = qgis::make_unique< QgsMultiPoint >();
40 return result.release();
55 QString collectionWkt( wkt );
57 QRegExp regex(
"^\\s*MultiPoint\\s*[ZM]*\\s*\\(\\s*[-\\d]" );
58 regex.setCaseSensitivity( Qt::CaseInsensitive );
59 if ( regex.indexIn( collectionWkt ) >= 0 )
62 collectionWkt.replace(
'(', QLatin1String(
"((" ) ).replace(
')', QLatin1String(
"))" ) ).replace(
',', QLatin1String(
"),(" ) );
76 QDomElement elemMultiPoint = doc.createElementNS( ns, QStringLiteral(
"MultiPoint" ) );
79 return elemMultiPoint;
83 if ( qgsgeometry_cast<const QgsPoint *>( geom ) )
85 QDomElement elemPointMember = doc.createElementNS( ns, QStringLiteral(
"pointMember" ) );
86 elemPointMember.appendChild( geom->asGml2( doc, precision, ns, axisOrder ) );
87 elemMultiPoint.appendChild( elemPointMember );
91 return elemMultiPoint;
96 QDomElement elemMultiPoint = doc.createElementNS( ns, QStringLiteral(
"MultiPoint" ) );
99 return elemMultiPoint;
103 if ( qgsgeometry_cast<const QgsPoint *>( geom ) )
105 QDomElement elemPointMember = doc.createElementNS( ns, QStringLiteral(
"pointMember" ) );
106 elemPointMember.appendChild( geom->asGml3( doc, precision, ns, axisOrder ) );
107 elemMultiPoint.appendChild( elemPointMember );
111 return elemMultiPoint;
118 {
"type",
"MultiPoint" },
119 {
"coordinates", json::array() },
140 if ( !qgsgeometry_cast<QgsPoint *>( g ) )
179 if (
id.part < 0 || id.part >=
mGeometries.count() ||
id.vertex != 0 ||
id.ring != 0 )
200 if (
const QgsPoint *point = qgsgeometry_cast< const QgsPoint * >( part ) )
202 if ( !filter( *point ) )
bool fromWkt(const QString &wkt) override
Sets the geometry from a WKT string.
bool isMeasure() const
Returns true if the geometry contains m values.
QgsMultiPoint * clone() const override
Clones the geometry by performing a deep copy.
void clear() override
Clears the geometry, ie reset it to a null geometry.
bool insertGeometry(QgsAbstractGeometry *g, int index) override
Inserts a geometry before a specified index and takes ownership.
void filterVertices(const std::function< bool(const QgsPoint &) > &filter) override
Filters the vertices from the geometry in place, removing any which do not return true for the filter...
Multi point geometry collection.
QgsAbstractGeometry * boundary() const override
Returns the closure of the combinatorial boundary of the geometry (ie the topological boundary of the...
bool isValid(QString &error, int flags=0) const override
Checks validity of the geometry, and returns true if the geometry is valid.
virtual bool addMValue(double mValue=0)=0
Adds a measure to the geometry, initialized to a preset value.
QgsWkbTypes::Type mWkbType
virtual bool insertGeometry(QgsAbstractGeometry *g, int index)
Inserts a geometry before a specified index and takes ownership.
bool isEmpty() const override
Returns true if the geometry is empty.
QDomElement asGml3(QDomDocument &doc, int precision=17, const QString &ns="gml", QgsAbstractGeometry::AxisOrder axisOrder=QgsAbstractGeometry::AxisOrder::XY) const override
Returns a GML3 representation of the geometry.
Utility class for identifying a unique vertex within a geometry.
void setZMTypeFromSubGeometry(const QgsAbstractGeometry *subggeom, QgsWkbTypes::Type baseGeomType)
Updates the geometry type based on whether sub geometries contain z or m values.
Abstract base class for all geometries.
QgsWkbTypes::Type wkbType() const
Returns the WKB type of the geometry.
Point geometry type, with support for z-dimension and m-values.
bool fromCollectionWkt(const QString &wkt, const QVector< QgsAbstractGeometry *> &subtypes, const QString &defaultChildWkbType=QString())
Reads a collection from a WKT string.
AxisOrder
Axis order for GML generation.
QgsMultiPoint * toCurveType() const override
Returns the geometry converted to the more generic curve type.
bool addGeometry(QgsAbstractGeometry *g) override
Adds a geometry and takes ownership. Returns true in case of success.
QVector< QgsAbstractGeometry *> mGeometries
double qgsRound(double number, int places)
Returns a double number, rounded (as close as possible) to the specified number of places...
virtual bool addZValue(double zValue=0)=0
Adds a z-dimension to the geometry, initialized to a preset value.
int vertexNumberFromVertexId(QgsVertexId id) const override
Returns the vertex number corresponding to a vertex id.
double segmentLength(QgsVertexId startVertex) const override
Returns the length of the segment of the geometry which begins at startVertex.
bool wktOmitChildType() const override
Returns whether child type names are omitted from Wkt representations of the collection.
QgsMultiPoint * createEmptyWithSameType() const override
Creates a new geometry with the same class and same WKB type as the original and transfers ownership...
json asJsonObject(int precision=17) const override
Returns a json object representation of the geometry.
virtual bool dropMValue()=0
Drops any measure values which exist in the geometry.
QString geometryType() const override
Returns a unique string representing the geometry type.
int nCoordinates() const override
Returns the number of nodes contained in the geometry.
static Type flatType(Type type)
Returns the flat type for a WKB type.
bool is3D() const
Returns true if the geometry is 3D and contains a z-value.
virtual bool dropZValue()=0
Drops any z-dimensions which exist in the geometry.
QDomElement asGml2(QDomDocument &doc, int precision=17, const QString &ns="gml", QgsAbstractGeometry::AxisOrder axisOrder=QgsAbstractGeometry::AxisOrder::XY) const override
Returns a GML2 representation of the geometry.
virtual bool addGeometry(QgsAbstractGeometry *g)
Adds a geometry and takes ownership. Returns true in case of success.
void clear() override
Clears the geometry, ie reset it to a null geometry.