From 33445f7d874abf1ede1c7cf5cc503481f97c335f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Mon, 11 Jun 2018 21:50:32 +0200 Subject: [PATCH 1/5] Fix pc_patch_uncompressed_from_lazperf pc_patch_uncompressed_from_lazperf needs to set patch->datasize. --- lib/pc_patch_lazperf.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/pc_patch_lazperf.c b/lib/pc_patch_lazperf.c index 2686faf..20e79d2 100644 --- a/lib/pc_patch_lazperf.c +++ b/lib/pc_patch_lazperf.c @@ -97,6 +97,7 @@ pc_patch_uncompressed_from_lazperf(const PCPATCH_LAZPERF *palaz) if (size != -1) { + size_t datasize; pcu = pcalloc(sizeof(PCPATCH_UNCOMPRESSED)); pcu->type = PC_NONE; pcu->readonly = PC_FALSE; @@ -107,10 +108,12 @@ pc_patch_uncompressed_from_lazperf(const PCPATCH_LAZPERF *palaz) // not optimal but we have to pass by the context manager otherwise // a segfault happenned (sometimes) during a pcfree of lazperf field - pcu->data = (uint8_t*) pcalloc(palaz->schema->size * palaz->npoints); - memcpy(pcu->data, decompressed, palaz->schema->size * palaz->npoints); + datasize = palaz->schema->size * palaz->npoints; + pcu->data = (uint8_t*) pcalloc(datasize); + memcpy(pcu->data, decompressed, datasize); free(decompressed); + pcu->datasize = datasize; pcu->maxpoints = palaz->npoints; } else From 59eb4671efb3a4ed666d985376c60de819ef27ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Mon, 11 Jun 2018 21:51:52 +0200 Subject: [PATCH 2/5] Fix typo in a pcerror message --- pgsql/pc_pgsql.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pgsql/pc_pgsql.c b/pgsql/pc_pgsql.c index 8e9ad0c..4e14c28 100644 --- a/pgsql/pc_pgsql.c +++ b/pgsql/pc_pgsql.c @@ -796,7 +796,7 @@ pc_patch_uncompressed_deserialize(const SERIALIZED_PATCH *serpatch, const PCSCHE /* Calculate the point data buffer size */ patch->datasize = VARSIZE(serpatch) - sizeof(SERIALIZED_PATCH) + 1 - stats_size; if ( patch->datasize != patch->npoints * schema->size ) - pcerror("%s: calucated patch data sizes don't match (%d != %d)", __func__, patch->datasize, patch->npoints * schema->size); + pcerror("%s: calculated patch data sizes don't match (%d != %d)", __func__, patch->datasize, patch->npoints * schema->size); return (PCPATCH*)patch; } From 7d17b5ebffa7fcf698b9536c0e6076832c28fd99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Tue, 12 Jun 2018 08:42:48 +0200 Subject: [PATCH 3/5] Add id column to laz test table --- pgsql/expected/pointcloud-laz.out | 34 ++++++++++++++++--------------- pgsql/sql/pointcloud-laz.sql | 1 + 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/pgsql/expected/pointcloud-laz.out b/pgsql/expected/pointcloud-laz.out index da05604..5a8900b 100644 --- a/pgsql/expected/pointcloud-laz.out +++ b/pgsql/expected/pointcloud-laz.out @@ -40,12 +40,14 @@ VALUES (5, 0, ' ); CREATE TABLE IF NOT EXISTS pa_test_laz ( + id SERIAL, pa PCPATCH(5) ); \d pa_test_laz - Table "public.pa_test_laz" - Column | Type | Modifiers ---------+------------+----------- + Table "public.pa_test_laz" + Column | Type | Modifiers +--------+------------+---------------------------------------------------------- + id | integer | not null default nextval('pa_test_laz_id_seq'::regclass) pa | pcpatch(5) | INSERT INTO pa_test_laz (pa) VALUES ('0000000005000000000000000200000002000000030000000500060000000200000003000000050008'); @@ -79,12 +81,12 @@ SELECT pc_astext(pc_explode(pa)) FROM pa_test_laz; (8 rows) SELECT * FROM pa_test_laz; - pa ------------------------------------------------------------------------------- - 01050000000300000002000000140000000200000003000000050000000600000005A10000 - 0105000000030000000200000015000000060000000700000005000000060013884A3A000000 - 01050000000300000002000000150000000200000003000000050000000600000006D8000000 - 0105000000030000000200000015000000020000000300000005000000060000000B1E000000 + id | pa +----+------------------------------------------------------------------------------ + 1 | 01050000000300000002000000140000000200000003000000050000000600000005A10000 + 2 | 0105000000030000000200000015000000060000000700000005000000060013884A3A000000 + 3 | 01050000000300000002000000150000000200000003000000050000000600000006D8000000 + 4 | 0105000000030000000200000015000000020000000300000005000000060000000B1E000000 (4 rows) SELECT Sum(PC_NumPoints(pa)) FROM pa_test_laz; @@ -174,13 +176,13 @@ SELECT pc_astext(pc_explode(pa)) FROM pa_test_laz LIMIT 20; (20 rows) SELECT * FROM pa_test_laz LIMIT 20; - pa --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - 0105000000030000000100000012000000A4D4FFFFD417000000710200A00001000000 - 01050000000300000090010000F4000000F4CFFFFF24130000409C0000280003F27D65F909E1B4FF163125F3217D67B1A6E9728B7246DB622DAD94954405C57B953BE39649652F560A1AC414A371CE3967FBC090345EE0B9E0B3E7B024BBE31373EAA273E1696F7D46E70DCAB367103ECFDA0DF36E4F77901A2C8CE2F4718BDF6680076FFB02B320FA9ED30DFF79A17102E4E48D349A3098EC43031CE4E6B294D0A4442354A6626BCDEF20DF2C154144DA5FD99CE0DADBF4C7153ED51B4D43A3A5A0DBF1FBA5CA5C6C9630C1CA7662A002A217E22CF7357FA19EFCBA6F6C7E91035176B2DF753BD5954A923FA6A95C848053BCE36381D7EA15D928A88612B1E49BD6000000 - 01050000000300000090010000F400000014D3FFFF44160000C0D40100780003F27D65F909E1B4FF163125F3217D67B1A6E9728B7246DB622DAD94954405C57B953BE39649652F560A1AC414A371CE3967FBC090345EE0B9E0B3E7B024BBE31373EAA273E1696F7D46E70DCAB367103ECFDA0DF36E4F77901A2C8CE2F4718BDF6680076FFB02B320FA9ED30DFF79A17102E4E48D349A3098EC43031CE4E6B294D0A4442354A6626BCDEF20DF2C154144DA5FD99CE0DADBF4C7153ED51B4D43A3A5A0DBF1FBA5CA5C6C9630C1CA7662A002A217E22CF7357FA19EFCBA6F6C7E91035176B2DF753BD5954A923FA6A95C848053BCE36381D7EA15D928A88612B1E49BD6000000 - 0105000000030000008F010000F400000065CEFFFF9511000064000000000003F27D65F909E1B4FF163125F3217D67B1A6E9728B7246DB622DAD94954405D5CF50EBF47F3F94647B9C1238B6EFFF7200D0A51A36EC28ABD9AAAB0C6351B91042FA4DFB9A4C97A00E088A4033DAF7FC2FC798FFDEF31FC02D5C881C2A92086291FDC6832A9E966831DC62112CFBE18094BF4B398D29C9A29EB9868F208DBB735025F1EAA03FD8D064FB7B012CD72D8E6CC5E82B221E17B55000071A6B70136AAB145FB0F48BE8ADB1D33E88E13D7DE876B582245BC78DB10A9CB31673C349380CF301873FF20D65406448D9889258A582908A6D2E85B58918B4B98E50BC5ADB5B11DB000000 - 01050000000300000090010000F400000084D1FFFFB414000080380100500003F27D65F909E1B4FF163125F3217D67B1A6E9728B7246DB622DAD94954405C57B953BE39649652F560A1AC414A371CE3967FBC090345EE0B9E0B3E7B024BBE31373EAA273E1696F7D46E70DCAB367103ECFDA0DF36E4F77901A2C8CE2F4718BDF6680076FFB02B320FA9ED30DFF79A17102E4E48D349A3098EC43031CE4E6B294D0A4442354A6626BCDEF20DF2C154144DA5FD99CE0DADBF4C7153ED51B4D43A3A5A0DBF1FBA5CA5C6C9630C1CA7662A002A217E22CF7357FA19EFCBA6F6C7E91035176B2DF753BD5954A923FA6A95C848053BCE36381D7EA15D928A88612B1E49BD6000000 + id | pa +----+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 5 | 0105000000030000000100000012000000A4D4FFFFD417000000710200A00001000000 + 6 | 01050000000300000090010000F4000000F4CFFFFF24130000409C0000280003F27D65F909E1B4FF163125F3217D67B1A6E9728B7246DB622DAD94954405C57B953BE39649652F560A1AC414A371CE3967FBC090345EE0B9E0B3E7B024BBE31373EAA273E1696F7D46E70DCAB367103ECFDA0DF36E4F77901A2C8CE2F4718BDF6680076FFB02B320FA9ED30DFF79A17102E4E48D349A3098EC43031CE4E6B294D0A4442354A6626BCDEF20DF2C154144DA5FD99CE0DADBF4C7153ED51B4D43A3A5A0DBF1FBA5CA5C6C9630C1CA7662A002A217E22CF7357FA19EFCBA6F6C7E91035176B2DF753BD5954A923FA6A95C848053BCE36381D7EA15D928A88612B1E49BD6000000 + 7 | 01050000000300000090010000F400000014D3FFFF44160000C0D40100780003F27D65F909E1B4FF163125F3217D67B1A6E9728B7246DB622DAD94954405C57B953BE39649652F560A1AC414A371CE3967FBC090345EE0B9E0B3E7B024BBE31373EAA273E1696F7D46E70DCAB367103ECFDA0DF36E4F77901A2C8CE2F4718BDF6680076FFB02B320FA9ED30DFF79A17102E4E48D349A3098EC43031CE4E6B294D0A4442354A6626BCDEF20DF2C154144DA5FD99CE0DADBF4C7153ED51B4D43A3A5A0DBF1FBA5CA5C6C9630C1CA7662A002A217E22CF7357FA19EFCBA6F6C7E91035176B2DF753BD5954A923FA6A95C848053BCE36381D7EA15D928A88612B1E49BD6000000 + 8 | 0105000000030000008F010000F400000065CEFFFF9511000064000000000003F27D65F909E1B4FF163125F3217D67B1A6E9728B7246DB622DAD94954405D5CF50EBF47F3F94647B9C1238B6EFFF7200D0A51A36EC28ABD9AAAB0C6351B91042FA4DFB9A4C97A00E088A4033DAF7FC2FC798FFDEF31FC02D5C881C2A92086291FDC6832A9E966831DC62112CFBE18094BF4B398D29C9A29EB9868F208DBB735025F1EAA03FD8D064FB7B012CD72D8E6CC5E82B221E17B55000071A6B70136AAB145FB0F48BE8ADB1D33E88E13D7DE876B582245BC78DB10A9CB31673C349380CF301873FF20D65406448D9889258A582908A6D2E85B58918B4B98E50BC5ADB5B11DB000000 + 9 | 01050000000300000090010000F400000084D1FFFFB414000080380100500003F27D65F909E1B4FF163125F3217D67B1A6E9728B7246DB622DAD94954405C57B953BE39649652F560A1AC414A371CE3967FBC090345EE0B9E0B3E7B024BBE31373EAA273E1696F7D46E70DCAB367103ECFDA0DF36E4F77901A2C8CE2F4718BDF6680076FFB02B320FA9ED30DFF79A17102E4E48D349A3098EC43031CE4E6B294D0A4442354A6626BCDEF20DF2C154144DA5FD99CE0DADBF4C7153ED51B4D43A3A5A0DBF1FBA5CA5C6C9630C1CA7662A002A217E22CF7357FA19EFCBA6F6C7E91035176B2DF753BD5954A923FA6A95C848053BCE36381D7EA15D928A88612B1E49BD6000000 (5 rows) SELECT Sum(PC_NumPoints(pa)) FROM pa_test_laz; diff --git a/pgsql/sql/pointcloud-laz.sql b/pgsql/sql/pointcloud-laz.sql index d42dc27..b39bd8a 100644 --- a/pgsql/sql/pointcloud-laz.sql +++ b/pgsql/sql/pointcloud-laz.sql @@ -42,6 +42,7 @@ VALUES (5, 0, CREATE TABLE IF NOT EXISTS pa_test_laz ( + id SERIAL, pa PCPATCH(5) ); \d pa_test_laz From 2cbd6f0b7d68da3cc5106175b5ce544e346dc17e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Tue, 12 Jun 2018 08:45:01 +0200 Subject: [PATCH 4/5] Add a PC_Uncompress LAZ SQL test --- pgsql/expected/pointcloud-laz.out | 6 ++++++ pgsql/sql/pointcloud-laz.sql | 2 ++ 2 files changed, 8 insertions(+) diff --git a/pgsql/expected/pointcloud-laz.out b/pgsql/expected/pointcloud-laz.out index 5a8900b..b07aaf8 100644 --- a/pgsql/expected/pointcloud-laz.out +++ b/pgsql/expected/pointcloud-laz.out @@ -113,6 +113,12 @@ SELECT Sum(PC_PatchMin(pa,'x')) FROM pa_test_laz; 0.12 (1 row) +SELECT PC_Uncompress(pa) FROM pa_test_laz WHERE id=1; + pc_uncompress +------------------------------------------------------------------------------------ + 0105000000000000000200000002000000030000000500000006000200000003000000050000000800 +(1 row) + DELETE FROM pa_test_laz; INSERT INTO pa_test_laz (pa) SELECT PC_Patch(PC_MakePoint(5, ARRAY[x,y,z,intensity])) diff --git a/pgsql/sql/pointcloud-laz.sql b/pgsql/sql/pointcloud-laz.sql index b39bd8a..ba265ab 100644 --- a/pgsql/sql/pointcloud-laz.sql +++ b/pgsql/sql/pointcloud-laz.sql @@ -61,6 +61,8 @@ SELECT Sum(PC_MemSize(pa)) FROM pa_test_laz; SELECT Sum(PC_PatchMax(pa,'x')) FROM pa_test_laz; SELECT Sum(PC_PatchMin(pa,'x')) FROM pa_test_laz; +SELECT PC_Uncompress(pa) FROM pa_test_laz WHERE id=1; + DELETE FROM pa_test_laz; INSERT INTO pa_test_laz (pa) SELECT PC_Patch(PC_MakePoint(5, ARRAY[x,y,z,intensity])) From 8e82233b56970b777967059be0bf407ae2377c19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Tue, 12 Jun 2018 08:51:34 +0200 Subject: [PATCH 5/5] Test datasize in test_patch_lazperf --- lib/cunit/cu_pc_patch_lazperf.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/cunit/cu_pc_patch_lazperf.c b/lib/cunit/cu_pc_patch_lazperf.c index 12bdc88..e48c262 100644 --- a/lib/cunit/cu_pc_patch_lazperf.c +++ b/lib/cunit/cu_pc_patch_lazperf.c @@ -107,6 +107,9 @@ test_patch_lazperf() CU_ASSERT_EQUAL(pauref->readonly, paul->readonly); CU_ASSERT_EQUAL(pauref->readonly, pal->readonly); + // test datasize + CU_ASSERT_EQUAL(paul->datasize, pauref->datasize); + // free pc_pointlist_free(pl); pc_patch_free( (PCPATCH*) pal );