]> granicus.if.org Git - postgis/commitdiff
ST_AsMVT: parse JSON numeric values with decimals as doubles
authorRaúl Marín Rodríguez <rmrodriguez@carto.com>
Fri, 11 Jan 2019 12:33:56 +0000 (12:33 +0000)
committerRaúl Marín Rodríguez <rmrodriguez@carto.com>
Fri, 11 Jan 2019 12:33:56 +0000 (12:33 +0000)
References #4292
Closes https://github.com/postgis/postgis/pull/357

git-svn-id: http://svn.osgeo.org/postgis/trunk@17134 b70326c6-7e19-0410-871a-916f4a2858ee

NEWS
postgis/mvt.c
regress/core/mvt_jsonb.sql
regress/core/mvt_jsonb_expected

diff --git a/NEWS b/NEWS
index a3b54a2ce54cc9f89573be577ca9c3356081b8f5..575f2165c9f3ef3e9164f0b5f132c0be29d44861 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -20,7 +20,7 @@ PostGIS 3.0.0
 
   - #4267, Enable Proj 6 deprecated APIs (Darafei Praliaskouski, Raúl Marín)
 
-  - #4268, Bump minimum SFCGAL version to 1.3.1 (Darafei Praliaskouski) 
+  - #4268, Bump minimum SFCGAL version to 1.3.1 (Darafei Praliaskouski)
 
 * New Features *
   - #2902, postgis_geos_noop (Sandro Santilli)
@@ -59,8 +59,8 @@ PostGIS 3.0.0
   - #4139, Make mixed-dimension ND index build tree correctly (Darafei Praliaskouski,
            Arthur Lesuisse, Andrew Gierth, Raúl Marín)
   - #4262, Document MULTISURFACE compatibility of ST_LineToCurve (Steven Ottens)
-
   - #4276, ST_AsGeoJSON documentation refresh (Darafei Praliaskouski)
+  - #4292, ST_AsMVT: parse JSON numeric values with decimals as doubles (Raúl Marín)
 
 PostGIS 2.5.0
 2018/09/23
index 4f7f6d4400419d9b01b86d73d6841e12431c1e4f..fde37abe89764fb9d3a3255ef25edaa37b8cf38e 100644 (file)
@@ -615,7 +615,7 @@ static uint32_t *parse_jsonb(mvt_agg_context *ctx, Jsonb *jb,
                                        PointerGetDatum(v.val.numeric)));
                                d = strtod(str, NULL);
                                l = strtol(str, NULL, 10);
-                               if ((long) d != l)
+                               if (FP_NEQUALS(d, (double)l))
                                {
                                        MVT_PARSE_VALUE(d, mvt_kv_double_value, double_values_hash,
                                                double_value, sizeof(double));
index 9a01dad20350981255b6163d8483d67c87d47acf..31bd68bb09033f734c772d26200e37c8fe587694 100644 (file)
@@ -11,3 +11,9 @@ SELECT 'J3', encode(ST_AsMVT(q, 'test', 4096, 'geom'), 'base64') FROM (
     SELECT '{"c3":"abasdadcd", "c1":5}'::jsonb,
             ST_AsMVTGeom(ST_GeomFromText('POINT(25 17)'), ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096)), 4096, 0, false) AS geom
 ) AS q;
+SELECT 'J4', encode(ST_AsMVT(q, 'test', 4096, 'geom'), 'base64') FROM (
+       SELECT '1.25'::double precision AS c1,
+       ST_AsMVTGeom(ST_GeomFromText('POINT (0 0)'),
+       ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096)), 4096, 0, false) AS geom,
+       '{"test":1.75}'::jsonb as properties
+) AS q;
\ No newline at end of file
index fa99927fd0f8a983b14534eede13a0bf2b99b74b..5960854658ddcae111ed83207e5061202fc13022 100644 (file)
@@ -2,3 +2,5 @@ J1|Gi8KBHRlc3QSDhIEAAABARgBIgQJMt4/GgJjMRoCYzIiAigBIgYKBGFiY2QogCB4Ag==
 J2|GisKBHRlc3QSDhIEAAABABgBIgQJMt4/GgJjMRoCYzIiBgoEYWJjZCiAIHgC
 J3|GlAKBHRlc3QSDhIEAAABABgBIgQJMt4/Eg4SBAABAgIYASIECTLePxoCYzEaAmMyGgJjMyIGCgRh
 YmNkIgIoBSILCglhYmFzZGFkY2QogCB4Ag==
+J4|GjsKBHRlc3QSDhIEAAABARgBIgQJAIBAGgJjMRoEdGVzdCIJGQAAAAAAAPQ/IgkZAAAAAAAA/D8o
+gCB4Ag==