minor edits

This commit is contained in:
Andy Eschbacher
2016-05-11 09:39:12 -04:00
parent 7c57d8b9e3
commit 2f91b8f298
+66 -56
View File
@@ -156,11 +156,10 @@ DECLARE
BEGIN BEGIN
geom_table_name := cdb_observatory._OBS_GeomTable(geom, geometry_level); geom_table_name := cdb_observatory._OBS_GeomTable(geom, geometry_level);
RAISE NOTICE 'geom_table_name: %', geom_table_name;
IF geom_table_name IS NULL IF geom_table_name IS NULL
THEN THEN
RAISE NOTICE 'Point % is outside of the data region', geom; RAISE NOTICE 'Point % is outside of the data region', ST_AsText(geom);
RETURN QUERY SELECT '{}'::text[], '{}'::NUMERIC[]; RETURN QUERY SELECT '{}'::text[], '{}'::NUMERIC[];
END IF; END IF;
@@ -170,15 +169,13 @@ BEGIN
$3);' $3);'
INTO data_table_info INTO data_table_info
using geometry_level, column_ids, time_span; using geometry_level, column_ids, time_span;
RAISE NOTICE 'data_table_info: %', data_table_info::text;
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[];
results := cdb_observatory._OBS_GetPoints(geom, results := cdb_observatory._OBS_GetPoints(geom,
geom_table_name, geom_table_name,
data_table_info); data_table_info);
RAISE NOTICE 'results: %', results;
ELSIF ST_GeometryType(geom) IN ('ST_Polygon', 'ST_MultiPolygon') ELSIF ST_GeometryType(geom) IN ('ST_Polygon', 'ST_MultiPolygon')
THEN THEN
@@ -187,14 +184,14 @@ BEGIN
geom_table_name, geom_table_name,
data_table_info); data_table_info);
END IF; END IF;
RETURN QUERY RETURN QUERY
EXECUTE EXECUTE
$query$ $query$
SELECT unnest($1) SELECT unnest($1)
$query$ $query$
USING results; USING results;
END; END;
$$ LANGUAGE plpgsql; $$ LANGUAGE plpgsql;
@@ -273,27 +270,27 @@ BEGIN
((data_table_info)[1])->>'tablename', ((data_table_info)[1])->>'tablename',
geoid geoid
); );
EXECUTE EXECUTE
query query
INTO result INTO result
USING geom; USING geom;
EXECUTE EXECUTE
$query$ $query$
select array_agg(row_to_json(t)) from( SELECT array_agg(row_to_json(t)) FROM (
select values as value, SELECT values As value,
meta->>'name' as name, meta->>'name' As name,
meta->>'tablename' as tablename, meta->>'tablename' As tablename,
meta->>'aggregate' as aggregate, meta->>'aggregate' As aggregate,
meta->>'type' as type, meta->>'type' As type,
meta->>'description' as description meta->>'description' As description
from (select unnest($1) as values, unnest($2) as meta) b FROM (SELECT unnest($1) As values, unnest($2) As meta) b
) t ) t
$query$ $query$
INTO json_result INTO json_result
USING result, data_table_info; USING result, data_table_info;
RETURN json_result; RETURN json_result;
END; END;
$$ LANGUAGE plpgsql; $$ LANGUAGE plpgsql;
@@ -374,7 +371,7 @@ BEGIN
IF time_span IS NULL THEN IF time_span IS NULL THEN
-- TODO we should determine latest timespan for this measure -- TODO we should determine latest timespan for this measure
time_span := '2010 - 2014'; time_span := '2009 - 2013';
END IF; END IF;
EXECUTE ' EXECUTE '
@@ -533,27 +530,27 @@ BEGIN
q := q || ' ) ' || q_sum || ' ]::numeric[] FROM _overlaps, values q := q || ' ) ' || q_sum || ' ]::numeric[] FROM _overlaps, values
WHERE values.geoid = _overlaps.geoid'; WHERE values.geoid = _overlaps.geoid';
EXECUTE EXECUTE
q q
INTO result INTO result
USING geom; USING geom;
EXECUTE EXECUTE
$query$ $query$
select array_agg(row_to_json(t)) from( SELECT array_agg(row_to_json(t)) FROM (
select values as value, SELECT values As value,
meta->>'name' as name, meta->>'name' As name,
meta->>'tablename' as tablename, meta->>'tablename' As tablename,
meta->>'aggregate' as aggregate, meta->>'aggregate' As aggregate,
meta->>'type' as type, meta->>'type' As type,
meta->>'description' as description meta->>'description' As description
from (select unnest($1) as values, unnest($2) as meta) b FROM (SELECT unnest($1) As values, unnest($2) As meta) b
) t ) t
$query$ $query$
INTO json_result INTO json_result
USING result, data_table_info; USING result, data_table_info;
RETURN json_result; RETURN json_result;
END; END;
$$ LANGUAGE plpgsql; $$ LANGUAGE plpgsql;
@@ -564,7 +561,7 @@ CREATE OR REPLACE FUNCTION cdb_observatory.OBS_GetSegmentSnapshot(
geom geometry, geom geometry,
boundary_id text DEFAULT NULL boundary_id text DEFAULT NULL
) )
RETURNS JSON RETURNS JSON
AS $$ AS $$
DECLARE DECLARE
target_cols text[]; target_cols text[];
@@ -644,23 +641,23 @@ target_cols := Array[
array_agg(_OBS_GET->>'value') As vals array_agg(_OBS_GET->>'value') As vals
FROM cdb_observatory._OBS_Get($1, FROM cdb_observatory._OBS_Get($1,
$2, $2,
'2010 - 2014', '2009 - 2013',
$3) $3)
), percentiles As ( ), percentiles As (
%s %s
FROM a) FROM a)
SELECT row_to_json(r) FROM SELECT row_to_json(r) FROM
( SELECT $4 as segment_name, percentiles.* ( SELECT $4 as segment_name, percentiles.*
FROM percentiles) r FROM percentiles) r
$query$, cdb_observatory._OBS_BuildSnapshotQuery(target_cols)) results; $query$, cdb_observatory._OBS_BuildSnapshotQuery(target_cols)) results;
EXECUTE EXECUTE
q q
into result into result
USING geom, target_cols, boundary_id, segment_name; USING geom, target_cols, boundary_id, segment_name;
return result; return result;
END; END;
@@ -685,7 +682,7 @@ DECLARE
BEGIN BEGIN
IF time_span IS NULL THEN IF time_span IS NULL THEN
time_span = '2010 - 2014'; time_span = '2009 - 2013';
END IF; END IF;
IF boundary_id IS NULL THEN IF boundary_id IS NULL THEN
@@ -700,13 +697,18 @@ BEGIN
RETURN QUERY SELECT '{}'::text[], '{}'::text[]; RETURN QUERY SELECT '{}'::text[], '{}'::text[];
END IF; END IF;
execute' EXECUTE '
select array_agg( _obs_getcolumndata) from cdb_observatory._OBS_GetColumnData($1, SELECT array_agg(_obs_getcolumndata)
$2, FROM cdb_observatory._OBS_GetColumnData($1, $2, $3);
$3);' '
INTO data_table_info INTO data_table_info
USING boundary_id, dimension_names, time_span; USING boundary_id, dimension_names, time_span;
IF data_table_info IS NULL
THEN
RAISE NOTICE 'No data table found for this location';
RETURN QUERY SELECT NULL::json;
END IF;
EXECUTE EXECUTE
format('SELECT geoid format('SELECT geoid
@@ -716,8 +718,15 @@ BEGIN
USING geom USING geom
INTO geoid; INTO geoid;
IF geoid IS NULL
THEN
RAISE NOTICE 'No geometry id for this location';
RETURN QUERY SELECT NULL::json;
END IF;
query := 'SELECT ARRAY['; query := 'SELECT ARRAY[';
FOR i IN 1..coalesce(array_upper(data_table_info, 1), 1)
FOR i IN 1..array_upper(data_table_info, 1)
LOOP LOOP
query = query || format('%I ', lower(((data_table_info)[i])->>'colname')); query = query || format('%I ', lower(((data_table_info)[i])->>'colname'));
IF i < array_upper(data_table_info, 1) IF i < array_upper(data_table_info, 1)
@@ -739,18 +748,19 @@ BEGIN
query query
INTO results INTO results
USING geom; USING geom;
RETURN QUERY RETURN QUERY
EXECUTE EXECUTE
$query$ $query$
select row_to_json(t) from( SELECT row_to_json(t) FROM (
select categories as category, SELECT categories As category,
meta->>'name' as name, meta->>'name' As name,
meta->>'tablename' as tablename, meta->>'tablename' As tablename,
meta->>'aggregate' as aggregate, meta->>'aggregate' As aggregate,
meta->>'type' as type, meta->>'type' As type,
meta->>'description' as description meta->>'description' As description
from (select unnest($1) as categories, unnest($2) as meta) b FROM (SELECT unnest($1) As categories,
unnest($2) As meta) As b
) t ) t
$query$ $query$
USING results, data_table_info; USING results, data_table_info;