removing hard-coded geoid from _obs_getpoints

This commit is contained in:
Andy Eschbacher
2016-05-11 11:25:08 -04:00
parent c05d4cb909
commit ec1c2f8dfb
+28 -6
View File
@@ -169,6 +169,10 @@ BEGIN
INTO data_table_info INTO data_table_info
USING geometry_level, column_ids, time_span; USING geometry_level, column_ids, time_span;
IF data_table_info IS NULL THEN
RAISE NOTICE 'Cannot find data table for boundary ID %, column_ids %, and time_span %', geometry_level, column_ids, time_span;
END IF;
IF ST_GeometryType(geom) = 'ST_Point' IF ST_GeometryType(geom) = 'ST_Point'
THEN THEN
RAISE NOTICE 'geom_table_name %, data_table_info %', geom_table_name, data_table_info::json[]; RAISE NOTICE 'geom_table_name %, data_table_info %', geom_table_name, data_table_info::json[];
@@ -198,7 +202,7 @@ $$ LANGUAGE plpgsql;
-- otherwise normalize it to the census block area and return that -- otherwise normalize it to the census block area and return that
CREATE OR REPLACE FUNCTION cdb_observatory._OBS_GetPoints( CREATE OR REPLACE FUNCTION cdb_observatory._OBS_GetPoints(
geom geometry(Geometry, 4326), geom geometry(Geometry, 4326),
geom_table_name text, geom_table_name text, -- TODO: change to boundary_id
data_table_info json[] data_table_info json[]
) )
RETURNS json[] RETURNS json[]
@@ -209,14 +213,31 @@ DECLARE
query text; query text;
i int; i int;
geoid text; geoid text;
geoid_colname text;
area NUMERIC; area NUMERIC;
BEGIN BEGIN
-- TODO: does 'geoid' need to be generalized to geom_ref?? -- TODO we're assuming our geom_table has only one geom_ref column
-- we *really* should pass in both geom_table_name and boundary_id
EXECUTE EXECUTE
format('SELECT geoid format('SELECT ct.colname
FROM observatory.%I FROM observatory.obs_column_to_column c2c,
WHERE ST_Within($1, the_geom)', observatory.obs_column_table ct,
observatory.obs_table t
WHERE c2c.reltype = ''geom_ref''
AND ct.column_id = c2c.source_id
AND ct.table_id = t.id
AND t.tablename = %L'
, geom_table_name)
INTO geoid_colname;
RAISE NOTICE 'geom_table_name: %', geom_table_name;
RAISE NOTICE 'colname: %', geoid_colname;
EXECUTE
format('SELECT %I
FROM observatory.%I
WHERE ST_Within($1, the_geom)',
geoid_colname,
geom_table_name) geom_table_name)
USING geom USING geom
INTO geoid; INTO geoid;
@@ -226,8 +247,9 @@ BEGIN
EXECUTE EXECUTE
format('SELECT ST_Area(the_geom::geography) / (1000 * 1000) format('SELECT ST_Area(the_geom::geography) / (1000 * 1000)
FROM observatory.%I FROM observatory.%I
WHERE geoid = %L', WHERE %I = %L',
geom_table_name, geom_table_name,
geoid_colname,
geoid) geoid)
INTO area; INTO area;