diff --git a/src/pg/sql/41_observatory_augmentation.sql b/src/pg/sql/41_observatory_augmentation.sql index 2eec6f0..f5b9c8b 100644 --- a/src/pg/sql/41_observatory_augmentation.sql +++ b/src/pg/sql/41_observatory_augmentation.sql @@ -400,6 +400,43 @@ BEGIN END; $$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION cdb_observatory.OBS_GetMeasure( + geom GEOMETRY, + measure_id TEXT, + normalize TEXT DEFAULT 'area', -- TODO denominator, none + boundary_id TEXT DEFAULT NULL, + time_span TEXT DEFAULT NULL +) +RETURNS JSON +AS $$ +DECLARE + names TEXT[]; + vals NUMERIC[]; +BEGIN + + IF boundary_id IS NULL THEN + -- TODO we should determine best boundary for this geom + boundary_id := '"us.census.tiger".block_group'; + END IF; + + IF time_span IS NULL THEN + -- TODO we should determine latest timespan for this measure + time_span := '2009 - 2013'; + END IF; + + EXECUTE ' + SELECT names, vals FROM cdb_observatory._OBS_Get($1, ARRAY[$2], $3, $4) LIMIT 1 + ' + INTO names, vals + USING geom, measure_id, time_span, boundary_id; + + RETURN json_build_object('name', (names)[1], 'value', (vals)[1]); + +END; +$$ LANGUAGE plpgsql; + + CREATE OR REPLACE FUNCTION cdb_observatory._OBS_GetPolygons( geom geometry, geom_table_name text, @@ -686,3 +723,4 @@ BEGIN END; $$ LANGUAGE plpgsql; + diff --git a/src/pg/test/expected/41_observatory_augmentation_test.out b/src/pg/test/expected/41_observatory_augmentation_test.out index 07ce113..948b4b3 100644 --- a/src/pg/test/expected/41_observatory_augmentation_test.out +++ b/src/pg/test/expected/41_observatory_augmentation_test.out @@ -91,6 +91,16 @@ Done. {X10} | (1 row) + obs_getmeasure +---------------------------------------------------- + {"name" : "total_pop", "value" : 9516.27915900609} +(1 row) + + obs_getmeasure +---------------------------------------- + {"name" : "total_pop", "value" : 1655} +(1 row) + Dropping obs_table.sql fixture table... Done. Dropping obs_column.sql fixture table... diff --git a/src/pg/test/sql/41_observatory_augmentation_test.sql b/src/pg/test/sql/41_observatory_augmentation_test.sql index 4eacbe1..1436597 100644 --- a/src/pg/test/sql/41_observatory_augmentation_test.sql +++ b/src/pg/test/sql/41_observatory_augmentation_test.sql @@ -125,4 +125,19 @@ SELECT * FROM '"us.census.tiger".census_tract' ); +-- Point-based OBS_GetMeasure, default normalization (area) +SELECT * FROM + cdb_observatory.OBS_GetMeasure( + cdb_observatory._TestPoint(), + '"us.census.acs".B01001001' +); + +-- Poly-based OBS_GetMeasure, default normalization (none) +SELECT * FROM + cdb_observatory.OBS_GetMeasure( + cdb_observatory._TestArea(), + '"us.census.acs".B01001001' +); + + \i test/sql/drop_fixtures.sql