[postgis-tickets] r16130 - Support google line encodings that include a backslash character (References #3713)

Paul Ramsey pramsey at cleverelephant.ca
Thu Nov 30 13:41:19 PST 2017


Author: pramsey
Date: 2017-11-30 13:41:18 -0800 (Thu, 30 Nov 2017)
New Revision: 16130

Modified:
   trunk/liblwgeom/cunit/cu_out_encoded_polyline.c
   trunk/liblwgeom/lwout_encoded_polyline.c
   trunk/postgis/lwgeom_export.c
Log:
Support google line encodings that include a backslash character (References #3713)


Modified: trunk/liblwgeom/cunit/cu_out_encoded_polyline.c
===================================================================
--- trunk/liblwgeom/cunit/cu_out_encoded_polyline.c	2017-11-30 21:37:57 UTC (rev 16129)
+++ trunk/liblwgeom/cunit/cu_out_encoded_polyline.c	2017-11-30 21:41:18 UTC (rev 16130)
@@ -39,6 +39,13 @@
 
 static void out_encoded_polyline_test_geoms(void)
 {
+	/* Magic Linestring */
+	do_encoded_polyline_test(
+	    "SRID=4326;LINESTRING(33.6729 38.7071,33.6692 38.701,33.6673 38.6972,33.6626 38.6871)",
+	    5,
+	    "k~fkFsvolEbe at bVvVzJb~@j\\");
+		return;
+
 	/* Linestring */
 	do_encoded_polyline_test(
 	    "LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)",

Modified: trunk/liblwgeom/lwout_encoded_polyline.c
===================================================================
--- trunk/liblwgeom/lwout_encoded_polyline.c	2017-11-30 21:37:57 UTC (rev 16129)
+++ trunk/liblwgeom/lwout_encoded_polyline.c	2017-11-30 21:41:18 UTC (rev 16130)
@@ -108,8 +108,6 @@
 			 each value with 0x20 if another bit chunk follows and add 63*/
 			int nextValue = (0x20 | (numberToEncode & 0x1f)) + 63;
 			stringbuffer_aprintf(sb, "%c", (char)nextValue);
-			if(92 == nextValue)
-				stringbuffer_aprintf(sb, "%c", (char)nextValue);
 
 			/* Break the binary value out into 5-bit chunks */
 			numberToEncode >>= 5;
@@ -117,8 +115,6 @@
 
 		numberToEncode += 63;
 		stringbuffer_aprintf(sb, "%c", (char)numberToEncode);
-		if(92 == numberToEncode)
-			stringbuffer_aprintf(sb, "%c", (char)numberToEncode);
 	}
 
 	lwfree(delta);

Modified: trunk/postgis/lwgeom_export.c
===================================================================
--- trunk/postgis/lwgeom_export.c	2017-11-30 21:37:57 UTC (rev 16129)
+++ trunk/postgis/lwgeom_export.c	2017-11-30 21:41:18 UTC (rev 16130)
@@ -635,7 +635,6 @@
 		PG_RETURN_NULL();
 	}
 	lwgeom = lwgeom_from_gserialized(geom);
-	PG_FREE_IF_COPY(geom, 0);
 
 	if (PG_NARGS() > 1 && !PG_ARGISNULL(1))
 	{
@@ -645,8 +644,9 @@
 
 	encodedpolyline = lwgeom_to_encoded_polyline(lwgeom, precision);
 	lwgeom_free(lwgeom);
+	PG_FREE_IF_COPY(geom, 0);
 
-  result = cstring2text(encodedpolyline);
+	result = cstring2text(encodedpolyline);
 	lwfree(encodedpolyline);
 
 	PG_RETURN_TEXT_P(result);



More information about the postgis-tickets mailing list