mirror of
https://github.com/pgpointcloud/pointcloud.git
synced 2025-12-08 20:36:04 +00:00
More more functions to slice-based access for header info
This commit is contained in:
parent
0a8ab4dc0a
commit
fb4f657106
@ -16,6 +16,8 @@ To Do
|
||||
- Before doing dimensional compression, sort by geohash (actually by a localized geohash based on the patch bounds). This will enhance the autocorrelation of values and improve run-length encoding in particular
|
||||
- Add Min/Max values to front of GHT serialization
|
||||
|
||||
- Improve extent reading to only pull a slice of patch out of the datum
|
||||
|
||||
Use Cases to Support
|
||||
--------------------
|
||||
|
||||
|
||||
@ -530,26 +530,25 @@ Datum pcpatch_uncompress(PG_FUNCTION_ARGS)
|
||||
PG_FUNCTION_INFO_V1(pcpatch_numpoints);
|
||||
Datum pcpatch_numpoints(PG_FUNCTION_ARGS)
|
||||
{
|
||||
Datum d = PG_GETARG_DATUM(0);
|
||||
SERIALIZED_PATCH *serpa = PG_DETOAST_DATUM_SLICE(d, 0, sizeof(SERIALIZED_PATCH));
|
||||
SERIALIZED_PATCH *serpa = PG_GETHEADER_SERPATCH_P(0);
|
||||
PG_RETURN_INT32(serpa->npoints);
|
||||
}
|
||||
|
||||
PG_FUNCTION_INFO_V1(pcpatch_compression);
|
||||
Datum pcpatch_compression(PG_FUNCTION_ARGS)
|
||||
{
|
||||
SERIALIZED_PATCH *serpa = PG_GETARG_SERPATCH_P(0);
|
||||
SERIALIZED_PATCH *serpa = PG_GETHEADER_SERPATCH_P(0);
|
||||
PG_RETURN_INT32(serpa->compression);
|
||||
}
|
||||
|
||||
PG_FUNCTION_INFO_V1(pcpatch_intersects);
|
||||
Datum pcpatch_intersects(PG_FUNCTION_ARGS)
|
||||
{
|
||||
SERIALIZED_PATCH *serpa1 = PG_GETARG_SERPATCH_P(0);
|
||||
SERIALIZED_PATCH *serpa2 = PG_GETARG_SERPATCH_P(1);
|
||||
SERIALIZED_PATCH *serpa1 = PG_GETHEADER_SERPATCH_P(0);
|
||||
SERIALIZED_PATCH *serpa2 = PG_GETHEADER_SERPATCH_P(1);
|
||||
|
||||
if ( serpa1->pcid != serpa2->pcid )
|
||||
elog(ERROR, "pcpatch_intersects: pcid mismatch (%d != %d)", serpa1->pcid, serpa2->pcid);
|
||||
elog(ERROR, "%s: pcid mismatch (%d != %d)", __func__, serpa1->pcid, serpa2->pcid);
|
||||
|
||||
if ( serpa1->xmin > serpa2->xmax ||
|
||||
serpa1->xmax < serpa2->xmin ||
|
||||
@ -565,7 +564,7 @@ Datum pcpatch_intersects(PG_FUNCTION_ARGS)
|
||||
PG_FUNCTION_INFO_V1(pcpatch_size);
|
||||
Datum pcpatch_size(PG_FUNCTION_ARGS)
|
||||
{
|
||||
SERIALIZED_PATCH *serpa = PG_GETARG_SERPATCH_P(0);
|
||||
SERIALIZED_PATCH *serpa = PG_GETHEADER_SERPATCH_P(0);
|
||||
PG_RETURN_INT32(VARSIZE(serpa));
|
||||
}
|
||||
|
||||
|
||||
@ -24,8 +24,10 @@
|
||||
#define POINTCLOUD_FORMATS_XML "schema"
|
||||
#define POINTCLOUD_FORMATS_SRID "srid"
|
||||
|
||||
#define PG_GETARG_SERPOINT_P(datum) (SERIALIZED_POINT*)PG_DETOAST_DATUM(PG_GETARG_DATUM(datum))
|
||||
#define PG_GETARG_SERPATCH_P(datum) (SERIALIZED_PATCH*)PG_DETOAST_DATUM(PG_GETARG_DATUM(datum))
|
||||
#define PG_GETARG_SERPOINT_P(argnum) (SERIALIZED_POINT*)PG_DETOAST_DATUM(PG_GETARG_DATUM(argnum))
|
||||
#define PG_GETARG_SERPATCH_P(argnum) (SERIALIZED_PATCH*)PG_DETOAST_DATUM(PG_GETARG_DATUM(argnum))
|
||||
|
||||
#define PG_GETHEADER_SERPATCH_P(argnum) (SERIALIZED_PATCH*)PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(argnum), 0, sizeof(SERIALIZED_PATCH))
|
||||
|
||||
#define AUTOCOMPRESS_NO 0
|
||||
#define AUTOCOMPRESS_YES 1
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user