4 #include <simo/geom/detail/types.hpp> 21 dimension_type get_dim(geometry_type geom_type) noexcept
23 int value =
static_cast<int>(geom_type);
24 if (value >= 1000 and value < 2000)
26 return dimension_type::XYZ;
28 if (value >= 2000 and value < 3000)
30 return dimension_type::XYM;
34 return dimension_type::XYZM;
36 return dimension_type::XY;
47 dimension_type get_dim(int8_t ndim) noexcept
52 return dimension_type::XYZ;
54 return dimension_type::XYZM;
56 return dimension_type::XY;
68 int8_t get_ndim(dimension_type dim_type) noexcept
72 case dimension_type::XYZM:
74 case dimension_type::XYZ:
75 case dimension_type::XYM:
90 int8_t get_ndim(geometry_type geom_type) noexcept
92 return get_ndim(get_dim(geom_type));
103 geometry_type get_geom_type(geometry_type geom_type) noexcept
107 case geometry_type::POINT:
108 case geometry_type::POINTZ:
109 case geometry_type::POINTM:
110 case geometry_type::POINTZM:
111 return geometry_type::POINT;
112 case geometry_type::MULTIPOINT:
113 case geometry_type::MULTIPOINTZ:
114 case geometry_type::MULTIPOINTM:
115 case geometry_type::MULTIPOINTZM:
116 return geometry_type::MULTIPOINT;
117 case geometry_type::LINESTRING:
118 case geometry_type::LINESTRINGZ:
119 case geometry_type::LINESTRINGM:
120 case geometry_type::LINESTRINGZM:
121 return geometry_type::LINESTRING;
122 case geometry_type::MULTILINESTRING:
123 case geometry_type::MULTILINESTRINGZ:
124 case geometry_type::MULTILINESTRINGM:
125 case geometry_type::MULTILINESTRINGZM:
126 return geometry_type::MULTILINESTRING;
127 case geometry_type::POLYGON:
128 case geometry_type::POLYGONZ:
129 case geometry_type::POLYGONM:
130 case geometry_type::POLYGONZM:
131 return geometry_type::POLYGON;
132 case geometry_type::MULTIPOLYGON:
133 case geometry_type::MULTIPOLYGONZ:
134 case geometry_type::MULTIPOLYGONM:
135 case geometry_type::MULTIPOLYGONZM:
136 return geometry_type::MULTIPOLYGON;
137 case geometry_type::GEOMETRYCOLLECTION:
138 case geometry_type::GEOMETRYCOLLECTIONZ:
139 case geometry_type::GEOMETRYCOLLECTIONM:
140 case geometry_type::GEOMETRYCOLLECTIONZM:
141 return geometry_type::GEOMETRYCOLLECTION;
142 case geometry_type::CIRCULARSTRING:
143 case geometry_type::CIRCULARSTRINGZ:
144 case geometry_type::CIRCULARSTRINGM:
145 case geometry_type::CIRCULARSTRINGZM:
146 return geometry_type::CIRCULARSTRING;
147 case geometry_type::COMPOUNDCURVE:
148 case geometry_type::COMPOUNDCURVEZ:
149 case geometry_type::COMPOUNDCURVEM:
150 case geometry_type::COMPOUNDCURVEZM:
151 return geometry_type::COMPOUNDCURVE;
152 case geometry_type::CURVEPOLYGON:
153 case geometry_type::CURVEPOLYGONZ:
154 case geometry_type::CURVEPOLYGONM:
155 case geometry_type::CURVEPOLYGONZM:
156 return geometry_type::CURVEPOLYGON;
157 case geometry_type::MULTICURVE:
158 case geometry_type::MULTICURVEZ:
159 case geometry_type::MULTICURVEM:
160 case geometry_type::MULTICURVEZM:
161 return geometry_type::MULTICURVE;
162 case geometry_type::MULTISURFACE:
163 case geometry_type::MULTISURFACEZ:
164 case geometry_type::MULTISURFACEM:
165 case geometry_type::MULTISURFACEZM:
166 return geometry_type::MULTISURFACE;
167 case geometry_type::CURVE:
168 case geometry_type::CURVEZ:
169 case geometry_type::CURVEM:
170 case geometry_type::CURVEZM:
171 return geometry_type::CURVE;
172 case geometry_type::SURFACE:
173 case geometry_type::SURFACEZ:
174 case geometry_type::SURFACEM:
175 case geometry_type::SURFACEZM:
176 return geometry_type::SURFACE;
177 case geometry_type::POLYHEDRALSURFACE:
178 case geometry_type::POLYHEDRALSURFACEZ:
179 case geometry_type::POLYHEDRALSURFACEM:
180 case geometry_type::POLYHEDRALSURFACEZM:
181 return geometry_type::POLYHEDRALSURFACE;
182 case geometry_type::TIN:
183 case geometry_type::TINZ:
184 case geometry_type::TINM:
185 case geometry_type::TINZM:
186 return geometry_type::TIN;
188 return geometry_type::GEOMETRY;
198 bool is_point(geometry_type geom_type) noexcept
200 return geom_type == geometry_type::POINT or geom_type == geometry_type::POINTZ or geom_type == geometry_type::POINTM or geom_type == geometry_type::POINTZM;
209 bool is_multipoint(geometry_type geom_type) noexcept
211 return geom_type == geometry_type::MULTIPOINT or geom_type == geometry_type::MULTIPOINTZ or geom_type == geometry_type::MULTIPOINTM or geom_type == geometry_type::MULTIPOINTZM;
220 bool is_linestring(geometry_type geom_type) noexcept
222 return geom_type == geometry_type::LINESTRING or geom_type == geometry_type::LINESTRINGZ or geom_type == geometry_type::LINESTRINGM or geom_type == geometry_type::LINESTRINGZM;
231 bool is_multilinestring(geometry_type geom_type) noexcept
233 return geom_type == geometry_type::MULTILINESTRING or geom_type == geometry_type::MULTILINESTRINGZ or geom_type == geometry_type::MULTILINESTRINGM or geom_type == geometry_type::MULTILINESTRINGZM;
242 bool is_polygon(geometry_type geom_type) noexcept
244 return geom_type == geometry_type::POLYGON or geom_type == geometry_type::POLYGONZ or geom_type == geometry_type::POLYGONM or geom_type == geometry_type::POLYGONZM;
253 bool is_multipolygon(geometry_type geom_type) noexcept
255 return geom_type == geometry_type::MULTIPOLYGON or geom_type == geometry_type::MULTIPOLYGONZ or geom_type == geometry_type::MULTIPOLYGONM or geom_type == geometry_type::MULTIPOLYGONZM;