PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ test_lwgeom_remove_repeated_points()

static void test_lwgeom_remove_repeated_points ( void  )
static

Definition at line 1162 of file cu_algorithm.c.

1163{
1164 LWGEOM *g, *gn;
1165 char *ewkt;
1166 char *ewkt_exp;
1167 int modified = LW_FALSE;
1168
1169 g = lwgeom_from_wkt("LINESTRING(0 0,1 1,1 1,1 1,1.707 1.707)", LW_PARSER_CHECK_NONE);
1170 modified = lwgeom_remove_repeated_points_in_place(g, 0.001);
1171 ASSERT_INT_EQUAL(modified, LW_TRUE);
1172 ewkt = lwgeom_to_ewkt(g);
1173 ASSERT_STRING_EQUAL(ewkt, "LINESTRING(0 0,1 1,1.707 1.707)");
1174 lwgeom_free(g);
1175 lwfree(ewkt);
1176
1177 g = lwgeom_from_wkt("MULTIPOINT(0 0, 10 0, 10 10, 10 10, 0 10, 0 10, 0 10, 0 0, 0 0, 0 0, 5 5, 0 0, 5 5)", LW_PARSER_CHECK_NONE);
1179 ASSERT_INT_EQUAL(modified, LW_TRUE);
1180 gn = lwgeom_normalize(g);
1181 ewkt = lwgeom_to_ewkt(gn);
1182 ASSERT_STRING_EQUAL(ewkt, "MULTIPOINT(10 10,10 0,5 5,0 10,0 0)");
1183 lwgeom_free(g);
1184 lwgeom_free(gn);
1185 lwfree(ewkt);
1186
1187 g = lwgeom_from_wkt("LINESTRING(1612830.15445 4841287.12672,1612830.15824 4841287.12674,1612829.98813 4841274.56198)", LW_PARSER_CHECK_NONE);
1188 modified = lwgeom_remove_repeated_points_in_place(g, 0.01);
1189 ASSERT_INT_EQUAL(modified, LW_TRUE);
1190 ewkt = lwgeom_to_ewkt(g);
1191 ASSERT_STRING_EQUAL(ewkt, "LINESTRING(1612830.15445 4841287.12672,1612829.98813 4841274.56198)");
1192 lwgeom_free(g);
1193 lwfree(ewkt);
1194
1195 /* remove points */
1196 g = lwgeom_from_wkt("MULTIPOINT(0 0,10 0,10 10,10 10,0 10,0 10,0 10,0 0,0 0,0 0,5 5,5 5,5 8,8 8,8 8,8 8,8 5,8 5,5 5,5 5,5 5,5 5,5 5,50 50,50 50,50 50,50 60,50 60,50 60,60 60,60 50,60 50,50 50,55 55,55 58,58 58,58 55,58 55,55 55)", LW_PARSER_CHECK_NONE);
1198 ASSERT_INT_EQUAL(modified, LW_TRUE);
1199 gn = lwgeom_normalize(g);
1200 ewkt = lwgeom_to_ewkt(gn);
1201 lwgeom_free(g);
1202 lwgeom_free(gn);
1203 /* build expected and normalize */
1204 g = lwgeom_from_wkt("MULTIPOINT(0 0,0 10,5 5,5 8,8 5,8 8,10 0,10 10,50 50,50 60,55 55,55 58,58 55,58 58,60 50,60 60)", LW_PARSER_CHECK_NONE);
1205 gn = lwgeom_normalize(g);
1206 ewkt_exp = lwgeom_to_ewkt(gn);
1207 ASSERT_STRING_EQUAL(ewkt, ewkt_exp);
1208 lwgeom_free(g);
1209 lwgeom_free(gn);
1210 lwfree(ewkt);
1211 lwfree(ewkt_exp);
1212
1213 g = lwgeom_from_wkt("POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))", LW_PARSER_CHECK_NONE);
1214 modified = lwgeom_remove_repeated_points_in_place(g, 10000);
1215 ASSERT_INT_EQUAL(modified, LW_TRUE);
1216 ewkt = lwgeom_to_ewkt(g);
1217 ASSERT_STRING_EQUAL(ewkt, "POLYGON((0 0,1 1,1 0,0 0))");
1218 lwgeom_free(g);
1219 lwfree(ewkt);
1220
1221 // Test the return value (modified or not)
1222 g = lwgeom_from_wkt("POINT(0 0)", LW_PARSER_CHECK_NONE);
1223 modified = lwgeom_remove_repeated_points_in_place(g, 10000);
1224 ASSERT_INT_EQUAL(modified, LW_FALSE);
1225 lwgeom_free(g);
1226
1227 g = lwgeom_from_wkt("TRIANGLE((0 0, 5 0, 3 3, 0 0))", LW_PARSER_CHECK_NONE);
1228 modified = lwgeom_remove_repeated_points_in_place(g, 10000);
1229 ASSERT_INT_EQUAL(modified, LW_FALSE);
1230 lwgeom_free(g);
1231
1232 g = lwgeom_from_wkt("POLYGON((0 0,0 1,1 1,1 0,0 0))", LW_PARSER_CHECK_NONE);
1233 modified = lwgeom_remove_repeated_points_in_place(g, 0.1);
1234 ASSERT_INT_EQUAL(modified, LW_FALSE);
1235 ewkt = lwgeom_to_ewkt(g);
1236 ASSERT_STRING_EQUAL(ewkt, "POLYGON((0 0,0 1,1 1,1 0,0 0))");
1237 lwgeom_free(g);
1238 lwfree(ewkt);
1239
1240 g = lwgeom_from_wkt("POLYGON((0 0,0 1,1 1,1 0,0 0), (0.4 0.4, 0.4 0.4, 0.4 0.5, 0.5 0.5, 0.5 0.4, 0.4 0.4))",
1242 modified = lwgeom_remove_repeated_points_in_place(g, 0.1);
1243 ASSERT_INT_EQUAL(modified, LW_TRUE);
1244 ewkt = lwgeom_to_ewkt(g);
1245 ASSERT_STRING_EQUAL(ewkt, "POLYGON((0 0,0 1,1 1,1 0,0 0),(0.4 0.4,0.5 0.5,0.5 0.4,0.4 0.4))");
1246 lwgeom_free(g);
1247 lwfree(ewkt);
1248
1249 g = lwgeom_from_wkt("GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0,1 0,1 1,0 1,0 0)))", LW_PARSER_CHECK_NONE);
1250 modified = lwgeom_remove_repeated_points_in_place(g, 0.1);
1251 ASSERT_INT_EQUAL(modified, LW_FALSE);
1252 ewkt = lwgeom_to_ewkt(g);
1253 ASSERT_STRING_EQUAL(ewkt, "GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0,1 0,1 1,0 1,0 0)))");
1254 lwgeom_free(g);
1255 lwfree(ewkt);
1256
1257 g = lwgeom_from_wkt("GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0, 0 1, 1 1, 1 0, 0 0)))", LW_PARSER_CHECK_NONE);
1258 modified = lwgeom_remove_repeated_points_in_place(g, 10000);
1259 ASSERT_INT_EQUAL(modified, LW_TRUE);
1260 ewkt = lwgeom_to_ewkt(g);
1261 ASSERT_STRING_EQUAL(ewkt, "GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0,1 1,1 0,0 0)))");
1262 lwgeom_free(g);
1263 lwfree(ewkt);
1264
1265 g = lwgeom_from_wkt("GEOMETRYCOLLECTION(POLYGON((0 0, 0 1, 1 1, 1 0, 0 0)),POINT(2 0))", LW_PARSER_CHECK_NONE);
1266 modified = lwgeom_remove_repeated_points_in_place(g, 10000);
1267 ASSERT_INT_EQUAL(modified, LW_TRUE);
1268 ewkt = lwgeom_to_ewkt(g);
1269 ASSERT_STRING_EQUAL(ewkt, "GEOMETRYCOLLECTION(POLYGON((0 0,1 1,1 0,0 0)),POINT(2 0))");
1270 lwgeom_free(g);
1271 lwfree(ewkt);
1272}
#define ASSERT_INT_EQUAL(o, e)
#define ASSERT_STRING_EQUAL(o, e)
#define LW_FALSE
Definition liblwgeom.h:94
void lwgeom_free(LWGEOM *geom)
Definition lwgeom.c:1246
#define LW_PARSER_CHECK_NONE
Definition liblwgeom.h:2149
int lwgeom_remove_repeated_points_in_place(LWGEOM *in, double tolerance)
Definition lwgeom.c:1695
LWGEOM * lwgeom_normalize(const LWGEOM *geom)
char * lwgeom_to_ewkt(const LWGEOM *lwgeom)
Return an allocated string.
Definition lwgeom.c:593
void lwfree(void *mem)
Definition lwutil.c:248
#define LW_TRUE
Return types for functions with status returns.
Definition liblwgeom.h:93
LWGEOM * lwgeom_from_wkt(const char *wkt, const char check)
Definition lwin_wkt.c:940

References ASSERT_INT_EQUAL, ASSERT_STRING_EQUAL, LW_FALSE, LW_PARSER_CHECK_NONE, LW_TRUE, lwfree(), lwgeom_free(), lwgeom_from_wkt(), lwgeom_normalize(), lwgeom_remove_repeated_points_in_place(), and lwgeom_to_ewkt().

Referenced by algorithms_suite_setup().

Here is the call graph for this function:
Here is the caller graph for this function: