[postgis-tickets] r15801 - ST_AsMVTGeom document internals of transform step

bjorn at wololo.org bjorn at wololo.org
Sat Sep 23 06:31:35 PDT 2017


Author: bjornharrtell
Date: 2017-09-23 06:31:35 -0700 (Sat, 23 Sep 2017)
New Revision: 15801

Modified:
   trunk/postgis/mvt.c
Log:
ST_AsMVTGeom document internals of transform step

Modified: trunk/postgis/mvt.c
===================================================================
--- trunk/postgis/mvt.c	2017-09-22 21:04:38 UTC (rev 15800)
+++ trunk/postgis/mvt.c	2017-09-23 13:31:35 UTC (rev 15801)
@@ -706,40 +706,44 @@
 		}
 	}
 
+	/* if no clip output deep clone original to avoid mutation */
 	if (lwgeom_out == NULL)
 		lwgeom_out = lwgeom_clone_deep(lwgeom);
 
+	/* transform to tile coordinate space */
 	memset(&affine, 0, sizeof(affine));
 	affine.afac = fx;
 	affine.efac = fy;
 	affine.ifac = 1;
 	affine.xoff = -gbox->xmin * fx;
 	affine.yoff = -gbox->ymax * fy;
-
 	lwgeom_affine(lwgeom_out, &affine);
 
+	/* snap to integer precision, removing duplicate points */
 	memset(&grid, 0, sizeof(gridspec));
 	grid.ipx = 0;
 	grid.ipy = 0;
 	grid.xsize = 1;
 	grid.ysize = 1;
-
 	lwgeom_out = lwgeom_grid(lwgeom_out, &grid);
 
 	if (lwgeom_out == NULL || lwgeom_is_empty(lwgeom_out))
 		return NULL;
 
+	/* if polygon(s) make valid and force clockwise as per MVT spec */
 	if (lwgeom_out->type == POLYGONTYPE ||
 		lwgeom_out->type == MULTIPOLYGONTYPE) {
 		lwgeom_out = lwgeom_make_valid(lwgeom_out);
 		lwgeom_force_clockwise(lwgeom_out);
 	}
 
+	/* if geometry collection extract highest dimensional geometry type */
 	if (lwgeom_out->type == COLLECTIONTYPE) {
 		LWCOLLECTION *lwcoll = lwgeom_as_lwcollection(lwgeom_out);
 		lwgeom_out = lwcollection_as_lwgeom(
 			lwcollection_extract(lwcoll, max_type(lwcoll)));
 		lwgeom_out = lwgeom_homogenize(lwgeom_out);
+		/* if polygon(s) make valid and force clockwise as per MVT spec */
 		if (lwgeom_out->type == POLYGONTYPE ||
 			lwgeom_out->type == MULTIPOLYGONTYPE) {
 			lwgeom_out = lwgeom_make_valid(lwgeom_out);



More information about the postgis-tickets mailing list