@@ -1,3 +1,27 @@
|
||||
1.0.3 (2016-07-25)
|
||||
|
||||
__Bugfixes__
|
||||
|
||||
* Raise exception instead of crashing when `OBS_GetMeasure` is passed a polygon
|
||||
in combination with a non-summable measure ([cartodb/issues
|
||||
#9063](https://github.com/CartoDB/cartodb/issues/9063))
|
||||
* Unnecessary dependencies on cartodb and plpythonu removed
|
||||
([#161](https://github.com/CartoDB/observatory-extension/issues/161))
|
||||
* Tests forced to run in-order on all systems
|
||||
([#162](https://github.com/CartoDB/observatory-extension/issues/162))
|
||||
* Area normalization done by square kilometer instead of square meter for
|
||||
polygons ([#158](https://github.com/CartoDB/observatory-extension/issues/158))
|
||||
* `postgres-fdw` installed as required in unit test environment
|
||||
([#166](https://github.com/CartoDB/observatory-extension/issues/166))
|
||||
|
||||
__Improvements__
|
||||
|
||||
* Added tests to make sure all functions can handle explicit NULL as default
|
||||
([#159](https://github.com/CartoDB/observatory-extension/issues/159))
|
||||
* Buffer and snaptogrid used to be far more liberal accepting problem geoms
|
||||
([#170](https://github.com/CartoDB/observatory-extension/issues/160))
|
||||
|
||||
|
||||
1.0.2 (2016-07-12)
|
||||
---
|
||||
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@ $(DATA): $(SOURCES_DATA)
|
||||
$(SED) $(REPLACEMENTS) $(SOURCES_DATA_DIR)/*.sql > $@
|
||||
|
||||
TEST_DIR = test
|
||||
REGRESS = $(notdir $(basename $(wildcard $(TEST_DIR)/sql/*test.sql)))
|
||||
REGRESS = $(sort $(notdir $(basename $(wildcard $(TEST_DIR)/sql/*test.sql))))
|
||||
REGRESS_OPTS = --inputdir='$(TEST_DIR)' --outputdir='$(TEST_DIR)'
|
||||
|
||||
PG_CONFIG = pg_config
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
comment = 'CartoDB Observatory backend extension'
|
||||
default_version = '1.0.2'
|
||||
default_version = '1.0.3'
|
||||
requires = 'postgis, postgres_fdw'
|
||||
superuser = true
|
||||
schema = cdb_observatory
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -361,6 +361,7 @@ DECLARE
|
||||
sql TEXT;
|
||||
numer_name TEXT;
|
||||
BEGIN
|
||||
geom := ST_SnapToGrid(geom, 0.000001);
|
||||
|
||||
EXECUTE
|
||||
$query$
|
||||
@@ -383,6 +384,7 @@ BEGIN
|
||||
geom_type := 'point';
|
||||
ELSIF ST_GeometryType(geom) IN ('ST_Polygon', 'ST_MultiPolygon') THEN
|
||||
geom_type := 'polygon';
|
||||
geom := ST_Buffer(geom, 0.000001);
|
||||
ELSE
|
||||
RAISE EXCEPTION 'Invalid geometry type (%), can only handle ''ST_Point'', ''ST_Polygon'', and ''ST_MultiPolygon''',
|
||||
ST_GeometryType(geom);
|
||||
@@ -439,7 +441,7 @@ BEGIN
|
||||
WHERE ST_Intersects(%L, geom.%I)
|
||||
AND ST_Area(ST_Intersection(%L, geom.%I)) / ST_Area(geom.%I) > 0)
|
||||
SELECT SUM(numer.%I * (SELECT _geom.overlap FROM _geom WHERE _geom.geom_ref = numer.%I)) /
|
||||
ST_Area(%L::Geography)
|
||||
(ST_Area(%L::Geography) / 1000000)
|
||||
FROM observatory.%I numer
|
||||
WHERE numer.%I = ANY ((SELECT ARRAY_AGG(geom_ref) FROM _geom)::TEXT[])',
|
||||
geom, geom_colname, geom_colname,
|
||||
@@ -481,7 +483,7 @@ BEGIN
|
||||
ELSIF map_type = 'predenominated' THEN
|
||||
IF numer_aggregate NOT ILIKE 'sum' THEN
|
||||
RAISE EXCEPTION 'Cannot calculate "%" (%) for custom area as it cannot be summed, use ST_PointOnSurface instead',
|
||||
numer_name, numer_id;
|
||||
numer_name, measure_id;
|
||||
ELSE
|
||||
sql = format('WITH _geom AS (SELECT ST_Area(ST_Intersection(%L, geom.%I))
|
||||
/ ST_Area(geom.%I) overlap, geom.%I geom_ref
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
-- Install dependencies
|
||||
CREATE EXTENSION postgis;
|
||||
CREATE EXTENSION plpythonu;
|
||||
CREATE EXTENSION cartodb;
|
||||
CREATE EXTENSION postgres_fdw;
|
||||
-- Install the extension
|
||||
CREATE EXTENSION observatory VERSION 'dev';
|
||||
|
||||
@@ -42,15 +42,30 @@ t
|
||||
obs_getmeasure_total_pop_point_test
|
||||
t
|
||||
(1 row)
|
||||
obs_getmeasure_total_pop_point_null_normalization_test
|
||||
t
|
||||
(1 row)
|
||||
obs_getmeasure_total_pop_point_area_test
|
||||
t
|
||||
(1 row)
|
||||
obs_getmeasure_total_pop_polygon_test
|
||||
t
|
||||
(1 row)
|
||||
obs_getmeasure_total_pop_polygon_null_normalization_test
|
||||
t
|
||||
(1 row)
|
||||
obs_getmeasure_total_pop_polygon_area_test
|
||||
t
|
||||
(1 row)
|
||||
obs_getmeasure_total_male_point_denominator
|
||||
t
|
||||
(1 row)
|
||||
obs_getmeasure_total_male_poly_denominator
|
||||
t
|
||||
(1 row)
|
||||
obs_getmeasure_bad_geometry
|
||||
t
|
||||
(1 row)
|
||||
obs_getcategory_point
|
||||
t
|
||||
(1 row)
|
||||
@@ -63,12 +78,18 @@ t
|
||||
obs_getpopulation_polygon_test
|
||||
t
|
||||
(1 row)
|
||||
obs_getpopulation_polygon_null_test
|
||||
t
|
||||
(1 row)
|
||||
obs_getuscensusmeasure_point_male_pop
|
||||
t
|
||||
(1 row)
|
||||
obs_getuscensusmeasure
|
||||
t
|
||||
(1 row)
|
||||
obs_getuscensusmeasure_null
|
||||
t
|
||||
(1 row)
|
||||
obs_getuscensuscategory_point
|
||||
t
|
||||
(1 row)
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
-- Install dependencies
|
||||
CREATE EXTENSION postgis;
|
||||
CREATE EXTENSION plpythonu;
|
||||
CREATE EXTENSION cartodb;
|
||||
CREATE EXTENSION postgres_fdw;
|
||||
|
||||
-- Install the extension
|
||||
CREATE EXTENSION observatory VERSION 'dev';
|
||||
|
||||
@@ -148,6 +148,22 @@ SELECT abs(OBS_GetMeasure_total_pop_point - 10923.093200390833950) / 10923.09320
|
||||
'us.census.acs.B01003001'
|
||||
) As t(OBS_GetMeasure_total_pop_point);
|
||||
|
||||
-- Point-based OBS_GetMeasure, default normalization by NULL (area)
|
||||
-- is result within 0.1% of expected
|
||||
SELECT abs(OBS_GetMeasure_total_pop_point_null_normalization - 10923.093200390833950) / 10923.093200390833950 < 0.001 As OBS_GetMeasure_total_pop_point_null_normalization_test FROM
|
||||
cdb_observatory.OBS_GetMeasure(
|
||||
cdb_observatory._TestPoint(),
|
||||
'us.census.acs.B01003001', NULL
|
||||
) As t(OBS_GetMeasure_total_pop_point_null_normalization);
|
||||
|
||||
-- Point-based OBS_GetMeasure, explicit area normalization area
|
||||
-- is result within 0.1% of expected
|
||||
SELECT abs(OBS_GetMeasure_total_pop_point_area - 10923.093200390833950) / 10923.093200390833950 < 0.001 As OBS_GetMeasure_total_pop_point_area_test FROM
|
||||
cdb_observatory.OBS_GetMeasure(
|
||||
cdb_observatory._TestPoint(),
|
||||
'us.census.acs.B01003001', 'area'
|
||||
) As t(OBS_GetMeasure_total_pop_point_area);
|
||||
|
||||
-- Poly-based OBS_GetMeasure, default normalization (none)
|
||||
-- is result within 0.1% of expected
|
||||
SELECT abs(OBS_GetMeasure_total_pop_polygon - 12327.3133495107) / 12327.3133495107 < 0.001 As OBS_GetMeasure_total_pop_polygon_test FROM
|
||||
@@ -156,6 +172,22 @@ SELECT abs(OBS_GetMeasure_total_pop_polygon - 12327.3133495107) / 12327.31334951
|
||||
'us.census.acs.B01003001'
|
||||
) As t(OBS_GetMeasure_total_pop_polygon);
|
||||
|
||||
-- Poly-based OBS_GetMeasure, default normalization by NULL (none)
|
||||
-- is result within 0.1% of expected
|
||||
SELECT abs(OBS_GetMeasure_total_pop_polygon_null_normalization - 12327.3133495107) / 12327.3133495107 < 0.001 As OBS_GetMeasure_total_pop_polygon_null_normalization_test FROM
|
||||
cdb_observatory.OBS_GetMeasure(
|
||||
cdb_observatory._TestArea(),
|
||||
'us.census.acs.B01003001', NULL
|
||||
) As t(OBS_GetMeasure_total_pop_polygon_null_normalization);
|
||||
|
||||
-- Poly-based OBS_GetMeasure, explicit area normalization
|
||||
-- is result within 0.1% of expected
|
||||
SELECT abs(OBS_GetMeasure_total_pop_polygon_area - 15787.4325563538) / 15787.4325563538 < 0.001 As OBS_GetMeasure_total_pop_polygon_area_test FROM
|
||||
cdb_observatory.OBS_GetMeasure(
|
||||
cdb_observatory._TestArea(),
|
||||
'us.census.acs.B01003001', 'area'
|
||||
) As t(OBS_GetMeasure_total_pop_polygon_area);
|
||||
|
||||
-- Point-based OBS_GetMeasure with denominator normalization
|
||||
SELECT (abs(cdb_observatory.OBS_GetMeasure(
|
||||
cdb_observatory._TestPoint(),
|
||||
@@ -166,6 +198,11 @@ SELECT abs(cdb_observatory.OBS_GetMeasure(
|
||||
cdb_observatory._TestArea(),
|
||||
'us.census.acs.B01001002', 'denominator') - 0.49026340444793965457) / 0.49026340444793965457 < 0.001 As OBS_GetMeasure_total_male_poly_denominator;
|
||||
|
||||
-- Poly-based OBS_GetMeasure with one very bad geom
|
||||
SELECT abs(cdb_observatory.OBS_GetMeasure(
|
||||
cdb_observatory._ProblemTestArea(),
|
||||
'us.census.acs.B01003001') - 96230.2929825897) / 96230.2929825897 < 0.001 As OBS_GetMeasure_bad_geometry;
|
||||
|
||||
-- Point-based OBS_GetCategory
|
||||
SELECT cdb_observatory.OBS_GetCategory(
|
||||
cdb_observatory._TestPoint(), 'us.census.spielman_singleton_segments.X10') = 'Wealthy, urban without Kids' As OBS_GetCategory_point;
|
||||
@@ -187,6 +224,13 @@ FROM
|
||||
cdb_observatory._TestArea()
|
||||
) As m(obs_getpopulation_polygon);
|
||||
|
||||
-- Poly-based OBS_GetPopulation, default normalization (none) specified as NULL
|
||||
SELECT (abs(obs_getpopulation_polygon_null - 12327.3133495107) / 12327.3133495107) < 0.001 As obs_getpopulation_polygon_null_test
|
||||
FROM
|
||||
cdb_observatory.OBS_GetPopulation(
|
||||
cdb_observatory._TestArea(), NULL
|
||||
) As m(obs_getpopulation_polygon_null);
|
||||
|
||||
-- Point-based OBS_GetUSCensusMeasure, default normalization (area)
|
||||
SELECT (abs(cdb_observatory.obs_getuscensusmeasure(
|
||||
cdb_observatory._testpoint(), 'male population') - 6789.5647735060920500) / 6789.5647735060920500) < 0.001 As obs_getuscensusmeasure_point_male_pop;
|
||||
@@ -195,6 +239,11 @@ SELECT (abs(cdb_observatory.obs_getuscensusmeasure(
|
||||
SELECT (abs(cdb_observatory.obs_getuscensusmeasure(
|
||||
cdb_observatory._testarea(), 'male population') - 6043.63061042765) / 6043.63061042765) < 0.001 As obs_getuscensusmeasure;
|
||||
|
||||
-- Poly-based OBS_GetUSCensusMeasure, default normalization (none) specified
|
||||
-- with NULL
|
||||
SELECT (abs(cdb_observatory.obs_getuscensusmeasure(
|
||||
cdb_observatory._testarea(), 'male population', NULL) - 6043.63061042765) / 6043.63061042765) < 0.001 As obs_getuscensusmeasure_null;
|
||||
|
||||
-- Point-based OBS_GetUSCensusCategory
|
||||
SELECT cdb_observatory.OBS_GetUSCensusCategory(
|
||||
cdb_observatory._testpoint(), 'Spielman-Singleton Segments: 10 Clusters') = 'Wealthy, urban without Kids' As OBS_GetUSCensusCategory_point;
|
||||
|
||||
@@ -34,7 +34,7 @@ SELECT cdb_observatory.OBS_GetBoundary(
|
||||
-- expect null geometry since there are no census tracts at null island
|
||||
-- timespan implictly null
|
||||
SELECT cdb_observatory.OBS_GetBoundary(
|
||||
CDB_LatLng(0, 0),
|
||||
ST_SetSRID(ST_MakePoint(0, 0), 4326),
|
||||
'us.census.tiger.census_tract'
|
||||
) IS NULL As OBS_GetBoundary_null_island_census_tract;
|
||||
|
||||
@@ -78,7 +78,7 @@ SELECT cdb_observatory.OBS_GetBoundaryId(
|
||||
|
||||
-- should give back null since there is not a census tract at null island
|
||||
SELECT cdb_observatory.OBS_GetBoundaryId(
|
||||
CDB_LatLng(0, 0),
|
||||
ST_SetSRID(ST_MakePoint(0, 0), 4326),
|
||||
'us.census.tiger.census_tract'
|
||||
) IS NULL As OBS_GetBoundaryId_null_island;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user