first pass getcategories & tests

This commit is contained in:
John Krauss
2016-04-22 13:52:53 -04:00
parent 830a65b93f
commit 7e9047eaf0
2 changed files with 86 additions and 0 deletions

View File

@@ -456,6 +456,42 @@ BEGIN
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION cdb_observatory.OBS_GetCategory(
geom GEOMETRY,
category_id TEXT,
boundary_id TEXT DEFAULT NULL,
time_span TEXT DEFAULT NULL
)
RETURNS TEXT
AS $$
DECLARE
names TEXT[];
category_ids TEXT[];
denominator_id TEXT;
categories TEXT[];
BEGIN
IF boundary_id IS NULL THEN
-- TODO we should determine best boundary for this geom
boundary_id := '"us.census.tiger".census_tract';
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, categories FROM cdb_observatory._OBS_GetCategories($1, $2, $3, $4) LIMIT 1
'
INTO names, categories
USING geom, ARRAY[category_id], boundary_id, time_span;
RETURN (categories)[1];
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION cdb_observatory.OBS_GetUSCensusMeasure(
geom GEOMETRY,
name TEXT,
@@ -489,6 +525,39 @@ BEGIN
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION cdb_observatory.OBS_GetUSCensusCategory(
geom GEOMETRY,
name TEXT,
boundary_id TEXT DEFAULT NULL,
time_span TEXT DEFAULT NULL
)
RETURNS TEXT AS $$
DECLARE
standardized_name text;
category_id text;
result TEXT;
BEGIN
standardized_name = cdb_observatory._OBS_StandardizeMeasureName(name);
EXECUTE $string$
SELECT c.id
FROM observatory.obs_column c
--JOIN observatory.obs_column_tag ct
-- ON c.id = ct.column_id
WHERE cdb_observatory._OBS_StandardizeMeasureName(c.name) = $1
AND c.type ILIKE 'TEXT'
AND c.id ILIKE '"us.census%' -- TODO this should be done by tag
--AND ct.tag_id = '"us.census.acs".demographics'
$string$
INTO category_id
USING standardized_name;
EXECUTE 'SELECT cdb_observatory.OBS_GetCategory($1, $2, $3, $4)'
INTO result
USING geom, category_id, boundary_id, time_span;
RETURN result;
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION cdb_observatory.OBS_GetPopulation(
geom geometry,

View File

@@ -149,6 +149,14 @@ SELECT cdb_observatory.OBS_GetMeasure(
cdb_observatory._TestArea(),
'"us.census.acs".B01001002', 'denominator');
-- Point-based OBS_GetCategory
SELECT cdb_observatory.OBS_GetCategory(
cdb_observatory._TestPoint(), '"us.census.spielman_singleton_segments".X10');
-- Poly-based OBS_GetCategory
SELECT cdb_observatory.OBS_GetCategory(
cdb_observatory._TestArea(), '"us.census.spielman_singleton_segments".X10');
-- Point-based OBS_GetPopulation, default normalization (area)
SELECT * FROM
cdb_observatory.OBS_GetPopulation(
@@ -169,4 +177,13 @@ SELECT cdb_observatory.obs_getuscensusmeasure(
SELECT cdb_observatory.obs_getuscensusmeasure(
cdb_observatory._testarea(), 'male population');
-- Point-based OBS_GetUSCensusCategory
SELECT cdb_observatory.OBS_GetUSCensusCategory(
cdb_observatory._testpoint(), 'SS Segment, 10 clusters');
-- Area-based OBS_GetUSCensusCategory
SELECT cdb_observatory.OBS_GetUSCensusCategory(
cdb_observatory._testarea(), 'SS Segment, 10 clusters');
\i test/sql/drop_fixtures.sql