51 wkbPtr -= 1 +
sizeof( int );
59 geom->fromWkb( wkbPtr );
74 const QString trimmed = text.trimmed();
75 std::unique_ptr< QgsAbstractGeometry> geom;
76 if ( trimmed.startsWith( QLatin1String(
"Point" ), Qt::CaseInsensitive ) )
78 geom = std::make_unique< QgsPoint >();
80 else if ( trimmed.startsWith( QLatin1String(
"LineString" ), Qt::CaseInsensitive ) )
82 geom = std::make_unique< QgsLineString >();
84 else if ( trimmed.startsWith( QLatin1String(
"CircularString" ), Qt::CaseInsensitive ) )
86 geom = std::make_unique< QgsCircularString >();
88 else if ( trimmed.startsWith( QLatin1String(
"CompoundCurve" ), Qt::CaseInsensitive ) )
90 geom = std::make_unique< QgsCompoundCurve>();
92 else if ( trimmed.startsWith( QLatin1String(
"Polygon" ), Qt::CaseInsensitive ) )
94 geom = std::make_unique< QgsPolygon >();
96 else if ( trimmed.startsWith( QLatin1String(
"Triangle" ), Qt::CaseInsensitive ) )
98 geom = std::make_unique< QgsTriangle >();
100 else if ( trimmed.startsWith( QLatin1String(
"CurvePolygon" ), Qt::CaseInsensitive ) )
102 geom = std::make_unique< QgsCurvePolygon >();
104 else if ( trimmed.startsWith( QLatin1String(
"MultiPoint" ), Qt::CaseInsensitive ) )
106 geom = std::make_unique< QgsMultiPoint >();
108 else if ( trimmed.startsWith( QLatin1String(
"MultiCurve" ), Qt::CaseInsensitive ) )
110 geom = std::make_unique< QgsMultiCurve >();
112 else if ( trimmed.startsWith( QLatin1String(
"MultiLineString" ), Qt::CaseInsensitive ) )
114 geom = std::make_unique< QgsMultiLineString >();
116 else if ( trimmed.startsWith( QLatin1String(
"MultiSurface" ), Qt::CaseInsensitive ) )
118 geom = std::make_unique< QgsMultiSurface >();
120 else if ( trimmed.startsWith( QLatin1String(
"MultiPolygon" ), Qt::CaseInsensitive ) )
122 geom = std::make_unique< QgsMultiPolygon >();
124 else if ( trimmed.startsWith( QLatin1String(
"GeometryCollection" ), Qt::CaseInsensitive ) )
126 geom = std::make_unique< QgsGeometryCollection >();
131 if ( !geom->fromWkt( text ) )
141 return std::make_unique< QgsPoint >( point.
x(), point.
y() );
146 std::unique_ptr< QgsMultiPoint > mp = std::make_unique< QgsMultiPoint >();
147 QgsMultiPointXY::const_iterator ptIt = multipoint.constBegin();
148 mp->reserve( multipoint.size() );
149 for ( ; ptIt != multipoint.constEnd(); ++ptIt )
152 mp->addGeometry( pt );
159 return linestringFromPolyline( polyline );
164 std::unique_ptr< QgsMultiLineString > mLine = std::make_unique< QgsMultiLineString >();
165 mLine->reserve( multiline.size() );
166 for (
int i = 0; i < multiline.size(); ++i )
168 mLine->addGeometry(
fromPolylineXY( multiline.at( i ) ).release() );
175 std::unique_ptr< QgsPolygon > poly = std::make_unique< QgsPolygon >();
177 QVector<QgsCurve *> holes;
178 holes.reserve( polygon.size() );
179 for (
int i = 0; i < polygon.size(); ++i )
181 std::unique_ptr< QgsLineString > l = linestringFromPolyline( polygon.at( i ) );
186 poly->setExteriorRing( l.release() );
190 holes.push_back( l.release() );
193 poly->setInteriorRings( holes );
199 std::unique_ptr< QgsMultiPolygon > mp = std::make_unique< QgsMultiPolygon >();
200 mp->reserve( multipoly.size() );
201 for (
int i = 0; i < multipoly.size(); ++i )
203 mp->addGeometry(
fromPolygonXY( multipoly.at( i ) ).release() );
208 std::unique_ptr<QgsLineString> QgsGeometryFactory::linestringFromPolyline(
const QgsPolylineXY &polyline )
210 const int size = polyline.size();
215 double *destX = x.data();
216 double *destY = y.data();
218 for (
int i = 0; i < size; ++i )
224 std::unique_ptr< QgsLineString > line = std::make_unique< QgsLineString >( x, y );
234 return std::make_unique< QgsPoint >();
236 return std::make_unique< QgsLineString >();
238 return std::make_unique< QgsCircularString >();
240 return std::make_unique< QgsCompoundCurve >();
242 return std::make_unique< QgsPolygon >();
244 return std::make_unique< QgsCurvePolygon >();
246 return std::make_unique< QgsMultiLineString >();
248 return std::make_unique< QgsMultiPolygon >();
250 return std::make_unique< QgsMultiPoint >();
252 return std::make_unique< QgsMultiCurve >();
254 return std::make_unique< QgsMultiSurface >();
256 return std::make_unique< QgsGeometryCollection >();
258 return std::make_unique< QgsTriangle >();
267 std::unique_ptr< QgsGeometryCollection > collect;
271 collect = std::make_unique< QgsMultiPoint >();
274 collect = std::make_unique< QgsMultiLineString >();
277 collect = std::make_unique< QgsMultiCurve >();
280 collect = std::make_unique< QgsMultiPolygon >();
283 collect = std::make_unique< QgsMultiSurface >();
286 collect = std::make_unique< QgsGeometryCollection >();
293 collect->addMValue();
295 collect->addZValue();