If getmeta returns null, retry using only the geography level
This commit is contained in:
parent
0ae15880e0
commit
7c559fe7d5
@ -253,20 +253,20 @@ DECLARE
|
|||||||
getmeta_parameters TEXT;
|
getmeta_parameters TEXT;
|
||||||
meta JSON;
|
meta JSON;
|
||||||
|
|
||||||
numer_tablename_do TEXT;
|
numer_tablename_do TEXT DEFAULT '';
|
||||||
numer_tablenames_do TEXT[];
|
numer_tablenames_do TEXT[] DEFAULT ARRAY['']::TEXT[];
|
||||||
numer_tablenames_do_outer TEXT DEFAULT '';
|
numer_tablenames_do_outer TEXT DEFAULT '';
|
||||||
numer_tablenames_mc TEXT;
|
numer_tablenames_mc TEXT;
|
||||||
numer_colnames_do TEXT;
|
numer_colnames_do TEXT DEFAULT '';
|
||||||
numer_colnames_do_qualified TEXT;
|
numer_colnames_do_qualified TEXT DEFAULT '';
|
||||||
numer_colnames_do_normalized TEXT;
|
numer_colnames_do_normalized TEXT DEFAULT '';
|
||||||
numer_colnames_mc TEXT;
|
numer_colnames_mc TEXT;
|
||||||
numer_colnames_mc_normalized TEXT;
|
numer_colnames_mc_normalized TEXT;
|
||||||
geom_tablenames TEXT;
|
geom_tablenames TEXT;
|
||||||
geom_colnames TEXT;
|
geom_colnames TEXT;
|
||||||
geom_geomref_colnames TEXT;
|
geom_geomref_colnames TEXT;
|
||||||
geom_geomref_colnames_qualified TEXT;
|
geom_geomref_colnames_qualified TEXT;
|
||||||
geom_relations_do TEXT[];
|
geom_relations_do TEXT[] DEFAULT ARRAY['']::TEXT[];
|
||||||
geom_relations_mc TEXT;
|
geom_relations_mc TEXT;
|
||||||
|
|
||||||
simplification_tolerance NUMERIC DEFAULT 0;
|
simplification_tolerance NUMERIC DEFAULT 0;
|
||||||
@ -317,39 +317,55 @@ BEGIN
|
|||||||
|
|
||||||
meta := cdb_observatory.obs_getmeta(geom, getmeta_parameters::json, 1::integer, 1::integer, 1::integer);
|
meta := cdb_observatory.obs_getmeta(geom, getmeta_parameters::json, 1::integer, 1::integer, 1::integer);
|
||||||
|
|
||||||
IF meta IS NULL THEN
|
IF meta IS NOT NULL THEN
|
||||||
RETURN;
|
SELECT array_agg(distinct 'observatory.'||numer_tablename) numer_tablenames,
|
||||||
|
string_agg(distinct numer_colname, ',')||',' numer_colnames,
|
||||||
|
string_agg(distinct numer_tablename||'.'||numer_colname, ',')||',' numer_colnames_qualified,
|
||||||
|
string_agg(distinct numer_colname||area_normalization||' '||numer_colname, ',')||',' numer_colnames_normalized,
|
||||||
|
(array_agg(distinct 'observatory.'||geom_tablename))[1] geom_tablenames,
|
||||||
|
(array_agg(distinct geom_colname))[1] geom_colnames,
|
||||||
|
(array_agg(distinct geom_geomref_colname))[1] geom_geomref_colnames,
|
||||||
|
(array_agg(distinct geom_tablename||'.'||geom_geomref_colname))[1] geom_geomref_colnames_qualified,
|
||||||
|
array_agg(distinct numer_tablename||'.'||numer_geomref_colname||'='||geom_tablename||'.'||geom_geomref_colname) geom_relations
|
||||||
|
INTO numer_tablenames_do, numer_colnames_do, numer_colnames_do_qualified, numer_colnames_do_normalized, geom_tablenames, geom_colnames,
|
||||||
|
geom_geomref_colnames, geom_geomref_colnames_qualified, geom_relations_do
|
||||||
|
FROM json_to_recordset(meta)
|
||||||
|
AS x(id TEXT, numer_id TEXT, numer_aggregate TEXT, numer_colname TEXT, numer_geomref_colname TEXT, numer_tablename TEXT,
|
||||||
|
numer_type TEXT, denom_id TEXT, denom_aggregate TEXT, denom_colname TEXT, denom_geomref_colname TEXT, denom_tablename TEXT,
|
||||||
|
denom_type TEXT, denom_reltype TEXT, geom_id TEXT, geom_colname TEXT, geom_geomref_colname TEXT, geom_tablename TEXT,
|
||||||
|
geom_type TEXT, numer_timespan TEXT, geom_timespan TEXT, normalization TEXT, api_method TEXT, api_args JSON);
|
||||||
|
|
||||||
|
IF numer_tablenames_do IS NULL OR numer_colnames_do IS NULL OR numer_colnames_do_qualified IS NULL OR numer_colnames_do_normalized IS NULL
|
||||||
|
OR geom_tablenames IS NULL OR geom_colnames IS NULL OR geom_geomref_colnames IS NULL OR geom_geomref_colnames_qualified IS NULL
|
||||||
|
OR geom_relations_do IS NULL THEN
|
||||||
|
RETURN;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
i := 0;
|
||||||
|
FOREACH numer_tablename_do IN ARRAY numer_tablenames_do LOOP
|
||||||
|
i := i + 1;
|
||||||
|
numer_tablenames_do_outer := numer_tablenames_do_outer || 'LEFT OUTER JOIN ' || numer_tablename_do || ' ON ' || geom_relations_do[i] || ' ';
|
||||||
|
END LOOP;
|
||||||
|
ELSE
|
||||||
|
getmeta_parameters := '[{"geom_id":"' || geography_level || clipped ||'"}]';
|
||||||
|
meta := cdb_observatory.obs_getmeta(geom, getmeta_parameters::json, 1::integer, 1::integer, 1::integer);
|
||||||
|
|
||||||
|
IF meta IS NULL THEN
|
||||||
|
RETURN;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SELECT (array_agg(distinct 'observatory.'||geom_tablename))[1] geom_tablenames,
|
||||||
|
(array_agg(distinct geom_colname))[1] geom_colnames,
|
||||||
|
(array_agg(distinct geom_geomref_colname))[1] geom_geomref_colnames,
|
||||||
|
(array_agg(distinct geom_tablename||'.'||geom_geomref_colname))[1] geom_geomref_colnames_qualified
|
||||||
|
FROM json_to_recordset(meta)
|
||||||
|
INTO geom_tablenames, geom_colnames, geom_geomref_colnames, geom_geomref_colnames_qualified
|
||||||
|
AS x(id TEXT, numer_id TEXT, numer_aggregate TEXT, numer_colname TEXT, numer_geomref_colname TEXT, numer_tablename TEXT,
|
||||||
|
numer_type TEXT, denom_id TEXT, denom_aggregate TEXT, denom_colname TEXT, denom_geomref_colname TEXT, denom_tablename TEXT,
|
||||||
|
denom_type TEXT, denom_reltype TEXT, geom_id TEXT, geom_colname TEXT, geom_geomref_colname TEXT, geom_tablename TEXT,
|
||||||
|
geom_type TEXT, numer_timespan TEXT, geom_timespan TEXT, normalization TEXT, api_method TEXT, api_args JSON);
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
SELECT array_agg(distinct 'observatory.'||numer_tablename) numer_tablenames,
|
|
||||||
string_agg(distinct numer_colname, ',') numer_colnames,
|
|
||||||
string_agg(distinct numer_tablename||'.'||numer_colname, ',') numer_colnames_qualified,
|
|
||||||
string_agg(distinct numer_colname||area_normalization||' '||numer_colname, ',') numer_colnames_normalized,
|
|
||||||
(array_agg(distinct 'observatory.'||geom_tablename))[1] geom_tablenames,
|
|
||||||
(array_agg(distinct geom_colname))[1] geom_colnames,
|
|
||||||
(array_agg(distinct geom_geomref_colname))[1] geom_geomref_colnames,
|
|
||||||
(array_agg(distinct geom_tablename||'.'||geom_geomref_colname))[1] geom_geomref_colnames_qualified,
|
|
||||||
array_agg(distinct numer_tablename||'.'||numer_geomref_colname||'='||geom_tablename||'.'||geom_geomref_colname) geom_relations
|
|
||||||
INTO numer_tablenames_do, numer_colnames_do, numer_colnames_do_qualified, numer_colnames_do_normalized, geom_tablenames, geom_colnames,
|
|
||||||
geom_geomref_colnames, geom_geomref_colnames_qualified, geom_relations_do
|
|
||||||
FROM json_to_recordset(meta)
|
|
||||||
AS x(id TEXT, numer_id TEXT, numer_aggregate TEXT, numer_colname TEXT, numer_geomref_colname TEXT, numer_tablename TEXT,
|
|
||||||
numer_type TEXT, denom_id TEXT, denom_aggregate TEXT, denom_colname TEXT, denom_geomref_colname TEXT, denom_tablename TEXT,
|
|
||||||
denom_type TEXT, denom_reltype TEXT, geom_id TEXT, geom_colname TEXT, geom_geomref_colname TEXT, geom_tablename TEXT,
|
|
||||||
geom_type TEXT, numer_timespan TEXT, geom_timespan TEXT, normalization TEXT, api_method TEXT, api_args JSON);
|
|
||||||
|
|
||||||
IF numer_tablenames_do IS NULL OR numer_colnames_do IS NULL OR numer_colnames_do_qualified IS NULL OR numer_colnames_do_normalized IS NULL
|
|
||||||
OR geom_tablenames IS NULL OR geom_colnames IS NULL OR geom_geomref_colnames IS NULL OR geom_geomref_colnames_qualified IS NULL
|
|
||||||
OR geom_relations_do IS NULL THEN
|
|
||||||
RETURN;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
i := 0;
|
|
||||||
FOREACH numer_tablename_do IN ARRAY numer_tablenames_do LOOP
|
|
||||||
i := i + 1;
|
|
||||||
numer_tablenames_do_outer := numer_tablenames_do_outer || 'LEFT OUTER JOIN ' || numer_tablename_do || ' ON ' || geom_relations_do[i] || ' ';
|
|
||||||
END LOOP;
|
|
||||||
|
|
||||||
---------MasterCard---------
|
---------MasterCard---------
|
||||||
SELECT tablename from pg_tables
|
SELECT tablename from pg_tables
|
||||||
INTO mastercard_table
|
INTO mastercard_table
|
||||||
@ -375,10 +391,10 @@ BEGIN
|
|||||||
RETURN QUERY EXECUTE format(
|
RETURN QUERY EXECUTE format(
|
||||||
$query$
|
$query$
|
||||||
SELECT mvtgeom,
|
SELECT mvtgeom,
|
||||||
(select row_to_json(_) from (select id, %13$s, %3$s, area_ratio) as _) as mvtdata
|
(select row_to_json(_) from (select id, %13$s %3$s, area_ratio) as _) as mvtdata
|
||||||
FROM (
|
FROM (
|
||||||
SELECT ST_AsMVTGeom(the_geom, $1, $2, $3, $4) AS mvtgeom, %12$s as id, %10$s, %11$s, area_ratio FROM (
|
SELECT ST_AsMVTGeom(the_geom, $1, $2, $3, $4) AS mvtgeom, %12$s as id, %10$s %11$s, area_ratio FROM (
|
||||||
SELECT %1$s the_geom, %12$s, %2$s, %3$s,
|
SELECT %1$s the_geom, %12$s, %2$s %3$s,
|
||||||
CASE WHEN ST_Within($5, %1$s)
|
CASE WHEN ST_Within($5, %1$s)
|
||||||
THEN ST_Area($5) / Nullif(ST_Area(%1$s), 0)
|
THEN ST_Area($5) / Nullif(ST_Area(%1$s), 0)
|
||||||
WHEN ST_Within(%1$s, $5)
|
WHEN ST_Within(%1$s, $5)
|
||||||
|
Loading…
Reference in New Issue
Block a user