From d0e66910a0a1b228552a96d596499fb19e7d5ecb Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Tue, 15 Dec 2015 17:36:27 +0100 Subject: [PATCH 01/52] Sketch for new Overview-creation functionality --- doc/CDB_Overviews.md | 28 +++++++++ scripts-available/CDB_Overviews.sql | 92 +++++++++++++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 doc/CDB_Overviews.md create mode 100644 scripts-available/CDB_Overviews.sql diff --git a/doc/CDB_Overviews.md b/doc/CDB_Overviews.md new file mode 100644 index 0000000..e934b30 --- /dev/null +++ b/doc/CDB_Overviews.md @@ -0,0 +1,28 @@ +Create overviews for vector dataset. + +#### Using the function + +The table for which overviews will be generated should be +a Cartodbfied dataset with vector geometry. + +```sql +SELECT CDB_CreateOverviews('table_name'); +--- Generates overview tables for the dataset +``` + +#### Arguments + +CDB_CreateOverviews(table_name, ref_z_strategy, reduction_strategy) + +* **table_name** regclass, table for which overviews will be generated +* **ref_z_strategy** regproc, function that provides the Z-scale strategy. + It returns the base Z level for the dataset. + It should have these arguments: + - **table_name** regclass, table to compute the reference Z scale for +* **reduction_strategy** regproc, function that provides the reduction strategy + to generate an overview table from a table for a smaller scale (higher Z number). + It returns the name of the generated table. + It should have these arguments: + - **base_table_name** regclass, base table to be reduced. + - **base_z** integer, base Z level assigned to the base table. + - **overview_z** integer, Z level for which to generate the overview. diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql new file mode 100644 index 0000000..6ace4a2 --- /dev/null +++ b/scripts-available/CDB_Overviews.sql @@ -0,0 +1,92 @@ + +CREATE OR REPLACE FUNCTION _CDB_Dummy_Ref_Z_Strategy(reloid REGCLASS) +RETURNS INTEGER +AS $$ + BEGIN + -- TODO: should determine the proper *base* level for the table considering + -- the density of features and precision/detail of the data, + -- so that for Z levels equal or greater than the reference, + -- the data can be represented clearly (without having to render uneccessary + -- detail) + RETURN 9; + END; +$$ LANGUAGE PLPGSQL STABLE; + +CREATE OR REPLACE FUNCTION _CDB_Overview_Name(ref REGCLASS, ref_z INTEGER, overview_z INTEGER) +RETURNS TEXT +AS $$ + DECLARE + base TEXT; + suffix TEXT; + is_overview BOOLEAN; + BEGIN + suffix := Format('_ov%', ref_z); + SELECT ref::text LIKE Format('%%%s', suffix) INTO is_overview; + IF is_overview THEN + SELECT substring(ref::text FROM 1 FOR length(ref::text)-length(suffix)) INTO base; + ELSE + base := ref; + END IF; + RETURN Format('%s_ov%s', base::text, overview_z); + END +$$ LANGUAGE PLPGSQL IMMUTABLE; + +CREATE OR REPLACE FUNCTION _CDB_Dummy_Reduce_Strategy(reloid REGCLASS, ref_z INTEGER, overview_z INTEGER) +RETURNS REGCLASS +AS $$ + DECLARE + overview_rel TEXT; + reduction FLOAT8; + base_name TEXT; + BEGIN + overview_rel := _CDB_Overview_Name(reloid, ref_z, overview_z); + -- TODO: implement a proper reduction technique. + -- Here we're just inefficiently sampling the data to mantain + -- the approximate visual density of the reference level. + reduction := power(2, 2*(overview_z - ref_z)); + EXECUTE Format('DROP TABLE IF EXISTS %s CASCADE;', overview_rel); + EXECUTE Format('CREATE TABLE %s AS SELECT * FROM %s WHERE random() < %s;', overview_rel, reloid, reduction); + RETURN overview_rel; + END; +$$ LANGUAGE PLPGSQL; + +CREATE OR REPLACE FUNCTION CDB_CreateOverviews( + reloid REGCLASS, + refscale_strategy regproc DEFAULT '_CDB_Dummy_Ref_Z_Strategy'::regproc, + reduce_strategy regproc DEFAULT '_CDB_Dummy_Reduce_Strategy'::regproc +) +RETURNS text[] +AS $$ +DECLARE + ref_z integer; + overviews_z integer[]; + base_z integer; + base_rel REGCLASS; + overview_z integer; + overview_tables REGCLASS[]; +BEGIN + -- Determine the referece zoom level + EXECUTE 'SELECT ' || quote_ident(refscale_strategy::text) || Format('(''%s'');', reloid) INTO ref_z; + + -- Determine overlay zoom levels + -- TODO: should be handled by the refscale_stragegy? + overview_z := ref_z - 1; + WHILE overview_z >= 0 LOOP + SELECT array_append(overviews_z, overview_z) INTO overviews_z; + overview_z := overview_z - 2; + END LOOP; + + -- Create overlay tables + base_z := ref_z; + base_rel := reloid; + FOREACH overview_z IN ARRAY overviews_z LOOP + EXECUTE 'SELECT ' || quote_ident(reduce_strategy::text) || Format('(''%s'', %s, %s);', base_rel, base_z, overview_z) INTO base_rel; + SELECT array_append(overview_tables, base_rel) INTO overview_tables; + END LOOP; + + -- TODO: we'll need to store metadata somewhere to define + -- which overlay levels are available. + + RETURN overview_tables; +END; +$$ LANGUAGE PLPGSQL; From 4c85d7f3ad85607b85cadf9ea27952b23240b0f2 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Tue, 15 Dec 2015 19:12:48 +0100 Subject: [PATCH 02/52] Compute the reference Z level for a table --- scripts-available/CDB_Overviews.sql | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 6ace4a2..0c60c79 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -2,13 +2,23 @@ CREATE OR REPLACE FUNCTION _CDB_Dummy_Ref_Z_Strategy(reloid REGCLASS) RETURNS INTEGER AS $$ + DECLARE + lim FLOAT8 := 1000; -- TODO: determine/parameterize this + fd FLOAT8; + c FLOAT8; BEGIN - -- TODO: should determine the proper *base* level for the table considering - -- the density of features and precision/detail of the data, - -- so that for Z levels equal or greater than the reference, - -- the data can be represented clearly (without having to render uneccessary - -- detail) - RETURN 9; + -- lim maximum number of (desiderable) features per tile + -- we have c = 2*Pi*R = CDB_XYZ_Resolution(-8) (earth circumference) + -- fd: feature density: number of features per unit of area (count(*)/ST_Area()) + -- ta(z): tile area = power(c*power(2,z), 2) = c*c*power(2,2*z) + -- => fd*ta(z) if the average number of features per tile at level z + -- find minimum z so that fd*ta(z) <= lim + -- compute a rough 'feature density' value + EXECUTE 'SELECT Count(*)/ST_Area(ST_Extent(the_geom_webmercator)) FROM ' || reloid::text || ';' INTO fd; + -- TODO: estimate the features per *area* value in some efficient manner + -- that samples various areas of the dataset extents. + SELECT CDB_XYZ_Resolution(-8) INTO c; + RETURN ceil(log(2.0, (c*c*fd/lim)::numeric)/2); END; $$ LANGUAGE PLPGSQL STABLE; From d7c8f3d7e88bf52f8a09ee7768784210f88036a4 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Tue, 15 Dec 2015 19:13:39 +0100 Subject: [PATCH 03/52] Fix: overlay generation was not using the proper scale --- scripts-available/CDB_Overviews.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 0c60c79..acbc098 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -91,6 +91,7 @@ BEGIN base_rel := reloid; FOREACH overview_z IN ARRAY overviews_z LOOP EXECUTE 'SELECT ' || quote_ident(reduce_strategy::text) || Format('(''%s'', %s, %s);', base_rel, base_z, overview_z) INTO base_rel; + base_z := overview_z; SELECT array_append(overview_tables, base_rel) INTO overview_tables; END LOOP; From 554464e43eb7267d6dc57c1c375f3fb234531b40 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Wed, 16 Dec 2015 12:14:37 +0100 Subject: [PATCH 04/52] Use tile-recursive computation of feature density This is a more adaptive way of estimating the feature density to determine the base Z level. Applying technique from http://javisantana.com/2014/10/22/traversing-quadtree.html --- scripts-available/CDB_Overviews.sql | 52 ++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index acbc098..0376948 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -1,22 +1,64 @@ +CREATE OR REPLACE FUNCTION _CDB_Feature_Density(reloid REGCLASS, max_z integer) +RETURNS FLOAT8 +AS $$ + DECLARE + fd FLOAT8; + min_features TEXT; + BEGIN + -- TODO: for small total count or extents we could just: + -- EXECUTE 'SELECT Count(*)/ST_Area(ST_Extent(the_geom_webmercator)) FROM ' || reloid::text || ';' INTO fd; + + -- min_features is a SQL subexpression which can depend on z and represents + -- the minimum number of features to recursively consider a tile. + -- We can either use a fixed minimum number of features per tile + -- or a minimum feature density by dividing the number of features by + -- the area of tiles at level Z: c*c*power(2, -2*z) + -- with c = CDB_XYZ_Resolution(-8) (earth circumference) + min_features = '500'; + + -- TODO: compute min_z and seed tiles based on reloid extents + -- so as to have at least N^2 tiles that cover the extents for some N + -- For the time being we use the root tile as the seed. + EXECUTE Format(' + WITH RECURSIVE t(x, y, z, e) AS ( + SELECT 0, 0, 0, ( + SELECT count(*) FROM %1$s + WHERE the_geom_webmercator && CDB_XYZ_Extent(0, 0, 0) + ) + UNION ALL + SELECT x*2 + xx, y*2 + yy, z+1, ( + SELECT count(*) FROM %1$s + WHERE the_geom_webmercator && CDB_XYZ_Extent(x*2 + xx, y*2 + yy, z+1) + ) + FROM t, (VALUES (0, 0), (0, 1), (1, 1), (1, 0)) AS c(xx, yy) + WHERE e > %2$s AND z < %3$s + ) + SELECT MAX(e/ST_Area(CDB_XYZ_Extent(x,y,z))) FROM t where e > 0; + ', reloid::text, min_features, max_z) + INTO fd; + RETURN fd; + END +$$ LANGUAGE PLPGSQL STABLE; + CREATE OR REPLACE FUNCTION _CDB_Dummy_Ref_Z_Strategy(reloid REGCLASS) RETURNS INTEGER AS $$ DECLARE - lim FLOAT8 := 1000; -- TODO: determine/parameterize this + lim FLOAT8 := 500; -- TODO: determine/parameterize this + max_z integer := 14; fd FLOAT8; c FLOAT8; BEGIN + -- Compute fd as an estimation of the (maximum) number + -- of features per unit of tile area (in webmercator squared meters) + SELECT _CDB_Feature_Density(reloid, max_z) INTO fd; -- lim maximum number of (desiderable) features per tile -- we have c = 2*Pi*R = CDB_XYZ_Resolution(-8) (earth circumference) - -- fd: feature density: number of features per unit of area (count(*)/ST_Area()) -- ta(z): tile area = power(c*power(2,z), 2) = c*c*power(2,2*z) -- => fd*ta(z) if the average number of features per tile at level z -- find minimum z so that fd*ta(z) <= lim -- compute a rough 'feature density' value - EXECUTE 'SELECT Count(*)/ST_Area(ST_Extent(the_geom_webmercator)) FROM ' || reloid::text || ';' INTO fd; - -- TODO: estimate the features per *area* value in some efficient manner - -- that samples various areas of the dataset extents. SELECT CDB_XYZ_Resolution(-8) INTO c; RETURN ceil(log(2.0, (c*c*fd/lim)::numeric)/2); END; From f7857945c10d529da5bd895fa01a231c90a5c231 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Wed, 16 Dec 2015 16:39:38 +0100 Subject: [PATCH 05/52] Change feature density computation algorithm Now parameterize by the number of levels to traverse and start with the level that covers the extent of the table with at least N*N tiles (N=4). --- scripts-available/CDB_Overviews.sql | 53 +++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 0376948..bf16771 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -1,10 +1,11 @@ - -CREATE OR REPLACE FUNCTION _CDB_Feature_Density(reloid REGCLASS, max_z integer) +CREATE OR REPLACE FUNCTION _CDB_Feature_Density(reloid REGCLASS, nz integer) RETURNS FLOAT8 AS $$ DECLARE fd FLOAT8; min_features TEXT; + n integer = 4; + c FLOAT8; BEGIN -- TODO: for small total count or extents we could just: -- EXECUTE 'SELECT Count(*)/ST_Area(ST_Extent(the_geom_webmercator)) FROM ' || reloid::text || ';' INTO fd; @@ -16,26 +17,48 @@ AS $$ -- the area of tiles at level Z: c*c*power(2, -2*z) -- with c = CDB_XYZ_Resolution(-8) (earth circumference) min_features = '500'; + SELECT CDB_XYZ_Resolution(-8) INTO c; - -- TODO: compute min_z and seed tiles based on reloid extents - -- so as to have at least N^2 tiles that cover the extents for some N - -- For the time being we use the root tile as the seed. + -- We first compute a set of *seed* tiles, of the minimum Z level, z0, such that + -- they cover the extent of the table and we have at least n of them in each + -- linear dimension (i.e. at least n*n tiles cover the extent). + -- We compute the number of features in these tiles, and recursively in + -- subtiles up to level z0 + nz. Then we compute the maximum of the feature + -- density (per tile area in webmercator squared meters) for all the + -- considered tiles. EXECUTE Format(' WITH RECURSIVE t(x, y, z, e) AS ( - SELECT 0, 0, 0, ( - SELECT count(*) FROM %1$s - WHERE the_geom_webmercator && CDB_XYZ_Extent(0, 0, 0) + WITH ext AS (SELECT ST_Extent(the_geom_webmercator) g FROM %1$s), + base AS ( + SELECT (-floor(log(2, (greatest(ST_XMax(ext.g)-ST_XMin(ext.g), ST_YMax(ext.g)-ST_YMin(ext.g))/(%4$s*%5$s))::numeric)))::integer z + FROM ext + ), + lim AS ( + SELECT + FLOOR((ST_XMin(ext.g)+CDB_XYZ_Resolution(0)*128)/(CDB_XYZ_Resolution(base.z)*256))::integer x0, + FLOOR((ST_XMax(ext.g)+CDB_XYZ_Resolution(0)*128)/(CDB_XYZ_Resolution(base.z)*256))::integer x1, + FLOOR((CDB_XYZ_Resolution(0)*128-ST_YMin(ext.g))/(CDB_XYZ_Resolution(base.z)*256))::integer y1, + FLOOR((CDB_XYZ_Resolution(0)*128-ST_YMax(ext.g))/(CDB_XYZ_Resolution(base.z)*256))::integer y0 + FROM ext, base + ), + seed AS ( + SELECT xt, yt, base.z, ( + SELECT count(*) FROM %1$s + WHERE the_geom_webmercator && CDB_XYZ_Extent(xt, yt, base.z) + ) e + FROM base, lim, generate_series(lim.x0, lim.x1) xt, generate_series(lim.y0, lim.y1) yt ) + SELECT * from seed UNION ALL - SELECT x*2 + xx, y*2 + yy, z+1, ( + SELECT x*2 + xx, y*2 + yy, t.z+1, ( SELECT count(*) FROM %1$s - WHERE the_geom_webmercator && CDB_XYZ_Extent(x*2 + xx, y*2 + yy, z+1) + WHERE the_geom_webmercator && CDB_XYZ_Extent(x*2 + xx, y*2 + yy, t.z+1) ) - FROM t, (VALUES (0, 0), (0, 1), (1, 1), (1, 0)) AS c(xx, yy) - WHERE e > %2$s AND z < %3$s + FROM t, base, (VALUES (0, 0), (0, 1), (1, 1), (1, 0)) AS c(xx, yy) + WHERE t.e > %2$s AND t.z < (base.z + %3$s) ) SELECT MAX(e/ST_Area(CDB_XYZ_Extent(x,y,z))) FROM t where e > 0; - ', reloid::text, min_features, max_z) + ', reloid::text, min_features, nz, n, c) INTO fd; RETURN fd; END @@ -46,13 +69,13 @@ RETURNS INTEGER AS $$ DECLARE lim FLOAT8 := 500; -- TODO: determine/parameterize this - max_z integer := 14; + nz integer := 4; fd FLOAT8; c FLOAT8; BEGIN -- Compute fd as an estimation of the (maximum) number -- of features per unit of tile area (in webmercator squared meters) - SELECT _CDB_Feature_Density(reloid, max_z) INTO fd; + SELECT _CDB_Feature_Density(reloid, nz) INTO fd; -- lim maximum number of (desiderable) features per tile -- we have c = 2*Pi*R = CDB_XYZ_Resolution(-8) (earth circumference) -- ta(z): tile area = power(c*power(2,z), 2) = c*c*power(2,2*z) From e5cc9ef0bde2ece0ae953f5fd473fcf805c6f8f8 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Wed, 16 Dec 2015 17:26:17 +0100 Subject: [PATCH 06/52] Fix: typo --- scripts-available/CDB_Overviews.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index bf16771..d35e5b1 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -95,7 +95,7 @@ AS $$ suffix TEXT; is_overview BOOLEAN; BEGIN - suffix := Format('_ov%', ref_z); + suffix := Format('_ov%s', ref_z); SELECT ref::text LIKE Format('%%%s', suffix) INTO is_overview; IF is_overview THEN SELECT substring(ref::text FROM 1 FOR length(ref::text)-length(suffix)) INTO base; From 415a09392f83c9c215eef0374799a9df7136a869 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Wed, 16 Dec 2015 17:45:36 +0100 Subject: [PATCH 07/52] Gridded clustering aggregation strategy for overviews --- scripts-available/CDB_Overviews.sql | 52 +++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index d35e5b1..3c97c8a 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -125,6 +125,58 @@ AS $$ END; $$ LANGUAGE PLPGSQL; +CREATE OR REPLACE FUNCTION _CDB_GridCluster_Reduce_Strategy(reloid REGCLASS, ref_z INTEGER, overview_z INTEGER) +RETURNS REGCLASS +AS $$ + DECLARE + overview_rel TEXT; + reduction FLOAT8; + base_name TEXT; + grid_px FLOAT8 = 3.0; + grid_m FLOAT8; + aggr_attributes TEXT; + attributes TEXT; + BEGIN + overview_rel := _CDB_Overview_Name(reloid, ref_z, overview_z); + + -- compute grid cell size using the overview_z dimension... + SELECT CDB_XYZ_Resolution(overview_z)*grid_px INTO grid_m; + + -- TODO: compute expression to aggregate attributes of the table + -- aggr_attributes = 'num_attr1, ...'' + -- aggr_attributes = 'AVG(num_attr1) num_attr1, ...'' + -- for text attributes we can use NULL or something like '*varies*' + attributes := ''; + aggr_attributes := ''; + + EXECUTE Format('DROP TABLE IF EXISTS %s CASCADE;', overview_rel); + + EXECUTE Format(' + CREATE TABLE %3$s AS + WITH clusters AS ( + SELECT + first_value(f.cartodb_id) OVER ( + PARTITION BY + ST_SnapToGrid(f.the_geom_webmercator, 0, 0, %2$s, %2$s) + ) AS cartodb_id, + %4$s + the_geom, + the_geom_webmercator + FROM %1$s f + ) + SELECT + cartodb_id, + ST_Centroid(ST_Collect(clusters.the_geom)) AS the_geom, + %5$s + ST_Centroid(ST_Collect(clusters.the_geom_webmercator)) AS the_geom_webmercator + FROM clusters + GROUP BY cartodb_id; + ', reloid::text, grid_m, overview_rel, attributes, aggr_attributes); + + RETURN overview_rel; + END; +$$ LANGUAGE PLPGSQL; + CREATE OR REPLACE FUNCTION CDB_CreateOverviews( reloid REGCLASS, refscale_strategy regproc DEFAULT '_CDB_Dummy_Ref_Z_Strategy'::regproc, From e60f73a31b26ccaac3354c9ccf1d3f0e72ba26a7 Mon Sep 17 00:00:00 2001 From: Rafa de la Torre Date: Mon, 21 Dec 2015 13:16:57 +0100 Subject: [PATCH 08/52] A bit of internal documentation --- scripts-available/CDB_Overviews.sql | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 3c97c8a..e1da1fe 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -1,3 +1,9 @@ +-- Determine the max feature density of a given dataset. +-- Scope: private. +-- Parameters +-- reloid: oid of the input table. It must be a cartodbfy'ed table. +-- nz: number of zoom levels to consider from z0 upward. +-- Return value: feature density (num_features / webmercator_squared_meters). CREATE OR REPLACE FUNCTION _CDB_Feature_Density(reloid REGCLASS, nz integer) RETURNS FLOAT8 AS $$ From 5010109c7dfc17c061bd3edc6ca9f6a840cfd7a4 Mon Sep 17 00:00:00 2001 From: Rafa de la Torre Date: Mon, 21 Dec 2015 17:41:28 +0100 Subject: [PATCH 09/52] Add _cdb_estimated_extent to get the extent from stats --- scripts-available/CDB_Overviews.sql | 37 +++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index e1da1fe..a72d48d 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -1,3 +1,40 @@ +-- Calculate the estimated extent of a cartodbfy'ed table. +-- Scope: private. +-- Parameters +-- reloid: oid of the input table. +-- Return value A box2d extent in 3857. +CREATE OR REPLACE FUNCTION _cdb_estimated_extent(reloid REGCLASS) +RETURNS box2d +AS $$ + DECLARE + ext box2d; + ext_query text; + table_id record; + BEGIN + + SELECT n.nspname AS schema_name, c.relname table_name INTO STRICT table_id + FROM pg_class c JOIN pg_namespace n on n.oid = c.relnamespace WHERE c.oid = reloid::oid; + + ext_query = format( + 'SELECT ST_EstimatedExtent(''%1$I'', ''%2$I'', ''%3$I'');', + table_id.schema_name, table_id.table_name, 'the_geom_webmercator' + ); + + BEGIN + EXECUTE ext_query INTO ext; + EXCEPTION + -- This is the typical ERROR: stats for "mytable" do not exist + WHEN internal_error THEN + -- Get stats and execute again + EXECUTE format('ANALYZE %1$I', reloid); + EXECUTE ext_query INTO ext; + END; + + RETURN ext; + END; +$$ LANGUAGE PLPGSQL VOLATILE; + + -- Determine the max feature density of a given dataset. -- Scope: private. -- Parameters From 564ab75d2d4cc3797aa8c24262d2598e41eb22bd Mon Sep 17 00:00:00 2001 From: Rafa de la Torre Date: Mon, 21 Dec 2015 18:34:26 +0100 Subject: [PATCH 10/52] Use _cdb_estimated_extent instead of ST_Extent With a 3.8M points table, this was a ~30% gain in my local env. --- scripts-available/CDB_Overviews.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index a72d48d..5d94b09 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -71,7 +71,7 @@ AS $$ -- considered tiles. EXECUTE Format(' WITH RECURSIVE t(x, y, z, e) AS ( - WITH ext AS (SELECT ST_Extent(the_geom_webmercator) g FROM %1$s), + WITH ext AS (SELECT _cdb_estimated_extent(%6$s) as g), base AS ( SELECT (-floor(log(2, (greatest(ST_XMax(ext.g)-ST_XMin(ext.g), ST_YMax(ext.g)-ST_YMin(ext.g))/(%4$s*%5$s))::numeric)))::integer z FROM ext @@ -101,7 +101,7 @@ AS $$ WHERE t.e > %2$s AND t.z < (base.z + %3$s) ) SELECT MAX(e/ST_Area(CDB_XYZ_Extent(x,y,z))) FROM t where e > 0; - ', reloid::text, min_features, nz, n, c) + ', reloid::text, min_features, nz, n, c, reloid::oid) INTO fd; RETURN fd; END From ea7c16fbaf60fd400a943006b3a55fce174a9c0e Mon Sep 17 00:00:00 2001 From: Paul Norman Date: Mon, 21 Dec 2015 23:59:26 -0800 Subject: [PATCH 11/52] Convert some simple functions from plpgsql to sql SQL is a faster language to call, and these are very simple functions. --- scripts-available/CDB_LatLng.sql | 12 ++++-------- scripts-available/CDB_XYZ.sql | 21 +++------------------ 2 files changed, 7 insertions(+), 26 deletions(-) diff --git a/scripts-available/CDB_LatLng.sql b/scripts-available/CDB_LatLng.sql index d1304c3..7f08f61 100644 --- a/scripts-available/CDB_LatLng.sql +++ b/scripts-available/CDB_LatLng.sql @@ -8,16 +8,12 @@ -- CREATE OR REPLACE FUNCTION CDB_LatLng (lat NUMERIC, lng NUMERIC) RETURNS geometry as $$ -BEGIN -- this function is silly - RETURN ST_SetSRID(ST_MakePoint(lng,lat),4326); -END; -$$ language plpgsql IMMUTABLE; + SELECT ST_SetSRID(ST_MakePoint(lng,lat),4326); +$$ language SQL IMMUTABLE; CREATE OR REPLACE FUNCTION CDB_LatLng (lat FLOAT8, lng FLOAT8) RETURNS geometry as $$ -BEGIN -- this function is silly - RETURN ST_SetSRID(ST_MakePoint(lng,lat),4326); -END; -$$ language plpgsql IMMUTABLE; + SELECT ST_SetSRID(ST_MakePoint(lng,lat),4326); +$$ language SQL IMMUTABLE; diff --git a/scripts-available/CDB_XYZ.sql b/scripts-available/CDB_XYZ.sql index 92e7dae..fa38171 100644 --- a/scripts-available/CDB_XYZ.sql +++ b/scripts-available/CDB_XYZ.sql @@ -5,24 +5,9 @@ CREATE OR REPLACE FUNCTION CDB_XYZ_Resolution(z INTEGER) RETURNS FLOAT8 AS $$ -DECLARE - earth_circumference FLOAT8; - tile_size INTEGER; - full_resolution FLOAT8; -BEGIN - - -- Earth equatorial circumference in meters (according to wikipedia) - earth_circumference := 40075017; - - -- Size of each tile in pixels (1:1 aspect ratio) - tile_size := 256; - - full_resolution := earth_circumference/tile_size; - - RETURN full_resolution / (power(2,z)); - -END -$$ LANGUAGE 'plpgsql' IMMUTABLE STRICT; + -- circumference divided by 256 is z0 resolution, then divide by 2^z + SELECT 40075017 / 256 / power(2, z); +$$ LANGUAGE SQL IMMUTABLE STRICT; -- } -- { From c8a1ef6f68bdaaed62cf8f215a23b8ed3a3d5e0f Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Tue, 22 Dec 2015 15:25:21 +0100 Subject: [PATCH 12/52] Slight optimization of gridded clustering --- scripts-available/CDB_Overviews.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 5d94b09..203f797 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -193,14 +193,14 @@ AS $$ aggr_attributes := ''; EXECUTE Format('DROP TABLE IF EXISTS %s CASCADE;', overview_rel); - EXECUTE Format(' CREATE TABLE %3$s AS WITH clusters AS ( SELECT first_value(f.cartodb_id) OVER ( PARTITION BY - ST_SnapToGrid(f.the_geom_webmercator, 0, 0, %2$s, %2$s) + Floor(ST_X(f.the_geom_webmercator)/%2$s)::int, + Floor(ST_Y(f.the_geom_webmercator)/%2$s)::int ) AS cartodb_id, %4$s the_geom, From 5a78ee2896929d9dba0ea5dcb7388516a6bc80ba Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Tue, 22 Dec 2015 17:59:49 +0100 Subject: [PATCH 13/52] Optimize the gridded clustering strategy The internal grid_px parameter is adjusted for best results with default symbol size --- scripts-available/CDB_Overviews.sql | 32 ++++++++++++++++------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 203f797..5a960c7 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -175,7 +175,7 @@ AS $$ overview_rel TEXT; reduction FLOAT8; base_name TEXT; - grid_px FLOAT8 = 3.0; + grid_px FLOAT8 = 7.5; -- Grid size in pixels at Z level overview_z grid_m FLOAT8; aggr_attributes TEXT; attributes TEXT; @@ -193,27 +193,31 @@ AS $$ aggr_attributes := ''; EXECUTE Format('DROP TABLE IF EXISTS %s CASCADE;', overview_rel); + + -- Now we cluster the data using a grid of size grid_m + -- and selecte the centroid (average coordinates) of each cluster. + -- If we had a selected numeric attribute of interest we could use it + -- as a weight for the average coordinates. EXECUTE Format(' CREATE TABLE %3$s AS WITH clusters AS ( SELECT - first_value(f.cartodb_id) OVER ( - PARTITION BY - Floor(ST_X(f.the_geom_webmercator)/%2$s)::int, - Floor(ST_Y(f.the_geom_webmercator)/%2$s)::int - ) AS cartodb_id, - %4$s - the_geom, - the_geom_webmercator - FROM %1$s f + %5$s + count(*) AS n, + SUM(ST_X(f.the_geom_webmercator)) AS sx, + SUM(ST_Y(f.the_geom_webmercator)) AS sy, + Floor(ST_X(f.the_geom_webmercator)/%2$s)::int AS gx, + Floor(ST_Y(f.the_geom_webmercator)/%2$s)::int AS gy, + row_number() OVER () AS cartodb_id + FROM %1$s f + GROUP BY gx, gy ) SELECT + %4$s cartodb_id, - ST_Centroid(ST_Collect(clusters.the_geom)) AS the_geom, - %5$s - ST_Centroid(ST_Collect(clusters.the_geom_webmercator)) AS the_geom_webmercator + ST_SetSRID(ST_MakePoint(sx/n, sy/n), 3857) AS the_geom_webmercator, + ST_Transform(ST_SetSRID(ST_MakePoint(sx/n, sy/n), 3857), 4326) AS the_geom FROM clusters - GROUP BY cartodb_id; ', reloid::text, grid_m, overview_rel, attributes, aggr_attributes); RETURN overview_rel; From 1b5de84c9acd0d85015e190ffae0be6f6a6c710c Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Wed, 23 Dec 2015 12:17:37 +0100 Subject: [PATCH 14/52] Add missing attribute-aggregationto the point reduction strategy --- scripts-available/CDB_Overviews.sql | 111 ++++++++++++++++++++++++++-- 1 file changed, 104 insertions(+), 7 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 5a960c7..35baba5 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -34,7 +34,6 @@ AS $$ END; $$ LANGUAGE PLPGSQL VOLATILE; - -- Determine the max feature density of a given dataset. -- Scope: private. -- Parameters @@ -168,6 +167,102 @@ AS $$ END; $$ LANGUAGE PLPGSQL; +-- Dataset attributes (column names other than the +-- CartoDB primary key and geometry columns) which should be aggregated +-- in aggregated overviews. +-- Scope: private. +-- Parameters +-- reloid: oid of the input table. It must be a cartodbfy'ed table. +-- Return value: set of attribute names +CREATE OR REPLACE FUNCTION _CDB_Aggregable_Attributes(reloid REGCLASS) +RETURNS SETOF information_schema.sql_identifier +AS $$ + SELECT c FROM cartodb.CDB_ColumnNames(reloid) c, _CDB_Columns() cdb + WHERE c NOT IN ( + cdb.pkey, cdb.geomcol, cdb.mercgeomcol + ) +$$ LANGUAGE SQL STABLE; + +-- List of dataset attributes to be aggregated in aggregated overview +-- as a comma-separated SQL expression. +-- Scope: private. +-- Parameters +-- reloid: oid of the input table. It must be a cartodbfy'ed table. +-- Return value: SQL subexpression as text +CREATE OR REPLACE FUNCTION _CDB_Aggregable_Attributes_Expression(reloid REGCLASS) +RETURNS TEXT +AS $$ +DECLARE + attr_list TEXT; +BEGIN + SELECT string_agg(s.c, ',') FROM ( + SELECT * FROM _CDB_Aggregable_Attributes(reloid) c + ) AS s INTO attr_list; + + RETURN attr_list; +END +$$ LANGUAGE PLPGSQL STABLE; + +-- SQL Aggregation expression for a datase attribute +-- Scope: private. +-- Parameters +-- reloid: oid of the input table. It must be a cartodbfy'ed table. +-- column_name: column to be aggregated +-- table_alias: (optional) table qualifier for the column to be aggregated +-- Return SQL subexpression as text with aggregated attribute aliased +-- with its original name. +CREATE OR REPLACE FUNCTION _CDB_Attribute_Aggregation_Expression(reloid REGCLASS, column_name TEXT, table_alias TEXT DEFAULT '') +RETURNS TEXT +AS $$ +DECLARE + column_type TEXT; + qualified_column TEXT; +BEGIN + IF table_alias <> '' THEN + qualified_column := Format('%I.%I', table_alias, column_name); + ELSE + qualified_column := Format('%I', column_name); + END IF; + + column_type := cartodb.CDB_ColumnType(reloid, column_name); + + CASE column_type + WHEN 'double precision', 'real', 'integer', 'bigint' THEN + RETURN Format('AVG(%s)::' || column_type, qualified_column); + WHEN 'text' THEN + -- TODO: we could define a new aggregate function that returns distinct + -- separated values with a limit, adding ellipsis if more values existed + -- e.g. with '/' as separator and a limit of three: + -- 'A', 'B', 'A', 'C', 'D' => 'A/B/C/...' + -- Other ideas: if value is unique then use it, otherwise use something + -- like '*' or '(varies)' or '(multiple values)', or NULL + RETURN '''''::' || column_type; + ELSE RETURN 'NULL::' || column_type; + END CASE; +END +$$ LANGUAGE PLPGSQL IMMUTABLE; + +-- List of dataset aggregated attributes as a comma-separated SQL expression. +-- Scope: private. +-- Parameters +-- reloid: oid of the input table. It must be a cartodbfy'ed table. +-- table_alias: (optional) table qualifier for the columns to be aggregated +-- Return value: SQL subexpression as text +CREATE OR REPLACE FUNCTION _CDB_Aggregated_Attributes_Expression(reloid REGCLASS, table_alias TEXT DEFAULT '') +RETURNS TEXT +AS $$ +DECLARE + attr_list TEXT; +BEGIN + SELECT string_agg(_CDB_Attribute_Aggregation_Expression(reloid, s.c, table_alias) || Format(' AS %s', s.c), ',') + FROM ( + SELECT * FROM _CDB_Aggregable_Attributes(reloid) c + ) AS s INTO attr_list; + + RETURN attr_list; +END +$$ LANGUAGE PLPGSQL STABLE; + CREATE OR REPLACE FUNCTION _CDB_GridCluster_Reduce_Strategy(reloid REGCLASS, ref_z INTEGER, overview_z INTEGER) RETURNS REGCLASS AS $$ @@ -185,12 +280,14 @@ AS $$ -- compute grid cell size using the overview_z dimension... SELECT CDB_XYZ_Resolution(overview_z)*grid_px INTO grid_m; - -- TODO: compute expression to aggregate attributes of the table - -- aggr_attributes = 'num_attr1, ...'' - -- aggr_attributes = 'AVG(num_attr1) num_attr1, ...'' - -- for text attributes we can use NULL or something like '*varies*' - attributes := ''; - aggr_attributes := ''; + attributes := _CDB_Aggregable_Attributes_Expression(reloid); + aggr_attributes := _CDB_Aggregated_Attributes_Expression(reloid); + IF attributes <> '' THEN + attributes := attributes || ', '; + END IF; + IF aggr_attributes <> '' THEN + aggr_attributes := aggr_attributes || ', '; + END IF; EXECUTE Format('DROP TABLE IF EXISTS %s CASCADE;', overview_rel); From 2af0b9a57f8bc317d3b9e7bcee8671a656f9cfcd Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Wed, 23 Dec 2015 12:42:40 +0100 Subject: [PATCH 15/52] Add function comments --- scripts-available/CDB_Overviews.sql | 43 ++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 35baba5..541bf1d 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -106,6 +106,13 @@ AS $$ END $$ LANGUAGE PLPGSQL STABLE; +-- Experimental default strategy to assign a reference base Z level +-- to a cartodbfied table. The resulting Z level represents the +-- minimum scale level at which the table data can be rendered +-- without overcrowded results or loss of detail. +-- Parameters: +-- reloid: oid of the input table. It must be a cartodbfy'ed table. +-- Return value: Z level as an integer CREATE OR REPLACE FUNCTION _CDB_Dummy_Ref_Z_Strategy(reloid REGCLASS) RETURNS INTEGER AS $$ @@ -129,6 +136,14 @@ AS $$ END; $$ LANGUAGE PLPGSQL STABLE; +-- Overview table name for a given Z level and base dataset or overview table +-- Scope: private. +-- Parameters: +-- ref reference table (can be the base table of the dataset or an existing +-- overview) from which the overview is being generated. +-- ref_z Z level of the reference table +-- overview_z Z level of the overview to be named, must be smaller than ref_z +-- Return value: the name to be used for the overview CREATE OR REPLACE FUNCTION _CDB_Overview_Name(ref REGCLASS, ref_z INTEGER, overview_z INTEGER) RETURNS TEXT AS $$ @@ -148,6 +163,13 @@ AS $$ END $$ LANGUAGE PLPGSQL IMMUTABLE; +-- Experimental simplistic reduction method for point datasets to be used as a default. +-- Scope: private. +-- reloid original table (can be the base table of the dataset or an existing +-- overview) from which the overview is being generated. +-- ref_z Z level assigned to the original table +-- overview_z Z level of the overview to be generated, must be smaller than ref_z +-- Return value: Name of the generated overview table CREATE OR REPLACE FUNCTION _CDB_Dummy_Reduce_Strategy(reloid REGCLASS, ref_z INTEGER, overview_z INTEGER) RETURNS REGCLASS AS $$ @@ -157,7 +179,7 @@ AS $$ base_name TEXT; BEGIN overview_rel := _CDB_Overview_Name(reloid, ref_z, overview_z); - -- TODO: implement a proper reduction technique. + -- TODO: implement a proper sampling strategy; -- Here we're just inefficiently sampling the data to mantain -- the approximate visual density of the reference level. reduction := power(2, 2*(overview_z - ref_z)); @@ -263,6 +285,16 @@ BEGIN END $$ LANGUAGE PLPGSQL STABLE; +-- Experimental Overview reduction method for point datasets. +-- It clusters the points using a grid, then aggregates the point in each +-- cluster into a point at the centroid of the clustered records. +-- Scope: private. +-- Parameters: +-- reloid original table (can be the base table of the dataset or an existing +-- overview) from which the overview is being generated. +-- ref_z Z level assigned to the original table +-- overview_z Z level of the overview to be generated, must be smaller than ref_z +-- Return value: Name of the generated overview table CREATE OR REPLACE FUNCTION _CDB_GridCluster_Reduce_Strategy(reloid REGCLASS, ref_z INTEGER, overview_z INTEGER) RETURNS REGCLASS AS $$ @@ -321,6 +353,15 @@ AS $$ END; $$ LANGUAGE PLPGSQL; +-- Create overview tables for a dataset. +-- Scope: public +-- Parameters: +-- reloid: oid of the input table. It must be a cartodbfy'ed table with +-- vector features. +-- refscale_strategy: function that computes the reference Z of the dataset +-- reduce_strategy: function that generates overviews from a base table +-- or higher level overview +-- Return value: Array with the names of the generated overview tables CREATE OR REPLACE FUNCTION CDB_CreateOverviews( reloid REGCLASS, refscale_strategy regproc DEFAULT '_CDB_Dummy_Ref_Z_Strategy'::regproc, From 552206464ea1508449d3a42b2209fc6ab12de44e Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Wed, 23 Dec 2015 12:50:04 +0100 Subject: [PATCH 16/52] Make strategy function public --- scripts-available/CDB_Overviews.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 541bf1d..4390f04 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -288,14 +288,14 @@ $$ LANGUAGE PLPGSQL STABLE; -- Experimental Overview reduction method for point datasets. -- It clusters the points using a grid, then aggregates the point in each -- cluster into a point at the centroid of the clustered records. --- Scope: private. +-- Scope: public. -- Parameters: -- reloid original table (can be the base table of the dataset or an existing -- overview) from which the overview is being generated. -- ref_z Z level assigned to the original table -- overview_z Z level of the overview to be generated, must be smaller than ref_z -- Return value: Name of the generated overview table -CREATE OR REPLACE FUNCTION _CDB_GridCluster_Reduce_Strategy(reloid REGCLASS, ref_z INTEGER, overview_z INTEGER) +CREATE OR REPLACE FUNCTION CDB_GridCluster_Reduce_Strategy(reloid REGCLASS, ref_z INTEGER, overview_z INTEGER) RETURNS REGCLASS AS $$ DECLARE From a5bca7d7156ab32b92b78fbdec2b64687939cb8c Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Wed, 23 Dec 2015 14:17:50 +0100 Subject: [PATCH 17/52] Add function for post-processing new overview tables --- scripts-available/CDB_Overviews.sql | 32 ++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 4390f04..bdc3596 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -189,6 +189,32 @@ AS $$ END; $$ LANGUAGE PLPGSQL; +-- Register new overview table (post-creation chores) +-- Scope: private +-- Parameters: +-- dataset: oid of the input dataset table, It must be a cartodbfy'ed table. +-- overview_table: oid of the overview table to be registered. +-- overview_z: intended Z level for the overview table +CREATE OR REPLACE FUNCTION _CDB_Register_Overview(dataset REGCLASS, overview_table REGCLASS, overview_z INTEGER) +RETURNS VOID +AS $$ + DECLARE + sql TEXT; + BEGIN + IF current_user != session_user THEN + sql := Format('ALTER TABLE IF EXISTS %s OWNER TO %s', overview_table::text, session_user); + EXECUTE sql; + END IF; + + -- TODO: index geometry... + PERFORM _CDB_Add_Indexes(overview_table); + + -- TODO: we'll need to store metadata somewhere to define + -- which overlay levels are available. Here we should add this metadata + -- (or replace existing metadata) + END +$$ LANGUAGE PLPGSQL; + -- Dataset attributes (column names other than the -- CartoDB primary key and geometry columns) which should be aggregated -- in aggregated overviews. @@ -377,6 +403,8 @@ DECLARE overview_z integer; overview_tables REGCLASS[]; BEGIN + -- TODO: adjust statement_timeout here based on input table size? + -- Determine the referece zoom level EXECUTE 'SELECT ' || quote_ident(refscale_strategy::text) || Format('(''%s'');', reloid) INTO ref_z; @@ -394,12 +422,10 @@ BEGIN FOREACH overview_z IN ARRAY overviews_z LOOP EXECUTE 'SELECT ' || quote_ident(reduce_strategy::text) || Format('(''%s'', %s, %s);', base_rel, base_z, overview_z) INTO base_rel; base_z := overview_z; + PERFORM _CDB_Register_Overview(reloid, base_rel, base_z); SELECT array_append(overview_tables, base_rel) INTO overview_tables; END LOOP; - -- TODO: we'll need to store metadata somewhere to define - -- which overlay levels are available. - RETURN overview_tables; END; $$ LANGUAGE PLPGSQL; From a8a2c04d717f583a4a68e63fb1e42c2b1f53a1fa Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Wed, 23 Dec 2015 14:20:57 +0100 Subject: [PATCH 18/52] Remove invalid comment --- scripts-available/CDB_Overviews.sql | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index bdc3596..d89382c 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -206,7 +206,6 @@ AS $$ EXECUTE sql; END IF; - -- TODO: index geometry... PERFORM _CDB_Add_Indexes(overview_table); -- TODO: we'll need to store metadata somewhere to define From 06ca4f74eed9325833768d5ac1205bae6220f819 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Wed, 23 Dec 2015 16:32:44 +0100 Subject: [PATCH 19/52] Enable Overviews module in the extension --- scripts-enabled/242-CDB_Overviews.sql | 1 + 1 file changed, 1 insertion(+) create mode 120000 scripts-enabled/242-CDB_Overviews.sql diff --git a/scripts-enabled/242-CDB_Overviews.sql b/scripts-enabled/242-CDB_Overviews.sql new file mode 120000 index 0000000..7f1a650 --- /dev/null +++ b/scripts-enabled/242-CDB_Overviews.sql @@ -0,0 +1 @@ +../scripts-available/CDB_Overviews.sql \ No newline at end of file From 8d1bbc63fa4ddfc0f2d80a5e5d04ef7a094c188c Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Wed, 23 Dec 2015 16:33:34 +0100 Subject: [PATCH 20/52] Add overview tests --- test/CDB_OverviewsTest.sql | 19 + test/CDB_OverviewsTest_expect | 15 + test/overviews/fixtures.sql | 2234 +++++++++++++++++++++++++++++++++ test/overviews/gen_points.rb | 43 + 4 files changed, 2311 insertions(+) create mode 100644 test/CDB_OverviewsTest.sql create mode 100644 test/CDB_OverviewsTest_expect create mode 100644 test/overviews/fixtures.sql create mode 100644 test/overviews/gen_points.rb diff --git a/test/CDB_OverviewsTest.sql b/test/CDB_OverviewsTest.sql new file mode 100644 index 0000000..49aadae --- /dev/null +++ b/test/CDB_OverviewsTest.sql @@ -0,0 +1,19 @@ +SET client_min_messages TO error; +\set VERBOSITY default + +\i test/overviews/fixtures.sql + +SELECT _CDB_Aggregable_Attributes_Expression('base_bare_t'::regclass); +SELECT _CDB_Aggregated_Attributes_Expression('base_bare_t'::regclass); +SELECT _CDB_Aggregated_Attributes_Expression('base_bare_t'::regclass, 'tab'); + +SELECT CDB_CreateOverviews('base_bare_t'::regclass); + +SELECT _CDB_Aggregable_Attributes_Expression('base_t'::regclass); +SELECT _CDB_Aggregated_Attributes_Expression('base_t'::regclass); +SELECT _CDB_Aggregated_Attributes_Expression('base_t'::regclass, 'tab'); + +SELECT CDB_CreateOverviews('base_t'::regclass); + +DROP TABLE base_bare_t; +DROP TABLE base_t; diff --git a/test/CDB_OverviewsTest_expect b/test/CDB_OverviewsTest_expect new file mode 100644 index 0000000..d18d82d --- /dev/null +++ b/test/CDB_OverviewsTest_expect @@ -0,0 +1,15 @@ +SET +CREATE TABLE +INSERT 0 1114 +CREATE TABLE +INSERT 0 1114 + + + +{base_bare_t_ov5,base_bare_t_ov3,base_bare_t_ov1} +number,int_number,name,start +AVG(number)::double precision AS number,AVG(int_number)::integer AS int_number,''::text AS name,NULL::date AS start +AVG(tab.number)::double precision AS number,AVG(tab.int_number)::integer AS int_number,''::text AS name,NULL::date AS start +{base_t_ov5,base_t_ov3,base_t_ov1} +DROP TABLE +DROP TABLE diff --git a/test/overviews/fixtures.sql b/test/overviews/fixtures.sql new file mode 100644 index 0000000..bfe1ae6 --- /dev/null +++ b/test/overviews/fixtures.sql @@ -0,0 +1,2234 @@ +-- bare table with no attribute columns +CREATE TABLE base_bare_t (cartodb_id integer, the_geom geometry, the_geom_webmercator geometry); +INSERT INTO base_bare_t VALUES +(1, 'SRID=4326;POINT(9.718384 33.139879)'::geometry, ST_Transform('SRID=4326;POINT(9.718384 33.139879)'::geometry, 3857)), +(2, 'SRID=4326;POINT(9.71832 33.139846)'::geometry, ST_Transform('SRID=4326;POINT(9.71832 33.139846)'::geometry, 3857)), +(3, 'SRID=4326;POINT(9.718776 33.139394)'::geometry, ST_Transform('SRID=4326;POINT(9.718776 33.139394)'::geometry, 3857)), +(4, 'SRID=4326;POINT(9.718086 33.139576)'::geometry, ST_Transform('SRID=4326;POINT(9.718086 33.139576)'::geometry, 3857)), +(5, 'SRID=4326;POINT(9.718036 33.139538)'::geometry, ST_Transform('SRID=4326;POINT(9.718036 33.139538)'::geometry, 3857)), +(6, 'SRID=4326;POINT(9.718197 33.139667)'::geometry, ST_Transform('SRID=4326;POINT(9.718197 33.139667)'::geometry, 3857)), +(7, 'SRID=4326;POINT(9.718357 33.139511)'::geometry, ST_Transform('SRID=4326;POINT(9.718357 33.139511)'::geometry, 3857)), +(8, 'SRID=4326;POINT(9.718385 33.13984)'::geometry, ST_Transform('SRID=4326;POINT(9.718385 33.13984)'::geometry, 3857)), +(9, 'SRID=4326;POINT(9.718312 33.139405)'::geometry, ST_Transform('SRID=4326;POINT(9.718312 33.139405)'::geometry, 3857)), +(10, 'SRID=4326;POINT(9.718951 33.139878)'::geometry, ST_Transform('SRID=4326;POINT(9.718951 33.139878)'::geometry, 3857)), +(11, 'SRID=4326;POINT(9.718799 33.139942)'::geometry, ST_Transform('SRID=4326;POINT(9.718799 33.139942)'::geometry, 3857)), +(12, 'SRID=4326;POINT(9.718777 33.139681)'::geometry, ST_Transform('SRID=4326;POINT(9.718777 33.139681)'::geometry, 3857)), +(13, 'SRID=4326;POINT(9.717971 33.13981)'::geometry, ST_Transform('SRID=4326;POINT(9.717971 33.13981)'::geometry, 3857)), +(14, 'SRID=4326;POINT(9.718334 33.139541)'::geometry, ST_Transform('SRID=4326;POINT(9.718334 33.139541)'::geometry, 3857)), +(15, 'SRID=4326;POINT(-5.989195 39.206665)'::geometry, ST_Transform('SRID=4326;POINT(-5.989195 39.206665)'::geometry, 3857)), +(16, 'SRID=4326;POINT(-5.988446 39.207071)'::geometry, ST_Transform('SRID=4326;POINT(-5.988446 39.207071)'::geometry, 3857)), +(17, 'SRID=4326;POINT(-5.989083 39.207225)'::geometry, ST_Transform('SRID=4326;POINT(-5.989083 39.207225)'::geometry, 3857)), +(18, 'SRID=4326;POINT(8.510012 32.031818)'::geometry, ST_Transform('SRID=4326;POINT(8.510012 32.031818)'::geometry, 3857)), +(19, 'SRID=4326;POINT(8.509814 32.03189)'::geometry, ST_Transform('SRID=4326;POINT(8.509814 32.03189)'::geometry, 3857)), +(20, 'SRID=4326;POINT(8.510091 32.031737)'::geometry, ST_Transform('SRID=4326;POINT(8.510091 32.031737)'::geometry, 3857)), +(21, 'SRID=4326;POINT(-1.337826 37.660347)'::geometry, ST_Transform('SRID=4326;POINT(-1.337826 37.660347)'::geometry, 3857)), +(22, 'SRID=4326;POINT(-1.337618 37.660051)'::geometry, ST_Transform('SRID=4326;POINT(-1.337618 37.660051)'::geometry, 3857)), +(23, 'SRID=4326;POINT(-1.337644 37.659833)'::geometry, ST_Transform('SRID=4326;POINT(-1.337644 37.659833)'::geometry, 3857)), +(24, 'SRID=4326;POINT(-1.337701 37.659615)'::geometry, ST_Transform('SRID=4326;POINT(-1.337701 37.659615)'::geometry, 3857)), +(25, 'SRID=4326;POINT(-1.337237 37.659644)'::geometry, ST_Transform('SRID=4326;POINT(-1.337237 37.659644)'::geometry, 3857)), +(26, 'SRID=4326;POINT(-1.337542 37.660018)'::geometry, ST_Transform('SRID=4326;POINT(-1.337542 37.660018)'::geometry, 3857)), +(27, 'SRID=4326;POINT(-1.337848 37.659752)'::geometry, ST_Transform('SRID=4326;POINT(-1.337848 37.659752)'::geometry, 3857)), +(28, 'SRID=4326;POINT(-1.337659 37.659788)'::geometry, ST_Transform('SRID=4326;POINT(-1.337659 37.659788)'::geometry, 3857)), +(29, 'SRID=4326;POINT(-1.337194 37.660026)'::geometry, ST_Transform('SRID=4326;POINT(-1.337194 37.660026)'::geometry, 3857)), +(30, 'SRID=4326;POINT(-1.337714 37.659619)'::geometry, ST_Transform('SRID=4326;POINT(-1.337714 37.659619)'::geometry, 3857)), +(31, 'SRID=4326;POINT(-1.337846 37.659781)'::geometry, ST_Transform('SRID=4326;POINT(-1.337846 37.659781)'::geometry, 3857)), +(32, 'SRID=4326;POINT(-1.33751 37.66052)'::geometry, ST_Transform('SRID=4326;POINT(-1.33751 37.66052)'::geometry, 3857)), +(33, 'SRID=4326;POINT(-1.337669 37.660154)'::geometry, ST_Transform('SRID=4326;POINT(-1.337669 37.660154)'::geometry, 3857)), +(34, 'SRID=4326;POINT(-3.050809 34.810112)'::geometry, ST_Transform('SRID=4326;POINT(-3.050809 34.810112)'::geometry, 3857)), +(35, 'SRID=4326;POINT(-3.049988 34.811057)'::geometry, ST_Transform('SRID=4326;POINT(-3.049988 34.811057)'::geometry, 3857)), +(36, 'SRID=4326;POINT(-3.050564 34.810536)'::geometry, ST_Transform('SRID=4326;POINT(-3.050564 34.810536)'::geometry, 3857)), +(37, 'SRID=4326;POINT(-3.050442 34.810239)'::geometry, ST_Transform('SRID=4326;POINT(-3.050442 34.810239)'::geometry, 3857)), +(38, 'SRID=4326;POINT(-3.05032 34.810969)'::geometry, ST_Transform('SRID=4326;POINT(-3.05032 34.810969)'::geometry, 3857)), +(39, 'SRID=4326;POINT(-3.050097 34.810504)'::geometry, ST_Transform('SRID=4326;POINT(-3.050097 34.810504)'::geometry, 3857)), +(40, 'SRID=4326;POINT(-3.05055 34.810908)'::geometry, ST_Transform('SRID=4326;POINT(-3.05055 34.810908)'::geometry, 3857)), +(41, 'SRID=4326;POINT(-3.050086 34.810386)'::geometry, ST_Transform('SRID=4326;POINT(-3.050086 34.810386)'::geometry, 3857)), +(42, 'SRID=4326;POINT(-3.050485 34.810751)'::geometry, ST_Transform('SRID=4326;POINT(-3.050485 34.810751)'::geometry, 3857)), +(43, 'SRID=4326;POINT(-3.04984 34.810113)'::geometry, ST_Transform('SRID=4326;POINT(-3.04984 34.810113)'::geometry, 3857)), +(44, 'SRID=4326;POINT(-3.049975 34.810547)'::geometry, ST_Transform('SRID=4326;POINT(-3.049975 34.810547)'::geometry, 3857)), +(45, 'SRID=4326;POINT(-3.05065 34.810262)'::geometry, ST_Transform('SRID=4326;POINT(-3.05065 34.810262)'::geometry, 3857)), +(46, 'SRID=4326;POINT(-3.050618 34.8107)'::geometry, ST_Transform('SRID=4326;POINT(-3.050618 34.8107)'::geometry, 3857)), +(47, 'SRID=4326;POINT(-3.050325 34.810601)'::geometry, ST_Transform('SRID=4326;POINT(-3.050325 34.810601)'::geometry, 3857)), +(48, 'SRID=4326;POINT(-3.049874 34.810936)'::geometry, ST_Transform('SRID=4326;POINT(-3.049874 34.810936)'::geometry, 3857)), +(49, 'SRID=4326;POINT(-3.049991 34.810872)'::geometry, ST_Transform('SRID=4326;POINT(-3.049991 34.810872)'::geometry, 3857)), +(50, 'SRID=4326;POINT(-7.192205 34.110465)'::geometry, ST_Transform('SRID=4326;POINT(-7.192205 34.110465)'::geometry, 3857)), +(51, 'SRID=4326;POINT(-1.111773 31.260536)'::geometry, ST_Transform('SRID=4326;POINT(-1.111773 31.260536)'::geometry, 3857)), +(52, 'SRID=4326;POINT(-1.112389 31.26055)'::geometry, ST_Transform('SRID=4326;POINT(-1.112389 31.26055)'::geometry, 3857)), +(53, 'SRID=4326;POINT(-1.11196 31.260683)'::geometry, ST_Transform('SRID=4326;POINT(-1.11196 31.260683)'::geometry, 3857)), +(54, 'SRID=4326;POINT(-1.11169 31.260137)'::geometry, ST_Transform('SRID=4326;POINT(-1.11169 31.260137)'::geometry, 3857)), +(55, 'SRID=4326;POINT(-1.111784 31.259982)'::geometry, ST_Transform('SRID=4326;POINT(-1.111784 31.259982)'::geometry, 3857)), +(56, 'SRID=4326;POINT(-1.111957 31.26044)'::geometry, ST_Transform('SRID=4326;POINT(-1.111957 31.26044)'::geometry, 3857)), +(57, 'SRID=4326;POINT(-1.112346 31.260099)'::geometry, ST_Transform('SRID=4326;POINT(-1.112346 31.260099)'::geometry, 3857)), +(58, 'SRID=4326;POINT(-1.112361 31.260683)'::geometry, ST_Transform('SRID=4326;POINT(-1.112361 31.260683)'::geometry, 3857)), +(59, 'SRID=4326;POINT(-1.112424 31.260104)'::geometry, ST_Transform('SRID=4326;POINT(-1.112424 31.260104)'::geometry, 3857)), +(60, 'SRID=4326;POINT(-1.11189 31.260241)'::geometry, ST_Transform('SRID=4326;POINT(-1.11189 31.260241)'::geometry, 3857)), +(61, 'SRID=4326;POINT(-1.111632 31.260126)'::geometry, ST_Transform('SRID=4326;POINT(-1.111632 31.260126)'::geometry, 3857)), +(62, 'SRID=4326;POINT(-1.112057 31.260066)'::geometry, ST_Transform('SRID=4326;POINT(-1.112057 31.260066)'::geometry, 3857)), +(63, 'SRID=4326;POINT(-1.111878 31.260402)'::geometry, ST_Transform('SRID=4326;POINT(-1.111878 31.260402)'::geometry, 3857)), +(64, 'SRID=4326;POINT(-1.112086 31.260331)'::geometry, ST_Transform('SRID=4326;POINT(-1.112086 31.260331)'::geometry, 3857)), +(65, 'SRID=4326;POINT(-1.11192 31.25996)'::geometry, ST_Transform('SRID=4326;POINT(-1.11192 31.25996)'::geometry, 3857)), +(66, 'SRID=4326;POINT(-1.111971 31.260519)'::geometry, ST_Transform('SRID=4326;POINT(-1.111971 31.260519)'::geometry, 3857)), +(67, 'SRID=4326;POINT(1.981315 36.414172)'::geometry, ST_Transform('SRID=4326;POINT(1.981315 36.414172)'::geometry, 3857)), +(68, 'SRID=4326;POINT(1.981157 36.414659)'::geometry, ST_Transform('SRID=4326;POINT(1.981157 36.414659)'::geometry, 3857)), +(69, 'SRID=4326;POINT(1.981097 36.414188)'::geometry, ST_Transform('SRID=4326;POINT(1.981097 36.414188)'::geometry, 3857)), +(70, 'SRID=4326;POINT(1.98147 36.414969)'::geometry, ST_Transform('SRID=4326;POINT(1.98147 36.414969)'::geometry, 3857)), +(71, 'SRID=4326;POINT(1.981473 36.414819)'::geometry, ST_Transform('SRID=4326;POINT(1.981473 36.414819)'::geometry, 3857)), +(72, 'SRID=4326;POINT(1.981159 36.414521)'::geometry, ST_Transform('SRID=4326;POINT(1.981159 36.414521)'::geometry, 3857)), +(73, 'SRID=4326;POINT(1.981434 36.414368)'::geometry, ST_Transform('SRID=4326;POINT(1.981434 36.414368)'::geometry, 3857)), +(74, 'SRID=4326;POINT(1.981508 36.414849)'::geometry, ST_Transform('SRID=4326;POINT(1.981508 36.414849)'::geometry, 3857)), +(75, 'SRID=4326;POINT(1.980794 36.414325)'::geometry, ST_Transform('SRID=4326;POINT(1.980794 36.414325)'::geometry, 3857)), +(76, 'SRID=4326;POINT(1.981257 36.414346)'::geometry, ST_Transform('SRID=4326;POINT(1.981257 36.414346)'::geometry, 3857)), +(77, 'SRID=4326;POINT(-0.953948 39.768838)'::geometry, ST_Transform('SRID=4326;POINT(-0.953948 39.768838)'::geometry, 3857)), +(78, 'SRID=4326;POINT(-0.954525 39.768965)'::geometry, ST_Transform('SRID=4326;POINT(-0.954525 39.768965)'::geometry, 3857)), +(79, 'SRID=4326;POINT(-0.954753 39.76904)'::geometry, ST_Transform('SRID=4326;POINT(-0.954753 39.76904)'::geometry, 3857)), +(80, 'SRID=4326;POINT(-0.954287 39.769265)'::geometry, ST_Transform('SRID=4326;POINT(-0.954287 39.769265)'::geometry, 3857)), +(81, 'SRID=4326;POINT(-0.953996 39.76948)'::geometry, ST_Transform('SRID=4326;POINT(-0.953996 39.76948)'::geometry, 3857)), +(82, 'SRID=4326;POINT(-0.954469 39.769349)'::geometry, ST_Transform('SRID=4326;POINT(-0.954469 39.769349)'::geometry, 3857)), +(83, 'SRID=4326;POINT(-0.953957 39.769444)'::geometry, ST_Transform('SRID=4326;POINT(-0.953957 39.769444)'::geometry, 3857)), +(84, 'SRID=4326;POINT(-0.954757 39.7688)'::geometry, ST_Transform('SRID=4326;POINT(-0.954757 39.7688)'::geometry, 3857)), +(85, 'SRID=4326;POINT(-0.954196 39.769695)'::geometry, ST_Transform('SRID=4326;POINT(-0.954196 39.769695)'::geometry, 3857)), +(86, 'SRID=4326;POINT(-0.954047 39.768844)'::geometry, ST_Transform('SRID=4326;POINT(-0.954047 39.768844)'::geometry, 3857)), +(87, 'SRID=4326;POINT(-0.954191 39.769569)'::geometry, ST_Transform('SRID=4326;POINT(-0.954191 39.769569)'::geometry, 3857)), +(88, 'SRID=4326;POINT(-0.954122 39.7692)'::geometry, ST_Transform('SRID=4326;POINT(-0.954122 39.7692)'::geometry, 3857)), +(89, 'SRID=4326;POINT(-0.954273 39.76964)'::geometry, ST_Transform('SRID=4326;POINT(-0.954273 39.76964)'::geometry, 3857)), +(90, 'SRID=4326;POINT(-0.953816 39.769145)'::geometry, ST_Transform('SRID=4326;POINT(-0.953816 39.769145)'::geometry, 3857)), +(91, 'SRID=4326;POINT(-0.954025 39.7691)'::geometry, ST_Transform('SRID=4326;POINT(-0.954025 39.7691)'::geometry, 3857)), +(92, 'SRID=4326;POINT(-0.95416 39.769704)'::geometry, ST_Transform('SRID=4326;POINT(-0.95416 39.769704)'::geometry, 3857)), +(93, 'SRID=4326;POINT(-7.587221 32.009901)'::geometry, ST_Transform('SRID=4326;POINT(-7.587221 32.009901)'::geometry, 3857)), +(94, 'SRID=4326;POINT(-7.586856 32.010641)'::geometry, ST_Transform('SRID=4326;POINT(-7.586856 32.010641)'::geometry, 3857)), +(95, 'SRID=4326;POINT(-7.586722 32.010493)'::geometry, ST_Transform('SRID=4326;POINT(-7.586722 32.010493)'::geometry, 3857)), +(96, 'SRID=4326;POINT(-7.586391 32.010262)'::geometry, ST_Transform('SRID=4326;POINT(-7.586391 32.010262)'::geometry, 3857)), +(97, 'SRID=4326;POINT(-7.586974 32.010238)'::geometry, ST_Transform('SRID=4326;POINT(-7.586974 32.010238)'::geometry, 3857)), +(98, 'SRID=4326;POINT(-7.586775 32.010427)'::geometry, ST_Transform('SRID=4326;POINT(-7.586775 32.010427)'::geometry, 3857)), +(99, 'SRID=4326;POINT(-7.586872 32.009897)'::geometry, ST_Transform('SRID=4326;POINT(-7.586872 32.009897)'::geometry, 3857)), +(100, 'SRID=4326;POINT(-7.586628 32.010007)'::geometry, ST_Transform('SRID=4326;POINT(-7.586628 32.010007)'::geometry, 3857)), +(101, 'SRID=4326;POINT(-7.587165 32.010048)'::geometry, ST_Transform('SRID=4326;POINT(-7.587165 32.010048)'::geometry, 3857)), +(102, 'SRID=4326;POINT(1.184165 37.50755)'::geometry, ST_Transform('SRID=4326;POINT(1.184165 37.50755)'::geometry, 3857)), +(103, 'SRID=4326;POINT(1.183645 37.507603)'::geometry, ST_Transform('SRID=4326;POINT(1.183645 37.507603)'::geometry, 3857)), +(104, 'SRID=4326;POINT(1.184264 37.507825)'::geometry, ST_Transform('SRID=4326;POINT(1.184264 37.507825)'::geometry, 3857)), +(105, 'SRID=4326;POINT(1.184288 37.507609)'::geometry, ST_Transform('SRID=4326;POINT(1.184288 37.507609)'::geometry, 3857)), +(106, 'SRID=4326;POINT(1.183561 37.507407)'::geometry, ST_Transform('SRID=4326;POINT(1.183561 37.507407)'::geometry, 3857)), +(107, 'SRID=4326;POINT(1.184181 37.50741)'::geometry, ST_Transform('SRID=4326;POINT(1.184181 37.50741)'::geometry, 3857)), +(108, 'SRID=4326;POINT(1.183824 37.508023)'::geometry, ST_Transform('SRID=4326;POINT(1.183824 37.508023)'::geometry, 3857)), +(109, 'SRID=4326;POINT(1.183603 37.507709)'::geometry, ST_Transform('SRID=4326;POINT(1.183603 37.507709)'::geometry, 3857)), +(110, 'SRID=4326;POINT(1.18372 37.507527)'::geometry, ST_Transform('SRID=4326;POINT(1.18372 37.507527)'::geometry, 3857)), +(111, 'SRID=4326;POINT(1.183425 37.507321)'::geometry, ST_Transform('SRID=4326;POINT(1.183425 37.507321)'::geometry, 3857)), +(112, 'SRID=4326;POINT(1.184305 37.507615)'::geometry, ST_Transform('SRID=4326;POINT(1.184305 37.507615)'::geometry, 3857)), +(113, 'SRID=4326;POINT(1.183852 37.508007)'::geometry, ST_Transform('SRID=4326;POINT(1.183852 37.508007)'::geometry, 3857)), +(114, 'SRID=4326;POINT(3.831779 31.429738)'::geometry, ST_Transform('SRID=4326;POINT(3.831779 31.429738)'::geometry, 3857)), +(115, 'SRID=4326;POINT(3.831813 31.4298)'::geometry, ST_Transform('SRID=4326;POINT(3.831813 31.4298)'::geometry, 3857)), +(116, 'SRID=4326;POINT(3.831852 31.429751)'::geometry, ST_Transform('SRID=4326;POINT(3.831852 31.429751)'::geometry, 3857)), +(117, 'SRID=4326;POINT(3.832368 31.430079)'::geometry, ST_Transform('SRID=4326;POINT(3.832368 31.430079)'::geometry, 3857)), +(118, 'SRID=4326;POINT(3.83201 31.429663)'::geometry, ST_Transform('SRID=4326;POINT(3.83201 31.429663)'::geometry, 3857)), +(119, 'SRID=4326;POINT(3.832181 31.429739)'::geometry, ST_Transform('SRID=4326;POINT(3.832181 31.429739)'::geometry, 3857)), +(120, 'SRID=4326;POINT(3.831543 31.429602)'::geometry, ST_Transform('SRID=4326;POINT(3.831543 31.429602)'::geometry, 3857)), +(121, 'SRID=4326;POINT(3.831601 31.430119)'::geometry, ST_Transform('SRID=4326;POINT(3.831601 31.430119)'::geometry, 3857)), +(122, 'SRID=4326;POINT(3.831729 31.42977)'::geometry, ST_Transform('SRID=4326;POINT(3.831729 31.42977)'::geometry, 3857)), +(123, 'SRID=4326;POINT(3.831987 31.430192)'::geometry, ST_Transform('SRID=4326;POINT(3.831987 31.430192)'::geometry, 3857)), +(124, 'SRID=4326;POINT(8.47022 33.825659)'::geometry, ST_Transform('SRID=4326;POINT(8.47022 33.825659)'::geometry, 3857)), +(125, 'SRID=4326;POINT(8.470632 33.825421)'::geometry, ST_Transform('SRID=4326;POINT(8.470632 33.825421)'::geometry, 3857)), +(126, 'SRID=4326;POINT(8.470131 33.825262)'::geometry, ST_Transform('SRID=4326;POINT(8.470131 33.825262)'::geometry, 3857)), +(127, 'SRID=4326;POINT(8.470458 33.825972)'::geometry, ST_Transform('SRID=4326;POINT(8.470458 33.825972)'::geometry, 3857)), +(128, 'SRID=4326;POINT(8.470603 33.825651)'::geometry, ST_Transform('SRID=4326;POINT(8.470603 33.825651)'::geometry, 3857)), +(129, 'SRID=4326;POINT(8.470558 33.825475)'::geometry, ST_Transform('SRID=4326;POINT(8.470558 33.825475)'::geometry, 3857)), +(130, 'SRID=4326;POINT(8.470193 33.82544)'::geometry, ST_Transform('SRID=4326;POINT(8.470193 33.82544)'::geometry, 3857)), +(131, 'SRID=4326;POINT(8.47041 33.825325)'::geometry, ST_Transform('SRID=4326;POINT(8.47041 33.825325)'::geometry, 3857)), +(132, 'SRID=4326;POINT(8.470797 33.825402)'::geometry, ST_Transform('SRID=4326;POINT(8.470797 33.825402)'::geometry, 3857)), +(133, 'SRID=4326;POINT(8.470405 33.825234)'::geometry, ST_Transform('SRID=4326;POINT(8.470405 33.825234)'::geometry, 3857)), +(134, 'SRID=4326;POINT(8.47069 33.825547)'::geometry, ST_Transform('SRID=4326;POINT(8.47069 33.825547)'::geometry, 3857)), +(135, 'SRID=4326;POINT(8.470491 33.825588)'::geometry, ST_Transform('SRID=4326;POINT(8.470491 33.825588)'::geometry, 3857)), +(136, 'SRID=4326;POINT(8.470293 33.825798)'::geometry, ST_Transform('SRID=4326;POINT(8.470293 33.825798)'::geometry, 3857)), +(137, 'SRID=4326;POINT(8.47064 33.825412)'::geometry, ST_Transform('SRID=4326;POINT(8.47064 33.825412)'::geometry, 3857)), +(138, 'SRID=4326;POINT(8.470238 33.825427)'::geometry, ST_Transform('SRID=4326;POINT(8.470238 33.825427)'::geometry, 3857)), +(139, 'SRID=4326;POINT(8.20576 30.965218)'::geometry, ST_Transform('SRID=4326;POINT(8.20576 30.965218)'::geometry, 3857)), +(140, 'SRID=4326;POINT(8.205812 30.96474)'::geometry, ST_Transform('SRID=4326;POINT(8.205812 30.96474)'::geometry, 3857)), +(141, 'SRID=4326;POINT(8.205599 30.964695)'::geometry, ST_Transform('SRID=4326;POINT(8.205599 30.964695)'::geometry, 3857)), +(142, 'SRID=4326;POINT(-1.94997 37.466004)'::geometry, ST_Transform('SRID=4326;POINT(-1.94997 37.466004)'::geometry, 3857)), +(143, 'SRID=4326;POINT(-1.950577 37.466006)'::geometry, ST_Transform('SRID=4326;POINT(-1.950577 37.466006)'::geometry, 3857)), +(144, 'SRID=4326;POINT(-1.950744 37.465286)'::geometry, ST_Transform('SRID=4326;POINT(-1.950744 37.465286)'::geometry, 3857)), +(145, 'SRID=4326;POINT(-1.950241 37.466054)'::geometry, ST_Transform('SRID=4326;POINT(-1.950241 37.466054)'::geometry, 3857)), +(146, 'SRID=4326;POINT(-1.950335 37.465202)'::geometry, ST_Transform('SRID=4326;POINT(-1.950335 37.465202)'::geometry, 3857)), +(147, 'SRID=4326;POINT(-1.949968 37.465359)'::geometry, ST_Transform('SRID=4326;POINT(-1.949968 37.465359)'::geometry, 3857)), +(148, 'SRID=4326;POINT(-1.950149 37.465273)'::geometry, ST_Transform('SRID=4326;POINT(-1.950149 37.465273)'::geometry, 3857)), +(149, 'SRID=4326;POINT(-1.950008 37.46512)'::geometry, ST_Transform('SRID=4326;POINT(-1.950008 37.46512)'::geometry, 3857)), +(150, 'SRID=4326;POINT(-1.950516 37.465531)'::geometry, ST_Transform('SRID=4326;POINT(-1.950516 37.465531)'::geometry, 3857)), +(151, 'SRID=4326;POINT(-1.950595 37.465682)'::geometry, ST_Transform('SRID=4326;POINT(-1.950595 37.465682)'::geometry, 3857)), +(152, 'SRID=4326;POINT(-1.950222 37.465858)'::geometry, ST_Transform('SRID=4326;POINT(-1.950222 37.465858)'::geometry, 3857)), +(153, 'SRID=4326;POINT(-1.950306 37.465943)'::geometry, ST_Transform('SRID=4326;POINT(-1.950306 37.465943)'::geometry, 3857)), +(154, 'SRID=4326;POINT(-1.950272 37.466052)'::geometry, ST_Transform('SRID=4326;POINT(-1.950272 37.466052)'::geometry, 3857)), +(155, 'SRID=4326;POINT(-1.950724 37.465937)'::geometry, ST_Transform('SRID=4326;POINT(-1.950724 37.465937)'::geometry, 3857)), +(156, 'SRID=4326;POINT(-1.950334 37.465308)'::geometry, ST_Transform('SRID=4326;POINT(-1.950334 37.465308)'::geometry, 3857)), +(157, 'SRID=4326;POINT(-1.950797 37.465927)'::geometry, ST_Transform('SRID=4326;POINT(-1.950797 37.465927)'::geometry, 3857)), +(158, 'SRID=4326;POINT(9.779537 35.54475)'::geometry, ST_Transform('SRID=4326;POINT(9.779537 35.54475)'::geometry, 3857)), +(159, 'SRID=4326;POINT(9.779673 35.544579)'::geometry, ST_Transform('SRID=4326;POINT(9.779673 35.544579)'::geometry, 3857)), +(160, 'SRID=4326;POINT(9.779822 35.544831)'::geometry, ST_Transform('SRID=4326;POINT(9.779822 35.544831)'::geometry, 3857)), +(161, 'SRID=4326;POINT(-8.280843 31.373195)'::geometry, ST_Transform('SRID=4326;POINT(-8.280843 31.373195)'::geometry, 3857)), +(162, 'SRID=4326;POINT(-8.281007 31.374063)'::geometry, ST_Transform('SRID=4326;POINT(-8.281007 31.374063)'::geometry, 3857)), +(163, 'SRID=4326;POINT(-8.280772 31.373137)'::geometry, ST_Transform('SRID=4326;POINT(-8.280772 31.373137)'::geometry, 3857)), +(164, 'SRID=4326;POINT(-8.28126 31.373852)'::geometry, ST_Transform('SRID=4326;POINT(-8.28126 31.373852)'::geometry, 3857)), +(165, 'SRID=4326;POINT(-8.281032 31.374022)'::geometry, ST_Transform('SRID=4326;POINT(-8.281032 31.374022)'::geometry, 3857)), +(166, 'SRID=4326;POINT(-5.492422 32.876965)'::geometry, ST_Transform('SRID=4326;POINT(-5.492422 32.876965)'::geometry, 3857)), +(167, 'SRID=4326;POINT(-5.492822 32.877251)'::geometry, ST_Transform('SRID=4326;POINT(-5.492822 32.877251)'::geometry, 3857)), +(168, 'SRID=4326;POINT(-5.492531 32.877462)'::geometry, ST_Transform('SRID=4326;POINT(-5.492531 32.877462)'::geometry, 3857)), +(169, 'SRID=4326;POINT(-5.492944 32.877059)'::geometry, ST_Transform('SRID=4326;POINT(-5.492944 32.877059)'::geometry, 3857)), +(170, 'SRID=4326;POINT(-5.492309 32.877729)'::geometry, ST_Transform('SRID=4326;POINT(-5.492309 32.877729)'::geometry, 3857)), +(171, 'SRID=4326;POINT(-5.492892 32.877087)'::geometry, ST_Transform('SRID=4326;POINT(-5.492892 32.877087)'::geometry, 3857)), +(172, 'SRID=4326;POINT(3.901874 37.553725)'::geometry, ST_Transform('SRID=4326;POINT(3.901874 37.553725)'::geometry, 3857)), +(173, 'SRID=4326;POINT(3.902047 37.554527)'::geometry, ST_Transform('SRID=4326;POINT(3.902047 37.554527)'::geometry, 3857)), +(174, 'SRID=4326;POINT(3.901596 37.55417)'::geometry, ST_Transform('SRID=4326;POINT(3.901596 37.55417)'::geometry, 3857)), +(175, 'SRID=4326;POINT(3.902012 37.553726)'::geometry, ST_Transform('SRID=4326;POINT(3.902012 37.553726)'::geometry, 3857)), +(176, 'SRID=4326;POINT(3.901739 37.554492)'::geometry, ST_Transform('SRID=4326;POINT(3.901739 37.554492)'::geometry, 3857)), +(177, 'SRID=4326;POINT(3.901397 37.554598)'::geometry, ST_Transform('SRID=4326;POINT(3.901397 37.554598)'::geometry, 3857)), +(178, 'SRID=4326;POINT(3.901348 37.553662)'::geometry, ST_Transform('SRID=4326;POINT(3.901348 37.553662)'::geometry, 3857)), +(179, 'SRID=4326;POINT(3.90194 37.554032)'::geometry, ST_Transform('SRID=4326;POINT(3.90194 37.554032)'::geometry, 3857)), +(180, 'SRID=4326;POINT(-2.684028 31.988394)'::geometry, ST_Transform('SRID=4326;POINT(-2.684028 31.988394)'::geometry, 3857)), +(181, 'SRID=4326;POINT(-2.684145 31.988734)'::geometry, ST_Transform('SRID=4326;POINT(-2.684145 31.988734)'::geometry, 3857)), +(182, 'SRID=4326;POINT(-2.684262 31.988291)'::geometry, ST_Transform('SRID=4326;POINT(-2.684262 31.988291)'::geometry, 3857)), +(183, 'SRID=4326;POINT(-2.684535 31.988447)'::geometry, ST_Transform('SRID=4326;POINT(-2.684535 31.988447)'::geometry, 3857)), +(184, 'SRID=4326;POINT(-2.684214 31.9884)'::geometry, ST_Transform('SRID=4326;POINT(-2.684214 31.9884)'::geometry, 3857)), +(185, 'SRID=4326;POINT(-2.684298 31.989248)'::geometry, ST_Transform('SRID=4326;POINT(-2.684298 31.989248)'::geometry, 3857)), +(186, 'SRID=4326;POINT(-2.684349 31.988645)'::geometry, ST_Transform('SRID=4326;POINT(-2.684349 31.988645)'::geometry, 3857)), +(187, 'SRID=4326;POINT(-2.683797 31.988608)'::geometry, ST_Transform('SRID=4326;POINT(-2.683797 31.988608)'::geometry, 3857)), +(188, 'SRID=4326;POINT(-2.684117 31.988665)'::geometry, ST_Transform('SRID=4326;POINT(-2.684117 31.988665)'::geometry, 3857)), +(189, 'SRID=4326;POINT(-2.68444 31.988764)'::geometry, ST_Transform('SRID=4326;POINT(-2.68444 31.988764)'::geometry, 3857)), +(190, 'SRID=4326;POINT(-2.684519 31.98856)'::geometry, ST_Transform('SRID=4326;POINT(-2.684519 31.98856)'::geometry, 3857)), +(191, 'SRID=4326;POINT(-2.684361 31.988464)'::geometry, ST_Transform('SRID=4326;POINT(-2.684361 31.988464)'::geometry, 3857)), +(192, 'SRID=4326;POINT(-2.683966 31.988706)'::geometry, ST_Transform('SRID=4326;POINT(-2.683966 31.988706)'::geometry, 3857)), +(193, 'SRID=4326;POINT(-5.650994 38.876385)'::geometry, ST_Transform('SRID=4326;POINT(-5.650994 38.876385)'::geometry, 3857)), +(194, 'SRID=4326;POINT(-5.650197 38.876046)'::geometry, ST_Transform('SRID=4326;POINT(-5.650197 38.876046)'::geometry, 3857)), +(195, 'SRID=4326;POINT(-5.650764 38.875596)'::geometry, ST_Transform('SRID=4326;POINT(-5.650764 38.875596)'::geometry, 3857)), +(196, 'SRID=4326;POINT(-5.650742 38.875876)'::geometry, ST_Transform('SRID=4326;POINT(-5.650742 38.875876)'::geometry, 3857)), +(197, 'SRID=4326;POINT(-5.650184 38.876442)'::geometry, ST_Transform('SRID=4326;POINT(-5.650184 38.876442)'::geometry, 3857)), +(198, 'SRID=4326;POINT(-5.65088 38.876264)'::geometry, ST_Transform('SRID=4326;POINT(-5.65088 38.876264)'::geometry, 3857)), +(199, 'SRID=4326;POINT(-5.650245 38.876459)'::geometry, ST_Transform('SRID=4326;POINT(-5.650245 38.876459)'::geometry, 3857)), +(200, 'SRID=4326;POINT(0.94164 33.420389)'::geometry, ST_Transform('SRID=4326;POINT(0.94164 33.420389)'::geometry, 3857)), +(201, 'SRID=4326;POINT(0.942386 33.420323)'::geometry, ST_Transform('SRID=4326;POINT(0.942386 33.420323)'::geometry, 3857)), +(202, 'SRID=4326;POINT(0.942523 33.420441)'::geometry, ST_Transform('SRID=4326;POINT(0.942523 33.420441)'::geometry, 3857)), +(203, 'SRID=4326;POINT(0.941933 33.420348)'::geometry, ST_Transform('SRID=4326;POINT(0.941933 33.420348)'::geometry, 3857)), +(204, 'SRID=4326;POINT(0.942198 33.42006)'::geometry, ST_Transform('SRID=4326;POINT(0.942198 33.42006)'::geometry, 3857)), +(205, 'SRID=4326;POINT(0.942105 33.420254)'::geometry, ST_Transform('SRID=4326;POINT(0.942105 33.420254)'::geometry, 3857)), +(206, 'SRID=4326;POINT(0.94195 33.419859)'::geometry, ST_Transform('SRID=4326;POINT(0.94195 33.419859)'::geometry, 3857)), +(207, 'SRID=4326;POINT(0.9417 33.419948)'::geometry, ST_Transform('SRID=4326;POINT(0.9417 33.419948)'::geometry, 3857)), +(208, 'SRID=4326;POINT(0.942123 33.420747)'::geometry, ST_Transform('SRID=4326;POINT(0.942123 33.420747)'::geometry, 3857)), +(209, 'SRID=4326;POINT(0.942372 33.420072)'::geometry, ST_Transform('SRID=4326;POINT(0.942372 33.420072)'::geometry, 3857)), +(210, 'SRID=4326;POINT(0.941993 33.41995)'::geometry, ST_Transform('SRID=4326;POINT(0.941993 33.41995)'::geometry, 3857)), +(211, 'SRID=4326;POINT(6.372568 36.408838)'::geometry, ST_Transform('SRID=4326;POINT(6.372568 36.408838)'::geometry, 3857)), +(212, 'SRID=4326;POINT(6.372528 36.408063)'::geometry, ST_Transform('SRID=4326;POINT(6.372528 36.408063)'::geometry, 3857)), +(213, 'SRID=4326;POINT(6.373022 36.408816)'::geometry, ST_Transform('SRID=4326;POINT(6.373022 36.408816)'::geometry, 3857)), +(214, 'SRID=4326;POINT(6.373019 36.408548)'::geometry, ST_Transform('SRID=4326;POINT(6.373019 36.408548)'::geometry, 3857)), +(215, 'SRID=4326;POINT(6.372454 36.408772)'::geometry, ST_Transform('SRID=4326;POINT(6.372454 36.408772)'::geometry, 3857)), +(216, 'SRID=4326;POINT(6.372993 36.408855)'::geometry, ST_Transform('SRID=4326;POINT(6.372993 36.408855)'::geometry, 3857)), +(217, 'SRID=4326;POINT(6.372609 36.40839)'::geometry, ST_Transform('SRID=4326;POINT(6.372609 36.40839)'::geometry, 3857)), +(218, 'SRID=4326;POINT(6.373079 36.408347)'::geometry, ST_Transform('SRID=4326;POINT(6.373079 36.408347)'::geometry, 3857)), +(219, 'SRID=4326;POINT(6.37296 36.408476)'::geometry, ST_Transform('SRID=4326;POINT(6.37296 36.408476)'::geometry, 3857)), +(220, 'SRID=4326;POINT(6.245506 34.781366)'::geometry, ST_Transform('SRID=4326;POINT(6.245506 34.781366)'::geometry, 3857)), +(221, 'SRID=4326;POINT(6.246049 34.781405)'::geometry, ST_Transform('SRID=4326;POINT(6.246049 34.781405)'::geometry, 3857)), +(222, 'SRID=4326;POINT(6.245706 34.780982)'::geometry, ST_Transform('SRID=4326;POINT(6.245706 34.780982)'::geometry, 3857)), +(223, 'SRID=4326;POINT(6.245218 34.78099)'::geometry, ST_Transform('SRID=4326;POINT(6.245218 34.78099)'::geometry, 3857)), +(224, 'SRID=4326;POINT(6.245708 34.781197)'::geometry, ST_Transform('SRID=4326;POINT(6.245708 34.781197)'::geometry, 3857)), +(225, 'SRID=4326;POINT(6.245418 34.781542)'::geometry, ST_Transform('SRID=4326;POINT(6.245418 34.781542)'::geometry, 3857)), +(226, 'SRID=4326;POINT(6.245194 34.781294)'::geometry, ST_Transform('SRID=4326;POINT(6.245194 34.781294)'::geometry, 3857)), +(227, 'SRID=4326;POINT(6.245286 34.781662)'::geometry, ST_Transform('SRID=4326;POINT(6.245286 34.781662)'::geometry, 3857)), +(228, 'SRID=4326;POINT(6.246011 34.781247)'::geometry, ST_Transform('SRID=4326;POINT(6.246011 34.781247)'::geometry, 3857)), +(229, 'SRID=4326;POINT(-0.923093 32.167767)'::geometry, ST_Transform('SRID=4326;POINT(-0.923093 32.167767)'::geometry, 3857)), +(230, 'SRID=4326;POINT(-0.923549 32.167517)'::geometry, ST_Transform('SRID=4326;POINT(-0.923549 32.167517)'::geometry, 3857)), +(231, 'SRID=4326;POINT(-0.923094 32.166999)'::geometry, ST_Transform('SRID=4326;POINT(-0.923094 32.166999)'::geometry, 3857)), +(232, 'SRID=4326;POINT(-0.923765 32.166879)'::geometry, ST_Transform('SRID=4326;POINT(-0.923765 32.166879)'::geometry, 3857)), +(233, 'SRID=4326;POINT(-0.92404 32.167552)'::geometry, ST_Transform('SRID=4326;POINT(-0.92404 32.167552)'::geometry, 3857)), +(234, 'SRID=4326;POINT(-0.923406 32.166902)'::geometry, ST_Transform('SRID=4326;POINT(-0.923406 32.166902)'::geometry, 3857)), +(235, 'SRID=4326;POINT(-0.923247 32.167601)'::geometry, ST_Transform('SRID=4326;POINT(-0.923247 32.167601)'::geometry, 3857)), +(236, 'SRID=4326;POINT(-0.923771 32.167432)'::geometry, ST_Transform('SRID=4326;POINT(-0.923771 32.167432)'::geometry, 3857)), +(237, 'SRID=4326;POINT(-0.923963 32.167581)'::geometry, ST_Transform('SRID=4326;POINT(-0.923963 32.167581)'::geometry, 3857)), +(238, 'SRID=4326;POINT(-9.608738 39.303829)'::geometry, ST_Transform('SRID=4326;POINT(-9.608738 39.303829)'::geometry, 3857)), +(239, 'SRID=4326;POINT(-9.608444 39.303876)'::geometry, ST_Transform('SRID=4326;POINT(-9.608444 39.303876)'::geometry, 3857)), +(240, 'SRID=4326;POINT(8.268155 38.901343)'::geometry, ST_Transform('SRID=4326;POINT(8.268155 38.901343)'::geometry, 3857)), +(241, 'SRID=4326;POINT(8.267981 38.901286)'::geometry, ST_Transform('SRID=4326;POINT(8.267981 38.901286)'::geometry, 3857)), +(242, 'SRID=4326;POINT(8.268 38.901021)'::geometry, ST_Transform('SRID=4326;POINT(8.268 38.901021)'::geometry, 3857)), +(243, 'SRID=4326;POINT(8.26786 38.900806)'::geometry, ST_Transform('SRID=4326;POINT(8.26786 38.900806)'::geometry, 3857)), +(244, 'SRID=4326;POINT(8.268006 38.900948)'::geometry, ST_Transform('SRID=4326;POINT(8.268006 38.900948)'::geometry, 3857)), +(245, 'SRID=4326;POINT(8.26838 38.901022)'::geometry, ST_Transform('SRID=4326;POINT(8.26838 38.901022)'::geometry, 3857)), +(246, 'SRID=4326;POINT(6.530044 36.477513)'::geometry, ST_Transform('SRID=4326;POINT(6.530044 36.477513)'::geometry, 3857)), +(247, 'SRID=4326;POINT(6.529964 36.477625)'::geometry, ST_Transform('SRID=4326;POINT(6.529964 36.477625)'::geometry, 3857)), +(248, 'SRID=4326;POINT(6.529983 36.476846)'::geometry, ST_Transform('SRID=4326;POINT(6.529983 36.476846)'::geometry, 3857)), +(249, 'SRID=4326;POINT(-5.266262 38.716886)'::geometry, ST_Transform('SRID=4326;POINT(-5.266262 38.716886)'::geometry, 3857)), +(250, 'SRID=4326;POINT(-5.266413 38.716785)'::geometry, ST_Transform('SRID=4326;POINT(-5.266413 38.716785)'::geometry, 3857)), +(251, 'SRID=4326;POINT(-5.266222 38.717228)'::geometry, ST_Transform('SRID=4326;POINT(-5.266222 38.717228)'::geometry, 3857)), +(252, 'SRID=4326;POINT(-5.266795 38.717403)'::geometry, ST_Transform('SRID=4326;POINT(-5.266795 38.717403)'::geometry, 3857)), +(253, 'SRID=4326;POINT(-5.2668 38.716593)'::geometry, ST_Transform('SRID=4326;POINT(-5.2668 38.716593)'::geometry, 3857)), +(254, 'SRID=4326;POINT(-5.26693 38.716904)'::geometry, ST_Transform('SRID=4326;POINT(-5.26693 38.716904)'::geometry, 3857)), +(255, 'SRID=4326;POINT(-5.26618 38.717319)'::geometry, ST_Transform('SRID=4326;POINT(-5.26618 38.717319)'::geometry, 3857)), +(256, 'SRID=4326;POINT(-5.266235 38.716907)'::geometry, ST_Transform('SRID=4326;POINT(-5.266235 38.716907)'::geometry, 3857)), +(257, 'SRID=4326;POINT(-5.266846 38.716705)'::geometry, ST_Transform('SRID=4326;POINT(-5.266846 38.716705)'::geometry, 3857)), +(258, 'SRID=4326;POINT(-5.266687 38.717023)'::geometry, ST_Transform('SRID=4326;POINT(-5.266687 38.717023)'::geometry, 3857)), +(259, 'SRID=4326;POINT(-5.266512 38.717075)'::geometry, ST_Transform('SRID=4326;POINT(-5.266512 38.717075)'::geometry, 3857)), +(260, 'SRID=4326;POINT(-5.266189 38.716888)'::geometry, ST_Transform('SRID=4326;POINT(-5.266189 38.716888)'::geometry, 3857)), +(261, 'SRID=4326;POINT(-5.266565 38.717296)'::geometry, ST_Transform('SRID=4326;POINT(-5.266565 38.717296)'::geometry, 3857)), +(262, 'SRID=4326;POINT(9.504841 37.828039)'::geometry, ST_Transform('SRID=4326;POINT(9.504841 37.828039)'::geometry, 3857)), +(263, 'SRID=4326;POINT(9.504447 37.828131)'::geometry, ST_Transform('SRID=4326;POINT(9.504447 37.828131)'::geometry, 3857)), +(264, 'SRID=4326;POINT(9.505267 37.827879)'::geometry, ST_Transform('SRID=4326;POINT(9.505267 37.827879)'::geometry, 3857)), +(265, 'SRID=4326;POINT(9.505171 37.828127)'::geometry, ST_Transform('SRID=4326;POINT(9.505171 37.828127)'::geometry, 3857)), +(266, 'SRID=4326;POINT(9.505196 37.827809)'::geometry, ST_Transform('SRID=4326;POINT(9.505196 37.827809)'::geometry, 3857)), +(267, 'SRID=4326;POINT(9.505213 37.827885)'::geometry, ST_Transform('SRID=4326;POINT(9.505213 37.827885)'::geometry, 3857)), +(268, 'SRID=4326;POINT(9.504808 37.827401)'::geometry, ST_Transform('SRID=4326;POINT(9.504808 37.827401)'::geometry, 3857)), +(269, 'SRID=4326;POINT(-2.170801 36.903601)'::geometry, ST_Transform('SRID=4326;POINT(-2.170801 36.903601)'::geometry, 3857)), +(270, 'SRID=4326;POINT(-2.171542 36.904446)'::geometry, ST_Transform('SRID=4326;POINT(-2.171542 36.904446)'::geometry, 3857)), +(271, 'SRID=4326;POINT(-2.17161 36.904028)'::geometry, ST_Transform('SRID=4326;POINT(-2.17161 36.904028)'::geometry, 3857)), +(272, 'SRID=4326;POINT(-2.171332 36.903833)'::geometry, ST_Transform('SRID=4326;POINT(-2.171332 36.903833)'::geometry, 3857)), +(273, 'SRID=4326;POINT(-2.171042 36.904388)'::geometry, ST_Transform('SRID=4326;POINT(-2.171042 36.904388)'::geometry, 3857)), +(274, 'SRID=4326;POINT(-2.170963 36.903795)'::geometry, ST_Transform('SRID=4326;POINT(-2.170963 36.903795)'::geometry, 3857)), +(275, 'SRID=4326;POINT(-2.170688 36.903863)'::geometry, ST_Transform('SRID=4326;POINT(-2.170688 36.903863)'::geometry, 3857)), +(276, 'SRID=4326;POINT(-2.171087 36.903635)'::geometry, ST_Transform('SRID=4326;POINT(-2.171087 36.903635)'::geometry, 3857)), +(277, 'SRID=4326;POINT(-2.171346 36.903793)'::geometry, ST_Transform('SRID=4326;POINT(-2.171346 36.903793)'::geometry, 3857)), +(278, 'SRID=4326;POINT(-2.171005 36.903886)'::geometry, ST_Transform('SRID=4326;POINT(-2.171005 36.903886)'::geometry, 3857)), +(279, 'SRID=4326;POINT(-2.171343 36.9036)'::geometry, ST_Transform('SRID=4326;POINT(-2.171343 36.9036)'::geometry, 3857)), +(280, 'SRID=4326;POINT(-2.171242 36.904239)'::geometry, ST_Transform('SRID=4326;POINT(-2.171242 36.904239)'::geometry, 3857)), +(281, 'SRID=4326;POINT(-2.170868 36.903745)'::geometry, ST_Transform('SRID=4326;POINT(-2.170868 36.903745)'::geometry, 3857)), +(282, 'SRID=4326;POINT(-2.170799 36.90389)'::geometry, ST_Transform('SRID=4326;POINT(-2.170799 36.90389)'::geometry, 3857)), +(283, 'SRID=4326;POINT(-2.171564 36.903816)'::geometry, ST_Transform('SRID=4326;POINT(-2.171564 36.903816)'::geometry, 3857)), +(284, 'SRID=4326;POINT(8.368988 30.229265)'::geometry, ST_Transform('SRID=4326;POINT(8.368988 30.229265)'::geometry, 3857)), +(285, 'SRID=4326;POINT(8.369595 30.230013)'::geometry, ST_Transform('SRID=4326;POINT(8.369595 30.230013)'::geometry, 3857)), +(286, 'SRID=4326;POINT(8.3694 30.230109)'::geometry, ST_Transform('SRID=4326;POINT(8.3694 30.230109)'::geometry, 3857)), +(287, 'SRID=4326;POINT(8.369027 30.230082)'::geometry, ST_Transform('SRID=4326;POINT(8.369027 30.230082)'::geometry, 3857)), +(288, 'SRID=4326;POINT(8.368959 30.229372)'::geometry, ST_Transform('SRID=4326;POINT(8.368959 30.229372)'::geometry, 3857)), +(289, 'SRID=4326;POINT(8.369272 30.229717)'::geometry, ST_Transform('SRID=4326;POINT(8.369272 30.229717)'::geometry, 3857)), +(290, 'SRID=4326;POINT(8.369758 30.230161)'::geometry, ST_Transform('SRID=4326;POINT(8.369758 30.230161)'::geometry, 3857)), +(291, 'SRID=4326;POINT(8.36936 30.229783)'::geometry, ST_Transform('SRID=4326;POINT(8.36936 30.229783)'::geometry, 3857)), +(292, 'SRID=4326;POINT(-2.999782 31.589505)'::geometry, ST_Transform('SRID=4326;POINT(-2.999782 31.589505)'::geometry, 3857)), +(293, 'SRID=4326;POINT(-3.000221 31.589572)'::geometry, ST_Transform('SRID=4326;POINT(-3.000221 31.589572)'::geometry, 3857)), +(294, 'SRID=4326;POINT(-3.000412 31.589102)'::geometry, ST_Transform('SRID=4326;POINT(-3.000412 31.589102)'::geometry, 3857)), +(295, 'SRID=4326;POINT(-2.999662 31.589182)'::geometry, ST_Transform('SRID=4326;POINT(-2.999662 31.589182)'::geometry, 3857)), +(296, 'SRID=4326;POINT(-3.000224 31.589259)'::geometry, ST_Transform('SRID=4326;POINT(-3.000224 31.589259)'::geometry, 3857)), +(297, 'SRID=4326;POINT(-2.999983 31.589437)'::geometry, ST_Transform('SRID=4326;POINT(-2.999983 31.589437)'::geometry, 3857)), +(298, 'SRID=4326;POINT(-2.999877 31.589458)'::geometry, ST_Transform('SRID=4326;POINT(-2.999877 31.589458)'::geometry, 3857)), +(299, 'SRID=4326;POINT(-3.000263 31.589101)'::geometry, ST_Transform('SRID=4326;POINT(-3.000263 31.589101)'::geometry, 3857)), +(300, 'SRID=4326;POINT(-3.000401 31.589088)'::geometry, ST_Transform('SRID=4326;POINT(-3.000401 31.589088)'::geometry, 3857)), +(301, 'SRID=4326;POINT(-4.385852 39.752276)'::geometry, ST_Transform('SRID=4326;POINT(-4.385852 39.752276)'::geometry, 3857)), +(302, 'SRID=4326;POINT(-4.385884 39.752477)'::geometry, ST_Transform('SRID=4326;POINT(-4.385884 39.752477)'::geometry, 3857)), +(303, 'SRID=4326;POINT(-4.385735 39.752246)'::geometry, ST_Transform('SRID=4326;POINT(-4.385735 39.752246)'::geometry, 3857)), +(304, 'SRID=4326;POINT(-4.385942 39.752032)'::geometry, ST_Transform('SRID=4326;POINT(-4.385942 39.752032)'::geometry, 3857)), +(305, 'SRID=4326;POINT(-4.386277 39.751596)'::geometry, ST_Transform('SRID=4326;POINT(-4.386277 39.751596)'::geometry, 3857)), +(306, 'SRID=4326;POINT(-4.386394 39.751679)'::geometry, ST_Transform('SRID=4326;POINT(-4.386394 39.751679)'::geometry, 3857)), +(307, 'SRID=4326;POINT(-4.385727 39.752405)'::geometry, ST_Transform('SRID=4326;POINT(-4.385727 39.752405)'::geometry, 3857)), +(308, 'SRID=4326;POINT(-4.38659 39.752503)'::geometry, ST_Transform('SRID=4326;POINT(-4.38659 39.752503)'::geometry, 3857)), +(309, 'SRID=4326;POINT(-4.386676 39.751577)'::geometry, ST_Transform('SRID=4326;POINT(-4.386676 39.751577)'::geometry, 3857)), +(310, 'SRID=4326;POINT(-4.386058 39.752441)'::geometry, ST_Transform('SRID=4326;POINT(-4.386058 39.752441)'::geometry, 3857)), +(311, 'SRID=4326;POINT(8.783959 38.480157)'::geometry, ST_Transform('SRID=4326;POINT(8.783959 38.480157)'::geometry, 3857)), +(312, 'SRID=4326;POINT(8.784044 38.480085)'::geometry, ST_Transform('SRID=4326;POINT(8.784044 38.480085)'::geometry, 3857)), +(313, 'SRID=4326;POINT(8.78403 38.480162)'::geometry, ST_Transform('SRID=4326;POINT(8.78403 38.480162)'::geometry, 3857)), +(314, 'SRID=4326;POINT(8.784699 38.480106)'::geometry, ST_Transform('SRID=4326;POINT(8.784699 38.480106)'::geometry, 3857)), +(315, 'SRID=4326;POINT(8.784249 38.479839)'::geometry, ST_Transform('SRID=4326;POINT(8.784249 38.479839)'::geometry, 3857)), +(316, 'SRID=4326;POINT(8.783899 38.479817)'::geometry, ST_Transform('SRID=4326;POINT(8.783899 38.479817)'::geometry, 3857)), +(317, 'SRID=4326;POINT(8.78446 38.480156)'::geometry, ST_Transform('SRID=4326;POINT(8.78446 38.480156)'::geometry, 3857)), +(318, 'SRID=4326;POINT(8.784665 38.479739)'::geometry, ST_Transform('SRID=4326;POINT(8.784665 38.479739)'::geometry, 3857)), +(319, 'SRID=4326;POINT(8.784078 38.479956)'::geometry, ST_Transform('SRID=4326;POINT(8.784078 38.479956)'::geometry, 3857)), +(320, 'SRID=4326;POINT(8.783993 38.47977)'::geometry, ST_Transform('SRID=4326;POINT(8.783993 38.47977)'::geometry, 3857)), +(321, 'SRID=4326;POINT(8.784086 38.479532)'::geometry, ST_Transform('SRID=4326;POINT(8.784086 38.479532)'::geometry, 3857)), +(322, 'SRID=4326;POINT(8.784273 38.47969)'::geometry, ST_Transform('SRID=4326;POINT(8.784273 38.47969)'::geometry, 3857)), +(323, 'SRID=4326;POINT(8.784413 38.480132)'::geometry, ST_Transform('SRID=4326;POINT(8.784413 38.480132)'::geometry, 3857)), +(324, 'SRID=4326;POINT(8.784039 38.479655)'::geometry, ST_Transform('SRID=4326;POINT(8.784039 38.479655)'::geometry, 3857)), +(325, 'SRID=4326;POINT(8.783959 38.479375)'::geometry, ST_Transform('SRID=4326;POINT(8.783959 38.479375)'::geometry, 3857)), +(326, 'SRID=4326;POINT(-8.060178 31.973027)'::geometry, ST_Transform('SRID=4326;POINT(-8.060178 31.973027)'::geometry, 3857)), +(327, 'SRID=4326;POINT(-8.059659 31.973225)'::geometry, ST_Transform('SRID=4326;POINT(-8.059659 31.973225)'::geometry, 3857)), +(328, 'SRID=4326;POINT(-8.059924 31.973108)'::geometry, ST_Transform('SRID=4326;POINT(-8.059924 31.973108)'::geometry, 3857)), +(329, 'SRID=4326;POINT(-8.060125 31.973226)'::geometry, ST_Transform('SRID=4326;POINT(-8.060125 31.973226)'::geometry, 3857)), +(330, 'SRID=4326;POINT(-8.059829 31.973612)'::geometry, ST_Transform('SRID=4326;POINT(-8.059829 31.973612)'::geometry, 3857)), +(331, 'SRID=4326;POINT(-8.060249 31.97362)'::geometry, ST_Transform('SRID=4326;POINT(-8.060249 31.97362)'::geometry, 3857)), +(332, 'SRID=4326;POINT(-8.059803 31.972989)'::geometry, ST_Transform('SRID=4326;POINT(-8.059803 31.972989)'::geometry, 3857)), +(333, 'SRID=4326;POINT(-8.059599 31.973695)'::geometry, ST_Transform('SRID=4326;POINT(-8.059599 31.973695)'::geometry, 3857)), +(334, 'SRID=4326;POINT(-8.059936 31.973495)'::geometry, ST_Transform('SRID=4326;POINT(-8.059936 31.973495)'::geometry, 3857)), +(335, 'SRID=4326;POINT(-8.05947 31.97354)'::geometry, ST_Transform('SRID=4326;POINT(-8.05947 31.97354)'::geometry, 3857)), +(336, 'SRID=4326;POINT(-8.059534 31.973116)'::geometry, ST_Transform('SRID=4326;POINT(-8.059534 31.973116)'::geometry, 3857)), +(337, 'SRID=4326;POINT(-8.059575 31.973105)'::geometry, ST_Transform('SRID=4326;POINT(-8.059575 31.973105)'::geometry, 3857)), +(338, 'SRID=4326;POINT(-4.63212 35.998127)'::geometry, ST_Transform('SRID=4326;POINT(-4.63212 35.998127)'::geometry, 3857)), +(339, 'SRID=4326;POINT(-4.632715 35.998019)'::geometry, ST_Transform('SRID=4326;POINT(-4.632715 35.998019)'::geometry, 3857)), +(340, 'SRID=4326;POINT(-4.632119 35.997393)'::geometry, ST_Transform('SRID=4326;POINT(-4.632119 35.997393)'::geometry, 3857)), +(341, 'SRID=4326;POINT(-4.632803 35.99753)'::geometry, ST_Transform('SRID=4326;POINT(-4.632803 35.99753)'::geometry, 3857)), +(342, 'SRID=4326;POINT(-9.077417 37.751901)'::geometry, ST_Transform('SRID=4326;POINT(-9.077417 37.751901)'::geometry, 3857)), +(343, 'SRID=4326;POINT(-9.077265 37.752111)'::geometry, ST_Transform('SRID=4326;POINT(-9.077265 37.752111)'::geometry, 3857)), +(344, 'SRID=4326;POINT(-9.077343 37.75176)'::geometry, ST_Transform('SRID=4326;POINT(-9.077343 37.75176)'::geometry, 3857)), +(345, 'SRID=4326;POINT(-9.077467 37.751908)'::geometry, ST_Transform('SRID=4326;POINT(-9.077467 37.751908)'::geometry, 3857)), +(346, 'SRID=4326;POINT(-9.077027 37.751421)'::geometry, ST_Transform('SRID=4326;POINT(-9.077027 37.751421)'::geometry, 3857)), +(347, 'SRID=4326;POINT(-9.077902 37.751891)'::geometry, ST_Transform('SRID=4326;POINT(-9.077902 37.751891)'::geometry, 3857)), +(348, 'SRID=4326;POINT(-9.077804 37.751888)'::geometry, ST_Transform('SRID=4326;POINT(-9.077804 37.751888)'::geometry, 3857)), +(349, 'SRID=4326;POINT(-9.077673 37.751405)'::geometry, ST_Transform('SRID=4326;POINT(-9.077673 37.751405)'::geometry, 3857)), +(350, 'SRID=4326;POINT(-9.076988 37.751842)'::geometry, ST_Transform('SRID=4326;POINT(-9.076988 37.751842)'::geometry, 3857)), +(351, 'SRID=4326;POINT(-9.077688 37.75141)'::geometry, ST_Transform('SRID=4326;POINT(-9.077688 37.75141)'::geometry, 3857)), +(352, 'SRID=4326;POINT(-9.077493 37.751423)'::geometry, ST_Transform('SRID=4326;POINT(-9.077493 37.751423)'::geometry, 3857)), +(353, 'SRID=4326;POINT(-9.07777 37.75196)'::geometry, ST_Transform('SRID=4326;POINT(-9.07777 37.75196)'::geometry, 3857)), +(354, 'SRID=4326;POINT(-9.077415 37.751844)'::geometry, ST_Transform('SRID=4326;POINT(-9.077415 37.751844)'::geometry, 3857)), +(355, 'SRID=4326;POINT(-9.077104 37.751428)'::geometry, ST_Transform('SRID=4326;POINT(-9.077104 37.751428)'::geometry, 3857)), +(356, 'SRID=4326;POINT(-9.077731 37.751225)'::geometry, ST_Transform('SRID=4326;POINT(-9.077731 37.751225)'::geometry, 3857)), +(357, 'SRID=4326;POINT(5.736671 39.05025)'::geometry, ST_Transform('SRID=4326;POINT(5.736671 39.05025)'::geometry, 3857)), +(358, 'SRID=4326;POINT(2.486706 38.642451)'::geometry, ST_Transform('SRID=4326;POINT(2.486706 38.642451)'::geometry, 3857)), +(359, 'SRID=4326;POINT(2.487244 38.642613)'::geometry, ST_Transform('SRID=4326;POINT(2.487244 38.642613)'::geometry, 3857)), +(360, 'SRID=4326;POINT(2.487265 38.64297)'::geometry, ST_Transform('SRID=4326;POINT(2.487265 38.64297)'::geometry, 3857)), +(361, 'SRID=4326;POINT(2.487094 38.642426)'::geometry, ST_Transform('SRID=4326;POINT(2.487094 38.642426)'::geometry, 3857)), +(362, 'SRID=4326;POINT(2.486678 38.642585)'::geometry, ST_Transform('SRID=4326;POINT(2.486678 38.642585)'::geometry, 3857)), +(363, 'SRID=4326;POINT(2.487308 38.642908)'::geometry, ST_Transform('SRID=4326;POINT(2.487308 38.642908)'::geometry, 3857)), +(364, 'SRID=4326;POINT(2.486737 38.642071)'::geometry, ST_Transform('SRID=4326;POINT(2.486737 38.642071)'::geometry, 3857)), +(365, 'SRID=4326;POINT(2.486899 38.642834)'::geometry, ST_Transform('SRID=4326;POINT(2.486899 38.642834)'::geometry, 3857)), +(366, 'SRID=4326;POINT(2.487133 38.642518)'::geometry, ST_Transform('SRID=4326;POINT(2.487133 38.642518)'::geometry, 3857)), +(367, 'SRID=4326;POINT(0.190222 39.022953)'::geometry, ST_Transform('SRID=4326;POINT(0.190222 39.022953)'::geometry, 3857)), +(368, 'SRID=4326;POINT(0.190043 39.023114)'::geometry, ST_Transform('SRID=4326;POINT(0.190043 39.023114)'::geometry, 3857)), +(369, 'SRID=4326;POINT(0.190124 39.023072)'::geometry, ST_Transform('SRID=4326;POINT(0.190124 39.023072)'::geometry, 3857)), +(370, 'SRID=4326;POINT(0.190422 39.023139)'::geometry, ST_Transform('SRID=4326;POINT(0.190422 39.023139)'::geometry, 3857)), +(371, 'SRID=4326;POINT(0.190447 39.023119)'::geometry, ST_Transform('SRID=4326;POINT(0.190447 39.023119)'::geometry, 3857)), +(372, 'SRID=4326;POINT(0.190864 39.022787)'::geometry, ST_Transform('SRID=4326;POINT(0.190864 39.022787)'::geometry, 3857)), +(373, 'SRID=4326;POINT(0.190587 39.023213)'::geometry, ST_Transform('SRID=4326;POINT(0.190587 39.023213)'::geometry, 3857)), +(374, 'SRID=4326;POINT(0.190173 39.023267)'::geometry, ST_Transform('SRID=4326;POINT(0.190173 39.023267)'::geometry, 3857)), +(375, 'SRID=4326;POINT(0.190158 39.023269)'::geometry, ST_Transform('SRID=4326;POINT(0.190158 39.023269)'::geometry, 3857)), +(376, 'SRID=4326;POINT(0.190034 39.023105)'::geometry, ST_Transform('SRID=4326;POINT(0.190034 39.023105)'::geometry, 3857)), +(377, 'SRID=4326;POINT(0.190614 39.023247)'::geometry, ST_Transform('SRID=4326;POINT(0.190614 39.023247)'::geometry, 3857)), +(378, 'SRID=4326;POINT(0.19013 39.022976)'::geometry, ST_Transform('SRID=4326;POINT(0.19013 39.022976)'::geometry, 3857)), +(379, 'SRID=4326;POINT(0.190578 39.023254)'::geometry, ST_Transform('SRID=4326;POINT(0.190578 39.023254)'::geometry, 3857)), +(380, 'SRID=4326;POINT(-4.726492 38.505264)'::geometry, ST_Transform('SRID=4326;POINT(-4.726492 38.505264)'::geometry, 3857)), +(381, 'SRID=4326;POINT(-4.726996 38.505473)'::geometry, ST_Transform('SRID=4326;POINT(-4.726996 38.505473)'::geometry, 3857)), +(382, 'SRID=4326;POINT(6.295031 33.792646)'::geometry, ST_Transform('SRID=4326;POINT(6.295031 33.792646)'::geometry, 3857)), +(383, 'SRID=4326;POINT(6.29525 33.792686)'::geometry, ST_Transform('SRID=4326;POINT(6.29525 33.792686)'::geometry, 3857)), +(384, 'SRID=4326;POINT(6.294926 33.793128)'::geometry, ST_Transform('SRID=4326;POINT(6.294926 33.793128)'::geometry, 3857)), +(385, 'SRID=4326;POINT(6.295688 33.792557)'::geometry, ST_Transform('SRID=4326;POINT(6.295688 33.792557)'::geometry, 3857)), +(386, 'SRID=4326;POINT(6.295214 33.792642)'::geometry, ST_Transform('SRID=4326;POINT(6.295214 33.792642)'::geometry, 3857)), +(387, 'SRID=4326;POINT(6.295116 33.792807)'::geometry, ST_Transform('SRID=4326;POINT(6.295116 33.792807)'::geometry, 3857)), +(388, 'SRID=4326;POINT(6.295144 33.792432)'::geometry, ST_Transform('SRID=4326;POINT(6.295144 33.792432)'::geometry, 3857)), +(389, 'SRID=4326;POINT(6.295344 33.793005)'::geometry, ST_Transform('SRID=4326;POINT(6.295344 33.793005)'::geometry, 3857)), +(390, 'SRID=4326;POINT(6.294974 33.792792)'::geometry, ST_Transform('SRID=4326;POINT(6.294974 33.792792)'::geometry, 3857)), +(391, 'SRID=4326;POINT(6.29545 33.792402)'::geometry, ST_Transform('SRID=4326;POINT(6.29545 33.792402)'::geometry, 3857)), +(392, 'SRID=4326;POINT(6.295601 33.792992)'::geometry, ST_Transform('SRID=4326;POINT(6.295601 33.792992)'::geometry, 3857)), +(393, 'SRID=4326;POINT(6.295289 33.79258)'::geometry, ST_Transform('SRID=4326;POINT(6.295289 33.79258)'::geometry, 3857)), +(394, 'SRID=4326;POINT(6.295285 33.79334)'::geometry, ST_Transform('SRID=4326;POINT(6.295285 33.79334)'::geometry, 3857)), +(395, 'SRID=4326;POINT(6.295307 33.792945)'::geometry, ST_Transform('SRID=4326;POINT(6.295307 33.792945)'::geometry, 3857)), +(396, 'SRID=4326;POINT(-3.961321 37.574227)'::geometry, ST_Transform('SRID=4326;POINT(-3.961321 37.574227)'::geometry, 3857)), +(397, 'SRID=4326;POINT(-3.961179 37.574737)'::geometry, ST_Transform('SRID=4326;POINT(-3.961179 37.574737)'::geometry, 3857)), +(398, 'SRID=4326;POINT(-3.961895 37.574623)'::geometry, ST_Transform('SRID=4326;POINT(-3.961895 37.574623)'::geometry, 3857)), +(399, 'SRID=4326;POINT(-3.961152 37.574831)'::geometry, ST_Transform('SRID=4326;POINT(-3.961152 37.574831)'::geometry, 3857)), +(400, 'SRID=4326;POINT(-3.961619 37.574905)'::geometry, ST_Transform('SRID=4326;POINT(-3.961619 37.574905)'::geometry, 3857)), +(401, 'SRID=4326;POINT(-3.961297 37.574127)'::geometry, ST_Transform('SRID=4326;POINT(-3.961297 37.574127)'::geometry, 3857)), +(402, 'SRID=4326;POINT(-3.961714 37.574449)'::geometry, ST_Transform('SRID=4326;POINT(-3.961714 37.574449)'::geometry, 3857)), +(403, 'SRID=4326;POINT(-3.961663 37.574729)'::geometry, ST_Transform('SRID=4326;POINT(-3.961663 37.574729)'::geometry, 3857)), +(404, 'SRID=4326;POINT(-3.962034 37.574013)'::geometry, ST_Transform('SRID=4326;POINT(-3.962034 37.574013)'::geometry, 3857)), +(405, 'SRID=4326;POINT(-3.961185 37.574931)'::geometry, ST_Transform('SRID=4326;POINT(-3.961185 37.574931)'::geometry, 3857)), +(406, 'SRID=4326;POINT(-3.96149 37.574124)'::geometry, ST_Transform('SRID=4326;POINT(-3.96149 37.574124)'::geometry, 3857)), +(407, 'SRID=4326;POINT(-3.961513 37.574389)'::geometry, ST_Transform('SRID=4326;POINT(-3.961513 37.574389)'::geometry, 3857)), +(408, 'SRID=4326;POINT(-3.962069 37.57462)'::geometry, ST_Transform('SRID=4326;POINT(-3.962069 37.57462)'::geometry, 3857)), +(409, 'SRID=4326;POINT(-3.961603 37.574585)'::geometry, ST_Transform('SRID=4326;POINT(-3.961603 37.574585)'::geometry, 3857)), +(410, 'SRID=4326;POINT(-9.221169 39.607003)'::geometry, ST_Transform('SRID=4326;POINT(-9.221169 39.607003)'::geometry, 3857)), +(411, 'SRID=4326;POINT(-9.221883 39.607595)'::geometry, ST_Transform('SRID=4326;POINT(-9.221883 39.607595)'::geometry, 3857)), +(412, 'SRID=4326;POINT(-9.222102 39.607298)'::geometry, ST_Transform('SRID=4326;POINT(-9.222102 39.607298)'::geometry, 3857)), +(413, 'SRID=4326;POINT(-9.222118 39.606969)'::geometry, ST_Transform('SRID=4326;POINT(-9.222118 39.606969)'::geometry, 3857)), +(414, 'SRID=4326;POINT(-9.221516 39.607447)'::geometry, ST_Transform('SRID=4326;POINT(-9.221516 39.607447)'::geometry, 3857)), +(415, 'SRID=4326;POINT(-9.222017 39.607394)'::geometry, ST_Transform('SRID=4326;POINT(-9.222017 39.607394)'::geometry, 3857)), +(416, 'SRID=4326;POINT(-9.22136 39.607455)'::geometry, ST_Transform('SRID=4326;POINT(-9.22136 39.607455)'::geometry, 3857)), +(417, 'SRID=4326;POINT(-9.222014 39.606962)'::geometry, ST_Transform('SRID=4326;POINT(-9.222014 39.606962)'::geometry, 3857)), +(418, 'SRID=4326;POINT(-9.221755 39.607393)'::geometry, ST_Transform('SRID=4326;POINT(-9.221755 39.607393)'::geometry, 3857)), +(419, 'SRID=4326;POINT(-9.221748 39.607181)'::geometry, ST_Transform('SRID=4326;POINT(-9.221748 39.607181)'::geometry, 3857)), +(420, 'SRID=4326;POINT(-9.221728 39.607402)'::geometry, ST_Transform('SRID=4326;POINT(-9.221728 39.607402)'::geometry, 3857)), +(421, 'SRID=4326;POINT(-9.221372 39.60722)'::geometry, ST_Transform('SRID=4326;POINT(-9.221372 39.60722)'::geometry, 3857)), +(422, 'SRID=4326;POINT(-9.221399 39.607532)'::geometry, ST_Transform('SRID=4326;POINT(-9.221399 39.607532)'::geometry, 3857)), +(423, 'SRID=4326;POINT(-9.221766 39.60764)'::geometry, ST_Transform('SRID=4326;POINT(-9.221766 39.60764)'::geometry, 3857)), +(424, 'SRID=4326;POINT(-9.221211 39.607327)'::geometry, ST_Transform('SRID=4326;POINT(-9.221211 39.607327)'::geometry, 3857)), +(425, 'SRID=4326;POINT(-9.221834 39.607635)'::geometry, ST_Transform('SRID=4326;POINT(-9.221834 39.607635)'::geometry, 3857)), +(426, 'SRID=4326;POINT(6.85655 34.912087)'::geometry, ST_Transform('SRID=4326;POINT(6.85655 34.912087)'::geometry, 3857)), +(427, 'SRID=4326;POINT(6.856473 34.912241)'::geometry, ST_Transform('SRID=4326;POINT(6.856473 34.912241)'::geometry, 3857)), +(428, 'SRID=4326;POINT(6.856142 34.912217)'::geometry, ST_Transform('SRID=4326;POINT(6.856142 34.912217)'::geometry, 3857)), +(429, 'SRID=4326;POINT(6.856378 34.912182)'::geometry, ST_Transform('SRID=4326;POINT(6.856378 34.912182)'::geometry, 3857)), +(430, 'SRID=4326;POINT(6.856079 34.912444)'::geometry, ST_Transform('SRID=4326;POINT(6.856079 34.912444)'::geometry, 3857)), +(431, 'SRID=4326;POINT(6.856087 34.911668)'::geometry, ST_Transform('SRID=4326;POINT(6.856087 34.911668)'::geometry, 3857)), +(432, 'SRID=4326;POINT(6.856699 34.911491)'::geometry, ST_Transform('SRID=4326;POINT(6.856699 34.911491)'::geometry, 3857)), +(433, 'SRID=4326;POINT(6.856371 34.911687)'::geometry, ST_Transform('SRID=4326;POINT(6.856371 34.911687)'::geometry, 3857)), +(434, 'SRID=4326;POINT(6.856564 34.91177)'::geometry, ST_Transform('SRID=4326;POINT(6.856564 34.91177)'::geometry, 3857)), +(435, 'SRID=4326;POINT(6.856768 34.911903)'::geometry, ST_Transform('SRID=4326;POINT(6.856768 34.911903)'::geometry, 3857)), +(436, 'SRID=4326;POINT(6.856324 34.912415)'::geometry, ST_Transform('SRID=4326;POINT(6.856324 34.912415)'::geometry, 3857)), +(437, 'SRID=4326;POINT(6.856826 34.911767)'::geometry, ST_Transform('SRID=4326;POINT(6.856826 34.911767)'::geometry, 3857)), +(438, 'SRID=4326;POINT(6.856792 34.912182)'::geometry, ST_Transform('SRID=4326;POINT(6.856792 34.912182)'::geometry, 3857)), +(439, 'SRID=4326;POINT(6.856929 34.912379)'::geometry, ST_Transform('SRID=4326;POINT(6.856929 34.912379)'::geometry, 3857)), +(440, 'SRID=4326;POINT(6.85643 34.912242)'::geometry, ST_Transform('SRID=4326;POINT(6.85643 34.912242)'::geometry, 3857)), +(441, 'SRID=4326;POINT(3.596947 38.1486)'::geometry, ST_Transform('SRID=4326;POINT(3.596947 38.1486)'::geometry, 3857)), +(442, 'SRID=4326;POINT(3.596769 38.148948)'::geometry, ST_Transform('SRID=4326;POINT(3.596769 38.148948)'::geometry, 3857)), +(443, 'SRID=4326;POINT(3.596829 38.148394)'::geometry, ST_Transform('SRID=4326;POINT(3.596829 38.148394)'::geometry, 3857)), +(444, 'SRID=4326;POINT(3.597295 38.14811)'::geometry, ST_Transform('SRID=4326;POINT(3.597295 38.14811)'::geometry, 3857)), +(445, 'SRID=4326;POINT(3.597307 38.148007)'::geometry, ST_Transform('SRID=4326;POINT(3.597307 38.148007)'::geometry, 3857)), +(446, 'SRID=4326;POINT(3.597512 38.148592)'::geometry, ST_Transform('SRID=4326;POINT(3.597512 38.148592)'::geometry, 3857)), +(447, 'SRID=4326;POINT(3.596798 38.148721)'::geometry, ST_Transform('SRID=4326;POINT(3.596798 38.148721)'::geometry, 3857)), +(448, 'SRID=4326;POINT(3.597043 38.14809)'::geometry, ST_Transform('SRID=4326;POINT(3.597043 38.14809)'::geometry, 3857)), +(449, 'SRID=4326;POINT(3.597261 38.148706)'::geometry, ST_Transform('SRID=4326;POINT(3.597261 38.148706)'::geometry, 3857)), +(450, 'SRID=4326;POINT(3.597318 38.14896)'::geometry, ST_Transform('SRID=4326;POINT(3.597318 38.14896)'::geometry, 3857)), +(451, 'SRID=4326;POINT(7.017467 32.682268)'::geometry, ST_Transform('SRID=4326;POINT(7.017467 32.682268)'::geometry, 3857)), +(452, 'SRID=4326;POINT(7.017442 32.682523)'::geometry, ST_Transform('SRID=4326;POINT(7.017442 32.682523)'::geometry, 3857)), +(453, 'SRID=4326;POINT(7.017381 32.682706)'::geometry, ST_Transform('SRID=4326;POINT(7.017381 32.682706)'::geometry, 3857)), +(454, 'SRID=4326;POINT(7.017033 32.6818)'::geometry, ST_Transform('SRID=4326;POINT(7.017033 32.6818)'::geometry, 3857)), +(455, 'SRID=4326;POINT(7.017106 32.681931)'::geometry, ST_Transform('SRID=4326;POINT(7.017106 32.681931)'::geometry, 3857)), +(456, 'SRID=4326;POINT(7.017705 32.682579)'::geometry, ST_Transform('SRID=4326;POINT(7.017705 32.682579)'::geometry, 3857)), +(457, 'SRID=4326;POINT(7.017261 32.682337)'::geometry, ST_Transform('SRID=4326;POINT(7.017261 32.682337)'::geometry, 3857)), +(458, 'SRID=4326;POINT(7.017581 32.682233)'::geometry, ST_Transform('SRID=4326;POINT(7.017581 32.682233)'::geometry, 3857)), +(459, 'SRID=4326;POINT(7.017235 32.682232)'::geometry, ST_Transform('SRID=4326;POINT(7.017235 32.682232)'::geometry, 3857)), +(460, 'SRID=4326;POINT(7.017307 32.682267)'::geometry, ST_Transform('SRID=4326;POINT(7.017307 32.682267)'::geometry, 3857)), +(461, 'SRID=4326;POINT(7.017528 32.682155)'::geometry, ST_Transform('SRID=4326;POINT(7.017528 32.682155)'::geometry, 3857)), +(462, 'SRID=4326;POINT(7.017666 32.682105)'::geometry, ST_Transform('SRID=4326;POINT(7.017666 32.682105)'::geometry, 3857)), +(463, 'SRID=4326;POINT(7.017189 32.682041)'::geometry, ST_Transform('SRID=4326;POINT(7.017189 32.682041)'::geometry, 3857)), +(464, 'SRID=4326;POINT(-8.05544 34.279282)'::geometry, ST_Transform('SRID=4326;POINT(-8.05544 34.279282)'::geometry, 3857)), +(465, 'SRID=4326;POINT(-8.055997 34.279187)'::geometry, ST_Transform('SRID=4326;POINT(-8.055997 34.279187)'::geometry, 3857)), +(466, 'SRID=4326;POINT(-8.055628 34.278509)'::geometry, ST_Transform('SRID=4326;POINT(-8.055628 34.278509)'::geometry, 3857)), +(467, 'SRID=4326;POINT(-8.056024 34.278599)'::geometry, ST_Transform('SRID=4326;POINT(-8.056024 34.278599)'::geometry, 3857)), +(468, 'SRID=4326;POINT(-8.056048 34.278384)'::geometry, ST_Transform('SRID=4326;POINT(-8.056048 34.278384)'::geometry, 3857)), +(469, 'SRID=4326;POINT(-8.05553 34.278415)'::geometry, ST_Transform('SRID=4326;POINT(-8.05553 34.278415)'::geometry, 3857)), +(470, 'SRID=4326;POINT(-8.055728 34.279115)'::geometry, ST_Transform('SRID=4326;POINT(-8.055728 34.279115)'::geometry, 3857)), +(471, 'SRID=4326;POINT(-8.056245 34.278838)'::geometry, ST_Transform('SRID=4326;POINT(-8.056245 34.278838)'::geometry, 3857)), +(472, 'SRID=4326;POINT(-8.055941 34.279043)'::geometry, ST_Transform('SRID=4326;POINT(-8.055941 34.279043)'::geometry, 3857)), +(473, 'SRID=4326;POINT(-7.228337 37.816001)'::geometry, ST_Transform('SRID=4326;POINT(-7.228337 37.816001)'::geometry, 3857)), +(474, 'SRID=4326;POINT(-7.227998 37.816439)'::geometry, ST_Transform('SRID=4326;POINT(-7.227998 37.816439)'::geometry, 3857)), +(475, 'SRID=4326;POINT(-7.228233 37.816839)'::geometry, ST_Transform('SRID=4326;POINT(-7.228233 37.816839)'::geometry, 3857)), +(476, 'SRID=4326;POINT(-7.228156 37.816186)'::geometry, ST_Transform('SRID=4326;POINT(-7.228156 37.816186)'::geometry, 3857)), +(477, 'SRID=4326;POINT(-7.227702 37.816616)'::geometry, ST_Transform('SRID=4326;POINT(-7.227702 37.816616)'::geometry, 3857)), +(478, 'SRID=4326;POINT(-1.129358 38.380395)'::geometry, ST_Transform('SRID=4326;POINT(-1.129358 38.380395)'::geometry, 3857)), +(479, 'SRID=4326;POINT(-1.129632 38.379986)'::geometry, ST_Transform('SRID=4326;POINT(-1.129632 38.379986)'::geometry, 3857)), +(480, 'SRID=4326;POINT(-1.129738 38.379575)'::geometry, ST_Transform('SRID=4326;POINT(-1.129738 38.379575)'::geometry, 3857)), +(481, 'SRID=4326;POINT(-1.129916 38.38044)'::geometry, ST_Transform('SRID=4326;POINT(-1.129916 38.38044)'::geometry, 3857)), +(482, 'SRID=4326;POINT(-1.129103 38.379631)'::geometry, ST_Transform('SRID=4326;POINT(-1.129103 38.379631)'::geometry, 3857)), +(483, 'SRID=4326;POINT(-1.129994 38.379868)'::geometry, ST_Transform('SRID=4326;POINT(-1.129994 38.379868)'::geometry, 3857)), +(484, 'SRID=4326;POINT(5.367991 30.545321)'::geometry, ST_Transform('SRID=4326;POINT(5.367991 30.545321)'::geometry, 3857)), +(485, 'SRID=4326;POINT(5.367515 30.544982)'::geometry, ST_Transform('SRID=4326;POINT(5.367515 30.544982)'::geometry, 3857)), +(486, 'SRID=4326;POINT(5.367259 30.545084)'::geometry, ST_Transform('SRID=4326;POINT(5.367259 30.545084)'::geometry, 3857)), +(487, 'SRID=4326;POINT(5.368137 30.54498)'::geometry, ST_Transform('SRID=4326;POINT(5.368137 30.54498)'::geometry, 3857)), +(488, 'SRID=4326;POINT(5.367194 30.545244)'::geometry, ST_Transform('SRID=4326;POINT(5.367194 30.545244)'::geometry, 3857)), +(489, 'SRID=4326;POINT(5.367261 30.54535)'::geometry, ST_Transform('SRID=4326;POINT(5.367261 30.54535)'::geometry, 3857)), +(490, 'SRID=4326;POINT(5.367572 30.54492)'::geometry, ST_Transform('SRID=4326;POINT(5.367572 30.54492)'::geometry, 3857)), +(491, 'SRID=4326;POINT(5.367869 30.544706)'::geometry, ST_Transform('SRID=4326;POINT(5.367869 30.544706)'::geometry, 3857)), +(492, 'SRID=4326;POINT(5.368171 30.544438)'::geometry, ST_Transform('SRID=4326;POINT(5.368171 30.544438)'::geometry, 3857)), +(493, 'SRID=4326;POINT(5.367826 30.544732)'::geometry, ST_Transform('SRID=4326;POINT(5.367826 30.544732)'::geometry, 3857)), +(494, 'SRID=4326;POINT(5.367472 30.544565)'::geometry, ST_Transform('SRID=4326;POINT(5.367472 30.544565)'::geometry, 3857)), +(495, 'SRID=4326;POINT(5.367818 30.544714)'::geometry, ST_Transform('SRID=4326;POINT(5.367818 30.544714)'::geometry, 3857)), +(496, 'SRID=4326;POINT(5.367437 30.544804)'::geometry, ST_Transform('SRID=4326;POINT(5.367437 30.544804)'::geometry, 3857)), +(497, 'SRID=4326;POINT(3.578513 39.192891)'::geometry, ST_Transform('SRID=4326;POINT(3.578513 39.192891)'::geometry, 3857)), +(498, 'SRID=4326;POINT(3.578994 39.192304)'::geometry, ST_Transform('SRID=4326;POINT(3.578994 39.192304)'::geometry, 3857)), +(499, 'SRID=4326;POINT(3.578709 39.192954)'::geometry, ST_Transform('SRID=4326;POINT(3.578709 39.192954)'::geometry, 3857)), +(500, 'SRID=4326;POINT(3.5789 39.192329)'::geometry, ST_Transform('SRID=4326;POINT(3.5789 39.192329)'::geometry, 3857)), +(501, 'SRID=4326;POINT(3.57896 39.192534)'::geometry, ST_Transform('SRID=4326;POINT(3.57896 39.192534)'::geometry, 3857)), +(502, 'SRID=4326;POINT(3.578331 39.1927)'::geometry, ST_Transform('SRID=4326;POINT(3.578331 39.1927)'::geometry, 3857)), +(503, 'SRID=4326;POINT(6.467563 35.761929)'::geometry, ST_Transform('SRID=4326;POINT(6.467563 35.761929)'::geometry, 3857)), +(504, 'SRID=4326;POINT(6.467797 35.76232)'::geometry, ST_Transform('SRID=4326;POINT(6.467797 35.76232)'::geometry, 3857)), +(505, 'SRID=4326;POINT(6.468167 35.762407)'::geometry, ST_Transform('SRID=4326;POINT(6.468167 35.762407)'::geometry, 3857)), +(506, 'SRID=4326;POINT(6.467727 35.76243)'::geometry, ST_Transform('SRID=4326;POINT(6.467727 35.76243)'::geometry, 3857)), +(507, 'SRID=4326;POINT(6.467698 35.761842)'::geometry, ST_Transform('SRID=4326;POINT(6.467698 35.761842)'::geometry, 3857)), +(508, 'SRID=4326;POINT(6.468043 35.761548)'::geometry, ST_Transform('SRID=4326;POINT(6.468043 35.761548)'::geometry, 3857)), +(509, 'SRID=4326;POINT(6.467748 35.761895)'::geometry, ST_Transform('SRID=4326;POINT(6.467748 35.761895)'::geometry, 3857)), +(510, 'SRID=4326;POINT(-9.376008 37.66543)'::geometry, ST_Transform('SRID=4326;POINT(-9.376008 37.66543)'::geometry, 3857)), +(511, 'SRID=4326;POINT(-9.376352 37.665134)'::geometry, ST_Transform('SRID=4326;POINT(-9.376352 37.665134)'::geometry, 3857)), +(512, 'SRID=4326;POINT(-9.375792 37.665016)'::geometry, ST_Transform('SRID=4326;POINT(-9.375792 37.665016)'::geometry, 3857)), +(513, 'SRID=4326;POINT(-9.376451 37.664977)'::geometry, ST_Transform('SRID=4326;POINT(-9.376451 37.664977)'::geometry, 3857)), +(514, 'SRID=4326;POINT(-9.37563 37.664995)'::geometry, ST_Transform('SRID=4326;POINT(-9.37563 37.664995)'::geometry, 3857)), +(515, 'SRID=4326;POINT(-9.37582 37.665323)'::geometry, ST_Transform('SRID=4326;POINT(-9.37582 37.665323)'::geometry, 3857)), +(516, 'SRID=4326;POINT(-9.37587 37.665407)'::geometry, ST_Transform('SRID=4326;POINT(-9.37587 37.665407)'::geometry, 3857)), +(517, 'SRID=4326;POINT(-9.376338 37.665701)'::geometry, ST_Transform('SRID=4326;POINT(-9.376338 37.665701)'::geometry, 3857)), +(518, 'SRID=4326;POINT(-9.376514 37.665477)'::geometry, ST_Transform('SRID=4326;POINT(-9.376514 37.665477)'::geometry, 3857)), +(519, 'SRID=4326;POINT(-9.375748 37.66524)'::geometry, ST_Transform('SRID=4326;POINT(-9.375748 37.66524)'::geometry, 3857)), +(520, 'SRID=4326;POINT(1.260345 31.995092)'::geometry, ST_Transform('SRID=4326;POINT(1.260345 31.995092)'::geometry, 3857)), +(521, 'SRID=4326;POINT(1.259769 31.994365)'::geometry, ST_Transform('SRID=4326;POINT(1.259769 31.994365)'::geometry, 3857)), +(522, 'SRID=4326;POINT(1.259952 31.994605)'::geometry, ST_Transform('SRID=4326;POINT(1.259952 31.994605)'::geometry, 3857)), +(523, 'SRID=4326;POINT(1.26004 31.994175)'::geometry, ST_Transform('SRID=4326;POINT(1.26004 31.994175)'::geometry, 3857)), +(524, 'SRID=4326;POINT(1.260128 31.995111)'::geometry, ST_Transform('SRID=4326;POINT(1.260128 31.995111)'::geometry, 3857)), +(525, 'SRID=4326;POINT(1.259655 31.994736)'::geometry, ST_Transform('SRID=4326;POINT(1.259655 31.994736)'::geometry, 3857)), +(526, 'SRID=4326;POINT(1.259791 31.994912)'::geometry, ST_Transform('SRID=4326;POINT(1.259791 31.994912)'::geometry, 3857)), +(527, 'SRID=4326;POINT(1.260467 31.994231)'::geometry, ST_Transform('SRID=4326;POINT(1.260467 31.994231)'::geometry, 3857)), +(528, 'SRID=4326;POINT(1.25997 31.994557)'::geometry, ST_Transform('SRID=4326;POINT(1.25997 31.994557)'::geometry, 3857)), +(529, 'SRID=4326;POINT(1.260369 31.994511)'::geometry, ST_Transform('SRID=4326;POINT(1.260369 31.994511)'::geometry, 3857)), +(530, 'SRID=4326;POINT(1.259745 31.994475)'::geometry, ST_Transform('SRID=4326;POINT(1.259745 31.994475)'::geometry, 3857)), +(531, 'SRID=4326;POINT(1.259567 31.995074)'::geometry, ST_Transform('SRID=4326;POINT(1.259567 31.995074)'::geometry, 3857)), +(532, 'SRID=4326;POINT(1.260254 31.994468)'::geometry, ST_Transform('SRID=4326;POINT(1.260254 31.994468)'::geometry, 3857)), +(533, 'SRID=4326;POINT(1.259734 31.994586)'::geometry, ST_Transform('SRID=4326;POINT(1.259734 31.994586)'::geometry, 3857)), +(534, 'SRID=4326;POINT(1.260463 31.994721)'::geometry, ST_Transform('SRID=4326;POINT(1.260463 31.994721)'::geometry, 3857)), +(535, 'SRID=4326;POINT(2.729133 38.492349)'::geometry, ST_Transform('SRID=4326;POINT(2.729133 38.492349)'::geometry, 3857)), +(536, 'SRID=4326;POINT(-6.622615 33.402887)'::geometry, ST_Transform('SRID=4326;POINT(-6.622615 33.402887)'::geometry, 3857)), +(537, 'SRID=4326;POINT(-6.62201 33.40347)'::geometry, ST_Transform('SRID=4326;POINT(-6.62201 33.40347)'::geometry, 3857)), +(538, 'SRID=4326;POINT(-6.622602 33.403156)'::geometry, ST_Transform('SRID=4326;POINT(-6.622602 33.403156)'::geometry, 3857)), +(539, 'SRID=4326;POINT(-6.62229 33.403373)'::geometry, ST_Transform('SRID=4326;POINT(-6.62229 33.403373)'::geometry, 3857)), +(540, 'SRID=4326;POINT(-6.622021 33.403713)'::geometry, ST_Transform('SRID=4326;POINT(-6.622021 33.403713)'::geometry, 3857)), +(541, 'SRID=4326;POINT(-6.621709 33.403616)'::geometry, ST_Transform('SRID=4326;POINT(-6.621709 33.403616)'::geometry, 3857)), +(542, 'SRID=4326;POINT(-6.622664 33.403289)'::geometry, ST_Transform('SRID=4326;POINT(-6.622664 33.403289)'::geometry, 3857)), +(543, 'SRID=4326;POINT(-6.621894 33.403001)'::geometry, ST_Transform('SRID=4326;POINT(-6.621894 33.403001)'::geometry, 3857)), +(544, 'SRID=4326;POINT(-6.621753 33.403296)'::geometry, ST_Transform('SRID=4326;POINT(-6.621753 33.403296)'::geometry, 3857)), +(545, 'SRID=4326;POINT(-6.622631 33.403423)'::geometry, ST_Transform('SRID=4326;POINT(-6.622631 33.403423)'::geometry, 3857)), +(546, 'SRID=4326;POINT(-6.622649 33.402773)'::geometry, ST_Transform('SRID=4326;POINT(-6.622649 33.402773)'::geometry, 3857)), +(547, 'SRID=4326;POINT(-4.40069 32.83652)'::geometry, ST_Transform('SRID=4326;POINT(-4.40069 32.83652)'::geometry, 3857)), +(548, 'SRID=4326;POINT(-4.400915 32.835874)'::geometry, ST_Transform('SRID=4326;POINT(-4.400915 32.835874)'::geometry, 3857)), +(549, 'SRID=4326;POINT(-4.400611 32.836162)'::geometry, ST_Transform('SRID=4326;POINT(-4.400611 32.836162)'::geometry, 3857)), +(550, 'SRID=4326;POINT(-4.401156 32.836423)'::geometry, ST_Transform('SRID=4326;POINT(-4.401156 32.836423)'::geometry, 3857)), +(551, 'SRID=4326;POINT(-4.400751 32.836387)'::geometry, ST_Transform('SRID=4326;POINT(-4.400751 32.836387)'::geometry, 3857)), +(552, 'SRID=4326;POINT(-4.401099 32.836165)'::geometry, ST_Transform('SRID=4326;POINT(-4.401099 32.836165)'::geometry, 3857)), +(553, 'SRID=4326;POINT(-4.401483 32.836585)'::geometry, ST_Transform('SRID=4326;POINT(-4.401483 32.836585)'::geometry, 3857)), +(554, 'SRID=4326;POINT(-4.400596 32.836855)'::geometry, ST_Transform('SRID=4326;POINT(-4.400596 32.836855)'::geometry, 3857)), +(555, 'SRID=4326;POINT(-4.400921 32.836087)'::geometry, ST_Transform('SRID=4326;POINT(-4.400921 32.836087)'::geometry, 3857)), +(556, 'SRID=4326;POINT(-4.401047 32.836189)'::geometry, ST_Transform('SRID=4326;POINT(-4.401047 32.836189)'::geometry, 3857)), +(557, 'SRID=4326;POINT(-4.400684 32.836472)'::geometry, ST_Transform('SRID=4326;POINT(-4.400684 32.836472)'::geometry, 3857)), +(558, 'SRID=4326;POINT(4.492599 35.25261)'::geometry, ST_Transform('SRID=4326;POINT(4.492599 35.25261)'::geometry, 3857)), +(559, 'SRID=4326;POINT(4.492929 35.252912)'::geometry, ST_Transform('SRID=4326;POINT(4.492929 35.252912)'::geometry, 3857)), +(560, 'SRID=4326;POINT(4.49299 35.25299)'::geometry, ST_Transform('SRID=4326;POINT(4.49299 35.25299)'::geometry, 3857)), +(561, 'SRID=4326;POINT(-9.9593 31.93916)'::geometry, ST_Transform('SRID=4326;POINT(-9.9593 31.93916)'::geometry, 3857)), +(562, 'SRID=4326;POINT(-9.959219 31.939457)'::geometry, ST_Transform('SRID=4326;POINT(-9.959219 31.939457)'::geometry, 3857)), +(563, 'SRID=4326;POINT(-9.959225 31.938742)'::geometry, ST_Transform('SRID=4326;POINT(-9.959225 31.938742)'::geometry, 3857)), +(564, 'SRID=4326;POINT(-9.959793 31.939377)'::geometry, ST_Transform('SRID=4326;POINT(-9.959793 31.939377)'::geometry, 3857)), +(565, 'SRID=4326;POINT(-9.959077 31.9388)'::geometry, ST_Transform('SRID=4326;POINT(-9.959077 31.9388)'::geometry, 3857)), +(566, 'SRID=4326;POINT(-9.959222 31.93878)'::geometry, ST_Transform('SRID=4326;POINT(-9.959222 31.93878)'::geometry, 3857)), +(567, 'SRID=4326;POINT(-9.959156 31.939046)'::geometry, ST_Transform('SRID=4326;POINT(-9.959156 31.939046)'::geometry, 3857)), +(568, 'SRID=4326;POINT(-9.95889 31.938758)'::geometry, ST_Transform('SRID=4326;POINT(-9.95889 31.938758)'::geometry, 3857)), +(569, 'SRID=4326;POINT(-9.959658 31.939125)'::geometry, ST_Transform('SRID=4326;POINT(-9.959658 31.939125)'::geometry, 3857)), +(570, 'SRID=4326;POINT(-9.959243 31.939014)'::geometry, ST_Transform('SRID=4326;POINT(-9.959243 31.939014)'::geometry, 3857)), +(571, 'SRID=4326;POINT(-9.959627 31.939155)'::geometry, ST_Transform('SRID=4326;POINT(-9.959627 31.939155)'::geometry, 3857)), +(572, 'SRID=4326;POINT(-9.959284 31.938954)'::geometry, ST_Transform('SRID=4326;POINT(-9.959284 31.938954)'::geometry, 3857)), +(573, 'SRID=4326;POINT(-4.056215 35.879559)'::geometry, ST_Transform('SRID=4326;POINT(-4.056215 35.879559)'::geometry, 3857)), +(574, 'SRID=4326;POINT(9.407199 35.632402)'::geometry, ST_Transform('SRID=4326;POINT(9.407199 35.632402)'::geometry, 3857)), +(575, 'SRID=4326;POINT(9.407456 35.632353)'::geometry, ST_Transform('SRID=4326;POINT(9.407456 35.632353)'::geometry, 3857)), +(576, 'SRID=4326;POINT(9.407844 35.632295)'::geometry, ST_Transform('SRID=4326;POINT(9.407844 35.632295)'::geometry, 3857)), +(577, 'SRID=4326;POINT(9.40776 35.631777)'::geometry, ST_Transform('SRID=4326;POINT(9.40776 35.631777)'::geometry, 3857)), +(578, 'SRID=4326;POINT(2.231809 36.542849)'::geometry, ST_Transform('SRID=4326;POINT(2.231809 36.542849)'::geometry, 3857)), +(579, 'SRID=4326;POINT(2.232178 36.543185)'::geometry, ST_Transform('SRID=4326;POINT(2.232178 36.543185)'::geometry, 3857)), +(580, 'SRID=4326;POINT(2.232212 36.542512)'::geometry, ST_Transform('SRID=4326;POINT(2.232212 36.542512)'::geometry, 3857)), +(581, 'SRID=4326;POINT(2.232029 36.543168)'::geometry, ST_Transform('SRID=4326;POINT(2.232029 36.543168)'::geometry, 3857)), +(582, 'SRID=4326;POINT(2.231443 36.542672)'::geometry, ST_Transform('SRID=4326;POINT(2.231443 36.542672)'::geometry, 3857)), +(583, 'SRID=4326;POINT(2.231272 36.543057)'::geometry, ST_Transform('SRID=4326;POINT(2.231272 36.543057)'::geometry, 3857)), +(584, 'SRID=4326;POINT(2.231296 36.542955)'::geometry, ST_Transform('SRID=4326;POINT(2.231296 36.542955)'::geometry, 3857)), +(585, 'SRID=4326;POINT(2.231748 36.543061)'::geometry, ST_Transform('SRID=4326;POINT(2.231748 36.543061)'::geometry, 3857)), +(586, 'SRID=4326;POINT(2.232033 36.542659)'::geometry, ST_Transform('SRID=4326;POINT(2.232033 36.542659)'::geometry, 3857)), +(587, 'SRID=4326;POINT(2.23203 36.542826)'::geometry, ST_Transform('SRID=4326;POINT(2.23203 36.542826)'::geometry, 3857)), +(588, 'SRID=4326;POINT(2.232181 36.542546)'::geometry, ST_Transform('SRID=4326;POINT(2.232181 36.542546)'::geometry, 3857)), +(589, 'SRID=4326;POINT(2.232023 36.543425)'::geometry, ST_Transform('SRID=4326;POINT(2.232023 36.543425)'::geometry, 3857)), +(590, 'SRID=4326;POINT(0.948501 32.875271)'::geometry, ST_Transform('SRID=4326;POINT(0.948501 32.875271)'::geometry, 3857)), +(591, 'SRID=4326;POINT(0.9481 32.874688)'::geometry, ST_Transform('SRID=4326;POINT(0.9481 32.874688)'::geometry, 3857)), +(592, 'SRID=4326;POINT(0.948466 32.875415)'::geometry, ST_Transform('SRID=4326;POINT(0.948466 32.875415)'::geometry, 3857)), +(593, 'SRID=4326;POINT(0.947954 32.874821)'::geometry, ST_Transform('SRID=4326;POINT(0.947954 32.874821)'::geometry, 3857)), +(594, 'SRID=4326;POINT(0.947609 32.875461)'::geometry, ST_Transform('SRID=4326;POINT(0.947609 32.875461)'::geometry, 3857)), +(595, 'SRID=4326;POINT(0.948057 32.875049)'::geometry, ST_Transform('SRID=4326;POINT(0.948057 32.875049)'::geometry, 3857)), +(596, 'SRID=4326;POINT(0.94801 32.874707)'::geometry, ST_Transform('SRID=4326;POINT(0.94801 32.874707)'::geometry, 3857)), +(597, 'SRID=4326;POINT(0.947579 32.875047)'::geometry, ST_Transform('SRID=4326;POINT(0.947579 32.875047)'::geometry, 3857)), +(598, 'SRID=4326;POINT(0.948398 32.875394)'::geometry, ST_Transform('SRID=4326;POINT(0.948398 32.875394)'::geometry, 3857)), +(599, 'SRID=4326;POINT(0.948466 32.875444)'::geometry, ST_Transform('SRID=4326;POINT(0.948466 32.875444)'::geometry, 3857)), +(600, 'SRID=4326;POINT(0.94785 32.875375)'::geometry, ST_Transform('SRID=4326;POINT(0.94785 32.875375)'::geometry, 3857)), +(601, 'SRID=4326;POINT(0.948108 32.875197)'::geometry, ST_Transform('SRID=4326;POINT(0.948108 32.875197)'::geometry, 3857)), +(602, 'SRID=4326;POINT(0.948288 32.875307)'::geometry, ST_Transform('SRID=4326;POINT(0.948288 32.875307)'::geometry, 3857)), +(603, 'SRID=4326;POINT(0.948283 32.874956)'::geometry, ST_Transform('SRID=4326;POINT(0.948283 32.874956)'::geometry, 3857)), +(604, 'SRID=4326;POINT(0.948033 32.874929)'::geometry, ST_Transform('SRID=4326;POINT(0.948033 32.874929)'::geometry, 3857)), +(605, 'SRID=4326;POINT(0.948309 32.874623)'::geometry, ST_Transform('SRID=4326;POINT(0.948309 32.874623)'::geometry, 3857)), +(606, 'SRID=4326;POINT(-1.377445 36.13206)'::geometry, ST_Transform('SRID=4326;POINT(-1.377445 36.13206)'::geometry, 3857)), +(607, 'SRID=4326;POINT(-1.377573 36.132389)'::geometry, ST_Transform('SRID=4326;POINT(-1.377573 36.132389)'::geometry, 3857)), +(608, 'SRID=4326;POINT(-1.377342 36.132377)'::geometry, ST_Transform('SRID=4326;POINT(-1.377342 36.132377)'::geometry, 3857)), +(609, 'SRID=4326;POINT(-1.378103 36.131979)'::geometry, ST_Transform('SRID=4326;POINT(-1.378103 36.131979)'::geometry, 3857)), +(610, 'SRID=4326;POINT(-1.37759 36.132034)'::geometry, ST_Transform('SRID=4326;POINT(-1.37759 36.132034)'::geometry, 3857)), +(611, 'SRID=4326;POINT(-1.377544 36.13201)'::geometry, ST_Transform('SRID=4326;POINT(-1.377544 36.13201)'::geometry, 3857)), +(612, 'SRID=4326;POINT(-1.377877 36.132664)'::geometry, ST_Transform('SRID=4326;POINT(-1.377877 36.132664)'::geometry, 3857)), +(613, 'SRID=4326;POINT(-1.377243 36.1327)'::geometry, ST_Transform('SRID=4326;POINT(-1.377243 36.1327)'::geometry, 3857)), +(614, 'SRID=4326;POINT(-1.377821 36.132226)'::geometry, ST_Transform('SRID=4326;POINT(-1.377821 36.132226)'::geometry, 3857)), +(615, 'SRID=4326;POINT(-1.377819 36.131905)'::geometry, ST_Transform('SRID=4326;POINT(-1.377819 36.131905)'::geometry, 3857)), +(616, 'SRID=4326;POINT(-1.377647 36.132385)'::geometry, ST_Transform('SRID=4326;POINT(-1.377647 36.132385)'::geometry, 3857)), +(617, 'SRID=4326;POINT(-1.378114 36.132113)'::geometry, ST_Transform('SRID=4326;POINT(-1.378114 36.132113)'::geometry, 3857)), +(618, 'SRID=4326;POINT(1.281128 38.138626)'::geometry, ST_Transform('SRID=4326;POINT(1.281128 38.138626)'::geometry, 3857)), +(619, 'SRID=4326;POINT(1.281305 38.138959)'::geometry, ST_Transform('SRID=4326;POINT(1.281305 38.138959)'::geometry, 3857)), +(620, 'SRID=4326;POINT(1.281758 38.138407)'::geometry, ST_Transform('SRID=4326;POINT(1.281758 38.138407)'::geometry, 3857)), +(621, 'SRID=4326;POINT(1.281123 38.138734)'::geometry, ST_Transform('SRID=4326;POINT(1.281123 38.138734)'::geometry, 3857)), +(622, 'SRID=4326;POINT(1.281161 38.138177)'::geometry, ST_Transform('SRID=4326;POINT(1.281161 38.138177)'::geometry, 3857)), +(623, 'SRID=4326;POINT(1.281354 38.138617)'::geometry, ST_Transform('SRID=4326;POINT(1.281354 38.138617)'::geometry, 3857)), +(624, 'SRID=4326;POINT(1.281123 38.138171)'::geometry, ST_Transform('SRID=4326;POINT(1.281123 38.138171)'::geometry, 3857)), +(625, 'SRID=4326;POINT(1.001776 36.920915)'::geometry, ST_Transform('SRID=4326;POINT(1.001776 36.920915)'::geometry, 3857)), +(626, 'SRID=4326;POINT(1.001429 36.921273)'::geometry, ST_Transform('SRID=4326;POINT(1.001429 36.921273)'::geometry, 3857)), +(627, 'SRID=4326;POINT(1.001985 36.921254)'::geometry, ST_Transform('SRID=4326;POINT(1.001985 36.921254)'::geometry, 3857)), +(628, 'SRID=4326;POINT(1.001384 36.92111)'::geometry, ST_Transform('SRID=4326;POINT(1.001384 36.92111)'::geometry, 3857)), +(629, 'SRID=4326;POINT(1.001699 36.920728)'::geometry, ST_Transform('SRID=4326;POINT(1.001699 36.920728)'::geometry, 3857)), +(630, 'SRID=4326;POINT(1.002016 36.920362)'::geometry, ST_Transform('SRID=4326;POINT(1.002016 36.920362)'::geometry, 3857)), +(631, 'SRID=4326;POINT(1.001573 36.921188)'::geometry, ST_Transform('SRID=4326;POINT(1.001573 36.921188)'::geometry, 3857)), +(632, 'SRID=4326;POINT(1.00177 36.920421)'::geometry, ST_Transform('SRID=4326;POINT(1.00177 36.920421)'::geometry, 3857)), +(633, 'SRID=4326;POINT(1.001975 36.920794)'::geometry, ST_Transform('SRID=4326;POINT(1.001975 36.920794)'::geometry, 3857)), +(634, 'SRID=4326;POINT(1.001852 36.920518)'::geometry, ST_Transform('SRID=4326;POINT(1.001852 36.920518)'::geometry, 3857)), +(635, 'SRID=4326;POINT(1.001596 36.920567)'::geometry, ST_Transform('SRID=4326;POINT(1.001596 36.920567)'::geometry, 3857)), +(636, 'SRID=4326;POINT(1.002041 36.921094)'::geometry, ST_Transform('SRID=4326;POINT(1.002041 36.921094)'::geometry, 3857)), +(637, 'SRID=4326;POINT(1.00193 36.92129)'::geometry, ST_Transform('SRID=4326;POINT(1.00193 36.92129)'::geometry, 3857)), +(638, 'SRID=4326;POINT(1.001253 36.920578)'::geometry, ST_Transform('SRID=4326;POINT(1.001253 36.920578)'::geometry, 3857)), +(639, 'SRID=4326;POINT(1.001296 36.920603)'::geometry, ST_Transform('SRID=4326;POINT(1.001296 36.920603)'::geometry, 3857)), +(640, 'SRID=4326;POINT(1.001743 36.921216)'::geometry, ST_Transform('SRID=4326;POINT(1.001743 36.921216)'::geometry, 3857)), +(641, 'SRID=4326;POINT(-9.439246 39.930375)'::geometry, ST_Transform('SRID=4326;POINT(-9.439246 39.930375)'::geometry, 3857)), +(642, 'SRID=4326;POINT(-9.439831 39.93007)'::geometry, ST_Transform('SRID=4326;POINT(-9.439831 39.93007)'::geometry, 3857)), +(643, 'SRID=4326;POINT(-9.439794 39.930747)'::geometry, ST_Transform('SRID=4326;POINT(-9.439794 39.930747)'::geometry, 3857)), +(644, 'SRID=4326;POINT(7.051979 39.998654)'::geometry, ST_Transform('SRID=4326;POINT(7.051979 39.998654)'::geometry, 3857)), +(645, 'SRID=4326;POINT(7.052303 39.998459)'::geometry, ST_Transform('SRID=4326;POINT(7.052303 39.998459)'::geometry, 3857)), +(646, 'SRID=4326;POINT(7.051495 39.998286)'::geometry, ST_Transform('SRID=4326;POINT(7.051495 39.998286)'::geometry, 3857)), +(647, 'SRID=4326;POINT(7.052358 39.998959)'::geometry, ST_Transform('SRID=4326;POINT(7.052358 39.998959)'::geometry, 3857)), +(648, 'SRID=4326;POINT(7.051902 39.998646)'::geometry, ST_Transform('SRID=4326;POINT(7.051902 39.998646)'::geometry, 3857)), +(649, 'SRID=4326;POINT(7.051961 39.998936)'::geometry, ST_Transform('SRID=4326;POINT(7.051961 39.998936)'::geometry, 3857)), +(650, 'SRID=4326;POINT(7.052188 39.998715)'::geometry, ST_Transform('SRID=4326;POINT(7.052188 39.998715)'::geometry, 3857)), +(651, 'SRID=4326;POINT(7.051928 39.999019)'::geometry, ST_Transform('SRID=4326;POINT(7.051928 39.999019)'::geometry, 3857)), +(652, 'SRID=4326;POINT(7.051679 39.999193)'::geometry, ST_Transform('SRID=4326;POINT(7.051679 39.999193)'::geometry, 3857)), +(653, 'SRID=4326;POINT(7.052355 39.998444)'::geometry, ST_Transform('SRID=4326;POINT(7.052355 39.998444)'::geometry, 3857)), +(654, 'SRID=4326;POINT(7.052312 39.998467)'::geometry, ST_Transform('SRID=4326;POINT(7.052312 39.998467)'::geometry, 3857)), +(655, 'SRID=4326;POINT(3.946722 30.978786)'::geometry, ST_Transform('SRID=4326;POINT(3.946722 30.978786)'::geometry, 3857)), +(656, 'SRID=4326;POINT(3.946383 30.979446)'::geometry, ST_Transform('SRID=4326;POINT(3.946383 30.979446)'::geometry, 3857)), +(657, 'SRID=4326;POINT(3.946577 30.978671)'::geometry, ST_Transform('SRID=4326;POINT(3.946577 30.978671)'::geometry, 3857)), +(658, 'SRID=4326;POINT(3.946805 30.979383)'::geometry, ST_Transform('SRID=4326;POINT(3.946805 30.979383)'::geometry, 3857)), +(659, 'SRID=4326;POINT(4.739725 32.536293)'::geometry, ST_Transform('SRID=4326;POINT(4.739725 32.536293)'::geometry, 3857)), +(660, 'SRID=4326;POINT(4.739867 32.5367)'::geometry, ST_Transform('SRID=4326;POINT(4.739867 32.5367)'::geometry, 3857)), +(661, 'SRID=4326;POINT(4.739999 32.536189)'::geometry, ST_Transform('SRID=4326;POINT(4.739999 32.536189)'::geometry, 3857)), +(662, 'SRID=4326;POINT(4.739876 32.536571)'::geometry, ST_Transform('SRID=4326;POINT(4.739876 32.536571)'::geometry, 3857)), +(663, 'SRID=4326;POINT(4.739204 32.536119)'::geometry, ST_Transform('SRID=4326;POINT(4.739204 32.536119)'::geometry, 3857)), +(664, 'SRID=4326;POINT(4.739705 32.53637)'::geometry, ST_Transform('SRID=4326;POINT(4.739705 32.53637)'::geometry, 3857)), +(665, 'SRID=4326;POINT(4.739147 32.536027)'::geometry, ST_Transform('SRID=4326;POINT(4.739147 32.536027)'::geometry, 3857)), +(666, 'SRID=4326;POINT(4.739809 32.535831)'::geometry, ST_Transform('SRID=4326;POINT(4.739809 32.535831)'::geometry, 3857)), +(667, 'SRID=4326;POINT(4.739446 32.535993)'::geometry, ST_Transform('SRID=4326;POINT(4.739446 32.535993)'::geometry, 3857)), +(668, 'SRID=4326;POINT(4.739356 32.536354)'::geometry, ST_Transform('SRID=4326;POINT(4.739356 32.536354)'::geometry, 3857)), +(669, 'SRID=4326;POINT(4.73949 32.536547)'::geometry, ST_Transform('SRID=4326;POINT(4.73949 32.536547)'::geometry, 3857)), +(670, 'SRID=4326;POINT(4.739345 32.536142)'::geometry, ST_Transform('SRID=4326;POINT(4.739345 32.536142)'::geometry, 3857)), +(671, 'SRID=4326;POINT(4.73992 32.536513)'::geometry, ST_Transform('SRID=4326;POINT(4.73992 32.536513)'::geometry, 3857)), +(672, 'SRID=4326;POINT(4.739484 32.536518)'::geometry, ST_Transform('SRID=4326;POINT(4.739484 32.536518)'::geometry, 3857)), +(673, 'SRID=4326;POINT(4.739594 32.535765)'::geometry, ST_Transform('SRID=4326;POINT(4.739594 32.535765)'::geometry, 3857)), +(674, 'SRID=4326;POINT(-1.897518 32.955127)'::geometry, ST_Transform('SRID=4326;POINT(-1.897518 32.955127)'::geometry, 3857)), +(675, 'SRID=4326;POINT(-1.897857 32.955143)'::geometry, ST_Transform('SRID=4326;POINT(-1.897857 32.955143)'::geometry, 3857)), +(676, 'SRID=4326;POINT(-1.897766 32.954686)'::geometry, ST_Transform('SRID=4326;POINT(-1.897766 32.954686)'::geometry, 3857)), +(677, 'SRID=4326;POINT(6.858485 32.878875)'::geometry, ST_Transform('SRID=4326;POINT(6.858485 32.878875)'::geometry, 3857)), +(678, 'SRID=4326;POINT(6.858625 32.879165)'::geometry, ST_Transform('SRID=4326;POINT(6.858625 32.879165)'::geometry, 3857)), +(679, 'SRID=4326;POINT(6.859173 32.879623)'::geometry, ST_Transform('SRID=4326;POINT(6.859173 32.879623)'::geometry, 3857)), +(680, 'SRID=4326;POINT(6.858652 32.879073)'::geometry, ST_Transform('SRID=4326;POINT(6.858652 32.879073)'::geometry, 3857)), +(681, 'SRID=4326;POINT(6.858875 32.879512)'::geometry, ST_Transform('SRID=4326;POINT(6.858875 32.879512)'::geometry, 3857)), +(682, 'SRID=4326;POINT(2.489402 36.24209)'::geometry, ST_Transform('SRID=4326;POINT(2.489402 36.24209)'::geometry, 3857)), +(683, 'SRID=4326;POINT(2.490019 36.242308)'::geometry, ST_Transform('SRID=4326;POINT(2.490019 36.242308)'::geometry, 3857)), +(684, 'SRID=4326;POINT(2.490157 36.242104)'::geometry, ST_Transform('SRID=4326;POINT(2.490157 36.242104)'::geometry, 3857)), +(685, 'SRID=4326;POINT(2.48969 36.242247)'::geometry, ST_Transform('SRID=4326;POINT(2.48969 36.242247)'::geometry, 3857)), +(686, 'SRID=4326;POINT(2.489518 36.242617)'::geometry, ST_Transform('SRID=4326;POINT(2.489518 36.242617)'::geometry, 3857)), +(687, 'SRID=4326;POINT(2.490287 36.242602)'::geometry, ST_Transform('SRID=4326;POINT(2.490287 36.242602)'::geometry, 3857)), +(688, 'SRID=4326;POINT(2.490008 36.242113)'::geometry, ST_Transform('SRID=4326;POINT(2.490008 36.242113)'::geometry, 3857)), +(689, 'SRID=4326;POINT(2.489767 36.242141)'::geometry, ST_Transform('SRID=4326;POINT(2.489767 36.242141)'::geometry, 3857)), +(690, 'SRID=4326;POINT(2.490068 36.24219)'::geometry, ST_Transform('SRID=4326;POINT(2.490068 36.24219)'::geometry, 3857)), +(691, 'SRID=4326;POINT(2.489361 36.242592)'::geometry, ST_Transform('SRID=4326;POINT(2.489361 36.242592)'::geometry, 3857)), +(692, 'SRID=4326;POINT(4.675157 34.745728)'::geometry, ST_Transform('SRID=4326;POINT(4.675157 34.745728)'::geometry, 3857)), +(693, 'SRID=4326;POINT(4.675288 34.745268)'::geometry, ST_Transform('SRID=4326;POINT(4.675288 34.745268)'::geometry, 3857)), +(694, 'SRID=4326;POINT(4.67474 34.745439)'::geometry, ST_Transform('SRID=4326;POINT(4.67474 34.745439)'::geometry, 3857)), +(695, 'SRID=4326;POINT(-1.619779 36.505134)'::geometry, ST_Transform('SRID=4326;POINT(-1.619779 36.505134)'::geometry, 3857)), +(696, 'SRID=4326;POINT(-1.619178 36.504973)'::geometry, ST_Transform('SRID=4326;POINT(-1.619178 36.504973)'::geometry, 3857)), +(697, 'SRID=4326;POINT(1.443654 35.03996)'::geometry, ST_Transform('SRID=4326;POINT(1.443654 35.03996)'::geometry, 3857)), +(698, 'SRID=4326;POINT(1.443555 35.040102)'::geometry, ST_Transform('SRID=4326;POINT(1.443555 35.040102)'::geometry, 3857)), +(699, 'SRID=4326;POINT(1.444439 35.040191)'::geometry, ST_Transform('SRID=4326;POINT(1.444439 35.040191)'::geometry, 3857)), +(700, 'SRID=4326;POINT(1.443705 35.040334)'::geometry, ST_Transform('SRID=4326;POINT(1.443705 35.040334)'::geometry, 3857)), +(701, 'SRID=4326;POINT(1.444309 35.040845)'::geometry, ST_Transform('SRID=4326;POINT(1.444309 35.040845)'::geometry, 3857)), +(702, 'SRID=4326;POINT(1.444155 35.040343)'::geometry, ST_Transform('SRID=4326;POINT(1.444155 35.040343)'::geometry, 3857)), +(703, 'SRID=4326;POINT(1.443996 35.040538)'::geometry, ST_Transform('SRID=4326;POINT(1.443996 35.040538)'::geometry, 3857)), +(704, 'SRID=4326;POINT(1.443617 35.040449)'::geometry, ST_Transform('SRID=4326;POINT(1.443617 35.040449)'::geometry, 3857)), +(705, 'SRID=4326;POINT(1.443732 35.040449)'::geometry, ST_Transform('SRID=4326;POINT(1.443732 35.040449)'::geometry, 3857)), +(706, 'SRID=4326;POINT(1.510391 37.025753)'::geometry, ST_Transform('SRID=4326;POINT(1.510391 37.025753)'::geometry, 3857)), +(707, 'SRID=4326;POINT(1.510774 37.025573)'::geometry, ST_Transform('SRID=4326;POINT(1.510774 37.025573)'::geometry, 3857)), +(708, 'SRID=4326;POINT(-1.068005 30.909683)'::geometry, ST_Transform('SRID=4326;POINT(-1.068005 30.909683)'::geometry, 3857)), +(709, 'SRID=4326;POINT(-1.067915 30.910178)'::geometry, ST_Transform('SRID=4326;POINT(-1.067915 30.910178)'::geometry, 3857)), +(710, 'SRID=4326;POINT(-1.067998 30.909856)'::geometry, ST_Transform('SRID=4326;POINT(-1.067998 30.909856)'::geometry, 3857)), +(711, 'SRID=4326;POINT(-1.067593 30.910177)'::geometry, ST_Transform('SRID=4326;POINT(-1.067593 30.910177)'::geometry, 3857)), +(712, 'SRID=4326;POINT(-1.068124 30.909608)'::geometry, ST_Transform('SRID=4326;POINT(-1.068124 30.909608)'::geometry, 3857)), +(713, 'SRID=4326;POINT(-1.067982 30.909937)'::geometry, ST_Transform('SRID=4326;POINT(-1.067982 30.909937)'::geometry, 3857)), +(714, 'SRID=4326;POINT(-1.068222 30.909692)'::geometry, ST_Transform('SRID=4326;POINT(-1.068222 30.909692)'::geometry, 3857)), +(715, 'SRID=4326;POINT(-1.067383 30.909904)'::geometry, ST_Transform('SRID=4326;POINT(-1.067383 30.909904)'::geometry, 3857)), +(716, 'SRID=4326;POINT(-1.067335 30.91012)'::geometry, ST_Transform('SRID=4326;POINT(-1.067335 30.91012)'::geometry, 3857)), +(717, 'SRID=4326;POINT(-1.06821 30.909356)'::geometry, ST_Transform('SRID=4326;POINT(-1.06821 30.909356)'::geometry, 3857)), +(718, 'SRID=4326;POINT(-1.067598 30.909364)'::geometry, ST_Transform('SRID=4326;POINT(-1.067598 30.909364)'::geometry, 3857)), +(719, 'SRID=4326;POINT(-1.067629 30.909687)'::geometry, ST_Transform('SRID=4326;POINT(-1.067629 30.909687)'::geometry, 3857)), +(720, 'SRID=4326;POINT(-1.068031 30.90956)'::geometry, ST_Transform('SRID=4326;POINT(-1.068031 30.90956)'::geometry, 3857)), +(721, 'SRID=4326;POINT(-1.067461 30.909412)'::geometry, ST_Transform('SRID=4326;POINT(-1.067461 30.909412)'::geometry, 3857)), +(722, 'SRID=4326;POINT(-4.441301 35.734339)'::geometry, ST_Transform('SRID=4326;POINT(-4.441301 35.734339)'::geometry, 3857)), +(723, 'SRID=4326;POINT(-4.441614 35.734596)'::geometry, ST_Transform('SRID=4326;POINT(-4.441614 35.734596)'::geometry, 3857)), +(724, 'SRID=4326;POINT(-4.441374 35.734511)'::geometry, ST_Transform('SRID=4326;POINT(-4.441374 35.734511)'::geometry, 3857)), +(725, 'SRID=4326;POINT(-4.442144 35.733728)'::geometry, ST_Transform('SRID=4326;POINT(-4.442144 35.733728)'::geometry, 3857)), +(726, 'SRID=4326;POINT(-4.442129 35.733779)'::geometry, ST_Transform('SRID=4326;POINT(-4.442129 35.733779)'::geometry, 3857)), +(727, 'SRID=4326;POINT(-4.442129 35.7343)'::geometry, ST_Transform('SRID=4326;POINT(-4.442129 35.7343)'::geometry, 3857)), +(728, 'SRID=4326;POINT(-4.441357 35.734573)'::geometry, ST_Transform('SRID=4326;POINT(-4.441357 35.734573)'::geometry, 3857)), +(729, 'SRID=4326;POINT(-4.441611 35.734042)'::geometry, ST_Transform('SRID=4326;POINT(-4.441611 35.734042)'::geometry, 3857)), +(730, 'SRID=4326;POINT(-4.442273 35.734478)'::geometry, ST_Transform('SRID=4326;POINT(-4.442273 35.734478)'::geometry, 3857)), +(731, 'SRID=4326;POINT(3.777839 39.080855)'::geometry, ST_Transform('SRID=4326;POINT(3.777839 39.080855)'::geometry, 3857)), +(732, 'SRID=4326;POINT(3.778302 39.081637)'::geometry, ST_Transform('SRID=4326;POINT(3.778302 39.081637)'::geometry, 3857)), +(733, 'SRID=4326;POINT(3.778134 39.081327)'::geometry, ST_Transform('SRID=4326;POINT(3.778134 39.081327)'::geometry, 3857)), +(734, 'SRID=4326;POINT(3.77753 39.080837)'::geometry, ST_Transform('SRID=4326;POINT(3.77753 39.080837)'::geometry, 3857)), +(735, 'SRID=4326;POINT(3.777524 39.08106)'::geometry, ST_Transform('SRID=4326;POINT(3.777524 39.08106)'::geometry, 3857)), +(736, 'SRID=4326;POINT(3.778196 39.081177)'::geometry, ST_Transform('SRID=4326;POINT(3.778196 39.081177)'::geometry, 3857)), +(737, 'SRID=4326;POINT(3.777824 39.081648)'::geometry, ST_Transform('SRID=4326;POINT(3.777824 39.081648)'::geometry, 3857)), +(738, 'SRID=4326;POINT(3.778294 39.081016)'::geometry, ST_Transform('SRID=4326;POINT(3.778294 39.081016)'::geometry, 3857)), +(739, 'SRID=4326;POINT(3.778384 39.080821)'::geometry, ST_Transform('SRID=4326;POINT(3.778384 39.080821)'::geometry, 3857)), +(740, 'SRID=4326;POINT(3.77832 39.081738)'::geometry, ST_Transform('SRID=4326;POINT(3.77832 39.081738)'::geometry, 3857)), +(741, 'SRID=4326;POINT(3.77775 39.081581)'::geometry, ST_Transform('SRID=4326;POINT(3.77775 39.081581)'::geometry, 3857)), +(742, 'SRID=4326;POINT(3.777606 39.080794)'::geometry, ST_Transform('SRID=4326;POINT(3.777606 39.080794)'::geometry, 3857)), +(743, 'SRID=4326;POINT(3.777891 39.081417)'::geometry, ST_Transform('SRID=4326;POINT(3.777891 39.081417)'::geometry, 3857)), +(744, 'SRID=4326;POINT(5.649526 31.865244)'::geometry, ST_Transform('SRID=4326;POINT(5.649526 31.865244)'::geometry, 3857)), +(745, 'SRID=4326;POINT(5.649871 31.865085)'::geometry, ST_Transform('SRID=4326;POINT(5.649871 31.865085)'::geometry, 3857)), +(746, 'SRID=4326;POINT(5.649532 31.86498)'::geometry, ST_Transform('SRID=4326;POINT(5.649532 31.86498)'::geometry, 3857)), +(747, 'SRID=4326;POINT(5.650394 31.864659)'::geometry, ST_Transform('SRID=4326;POINT(5.650394 31.864659)'::geometry, 3857)), +(748, 'SRID=4326;POINT(5.650448 31.865148)'::geometry, ST_Transform('SRID=4326;POINT(5.650448 31.865148)'::geometry, 3857)), +(749, 'SRID=4326;POINT(5.649964 31.865283)'::geometry, ST_Transform('SRID=4326;POINT(5.649964 31.865283)'::geometry, 3857)), +(750, 'SRID=4326;POINT(5.650139 31.865148)'::geometry, ST_Transform('SRID=4326;POINT(5.650139 31.865148)'::geometry, 3857)), +(751, 'SRID=4326;POINT(5.650438 31.865057)'::geometry, ST_Transform('SRID=4326;POINT(5.650438 31.865057)'::geometry, 3857)), +(752, 'SRID=4326;POINT(5.649977 31.86457)'::geometry, ST_Transform('SRID=4326;POINT(5.649977 31.86457)'::geometry, 3857)), +(753, 'SRID=4326;POINT(5.649628 31.864566)'::geometry, ST_Transform('SRID=4326;POINT(5.649628 31.864566)'::geometry, 3857)), +(754, 'SRID=4326;POINT(-9.754618 33.438008)'::geometry, ST_Transform('SRID=4326;POINT(-9.754618 33.438008)'::geometry, 3857)), +(755, 'SRID=4326;POINT(-9.75386 33.437609)'::geometry, ST_Transform('SRID=4326;POINT(-9.75386 33.437609)'::geometry, 3857)), +(756, 'SRID=4326;POINT(-9.754443 33.437308)'::geometry, ST_Transform('SRID=4326;POINT(-9.754443 33.437308)'::geometry, 3857)), +(757, 'SRID=4326;POINT(-9.75421 33.437932)'::geometry, ST_Transform('SRID=4326;POINT(-9.75421 33.437932)'::geometry, 3857)), +(758, 'SRID=4326;POINT(-9.753773 33.437663)'::geometry, ST_Transform('SRID=4326;POINT(-9.753773 33.437663)'::geometry, 3857)), +(759, 'SRID=4326;POINT(-9.754267 33.437916)'::geometry, ST_Transform('SRID=4326;POINT(-9.754267 33.437916)'::geometry, 3857)), +(760, 'SRID=4326;POINT(-9.754199 33.437889)'::geometry, ST_Transform('SRID=4326;POINT(-9.754199 33.437889)'::geometry, 3857)), +(761, 'SRID=4326;POINT(-9.75385 33.437159)'::geometry, ST_Transform('SRID=4326;POINT(-9.75385 33.437159)'::geometry, 3857)), +(762, 'SRID=4326;POINT(-3.543263 37.732976)'::geometry, ST_Transform('SRID=4326;POINT(-3.543263 37.732976)'::geometry, 3857)), +(763, 'SRID=4326;POINT(-3.542739 37.73271)'::geometry, ST_Transform('SRID=4326;POINT(-3.542739 37.73271)'::geometry, 3857)), +(764, 'SRID=4326;POINT(-3.54322 37.733139)'::geometry, ST_Transform('SRID=4326;POINT(-3.54322 37.733139)'::geometry, 3857)), +(765, 'SRID=4326;POINT(-3.54322 37.732576)'::geometry, ST_Transform('SRID=4326;POINT(-3.54322 37.732576)'::geometry, 3857)), +(766, 'SRID=4326;POINT(-3.543006 37.732667)'::geometry, ST_Transform('SRID=4326;POINT(-3.543006 37.732667)'::geometry, 3857)), +(767, 'SRID=4326;POINT(-8.711766 37.59638)'::geometry, ST_Transform('SRID=4326;POINT(-8.711766 37.59638)'::geometry, 3857)), +(768, 'SRID=4326;POINT(-8.711754 37.596229)'::geometry, ST_Transform('SRID=4326;POINT(-8.711754 37.596229)'::geometry, 3857)), +(769, 'SRID=4326;POINT(-8.711602 37.596288)'::geometry, ST_Transform('SRID=4326;POINT(-8.711602 37.596288)'::geometry, 3857)), +(770, 'SRID=4326;POINT(-8.712524 37.59617)'::geometry, ST_Transform('SRID=4326;POINT(-8.712524 37.59617)'::geometry, 3857)), +(771, 'SRID=4326;POINT(-8.712334 37.596219)'::geometry, ST_Transform('SRID=4326;POINT(-8.712334 37.596219)'::geometry, 3857)), +(772, 'SRID=4326;POINT(-8.71181 37.596124)'::geometry, ST_Transform('SRID=4326;POINT(-8.71181 37.596124)'::geometry, 3857)), +(773, 'SRID=4326;POINT(-8.712069 37.596608)'::geometry, ST_Transform('SRID=4326;POINT(-8.712069 37.596608)'::geometry, 3857)), +(774, 'SRID=4326;POINT(-8.711985 37.596911)'::geometry, ST_Transform('SRID=4326;POINT(-8.711985 37.596911)'::geometry, 3857)), +(775, 'SRID=4326;POINT(-3.044214 35.702146)'::geometry, ST_Transform('SRID=4326;POINT(-3.044214 35.702146)'::geometry, 3857)), +(776, 'SRID=4326;POINT(-3.044209 35.702853)'::geometry, ST_Transform('SRID=4326;POINT(-3.044209 35.702853)'::geometry, 3857)), +(777, 'SRID=4326;POINT(-3.044276 35.703038)'::geometry, ST_Transform('SRID=4326;POINT(-3.044276 35.703038)'::geometry, 3857)), +(778, 'SRID=4326;POINT(-3.043811 35.702228)'::geometry, ST_Transform('SRID=4326;POINT(-3.043811 35.702228)'::geometry, 3857)), +(779, 'SRID=4326;POINT(-3.043957 35.702876)'::geometry, ST_Transform('SRID=4326;POINT(-3.043957 35.702876)'::geometry, 3857)), +(780, 'SRID=4326;POINT(-3.044306 35.70211)'::geometry, ST_Transform('SRID=4326;POINT(-3.044306 35.70211)'::geometry, 3857)), +(781, 'SRID=4326;POINT(-3.044272 35.702647)'::geometry, ST_Transform('SRID=4326;POINT(-3.044272 35.702647)'::geometry, 3857)), +(782, 'SRID=4326;POINT(-3.044 35.702192)'::geometry, ST_Transform('SRID=4326;POINT(-3.044 35.702192)'::geometry, 3857)), +(783, 'SRID=4326;POINT(-3.044468 35.702635)'::geometry, ST_Transform('SRID=4326;POINT(-3.044468 35.702635)'::geometry, 3857)), +(784, 'SRID=4326;POINT(-3.044076 35.702746)'::geometry, ST_Transform('SRID=4326;POINT(-3.044076 35.702746)'::geometry, 3857)), +(785, 'SRID=4326;POINT(-3.043738 35.702675)'::geometry, ST_Transform('SRID=4326;POINT(-3.043738 35.702675)'::geometry, 3857)), +(786, 'SRID=4326;POINT(-3.043795 35.702232)'::geometry, ST_Transform('SRID=4326;POINT(-3.043795 35.702232)'::geometry, 3857)), +(787, 'SRID=4326;POINT(-3.044209 35.702984)'::geometry, ST_Transform('SRID=4326;POINT(-3.044209 35.702984)'::geometry, 3857)), +(788, 'SRID=4326;POINT(-7.790389 34.460937)'::geometry, ST_Transform('SRID=4326;POINT(-7.790389 34.460937)'::geometry, 3857)), +(789, 'SRID=4326;POINT(-7.789629 34.460861)'::geometry, ST_Transform('SRID=4326;POINT(-7.789629 34.460861)'::geometry, 3857)), +(790, 'SRID=4326;POINT(-7.78971 34.460351)'::geometry, ST_Transform('SRID=4326;POINT(-7.78971 34.460351)'::geometry, 3857)), +(791, 'SRID=4326;POINT(-3.638793 31.769061)'::geometry, ST_Transform('SRID=4326;POINT(-3.638793 31.769061)'::geometry, 3857)), +(792, 'SRID=4326;POINT(-3.638466 31.768737)'::geometry, ST_Transform('SRID=4326;POINT(-3.638466 31.768737)'::geometry, 3857)), +(793, 'SRID=4326;POINT(-3.63824 31.768573)'::geometry, ST_Transform('SRID=4326;POINT(-3.63824 31.768573)'::geometry, 3857)), +(794, 'SRID=4326;POINT(-3.638398 31.768979)'::geometry, ST_Transform('SRID=4326;POINT(-3.638398 31.768979)'::geometry, 3857)), +(795, 'SRID=4326;POINT(-3.63876 31.768587)'::geometry, ST_Transform('SRID=4326;POINT(-3.63876 31.768587)'::geometry, 3857)), +(796, 'SRID=4326;POINT(-3.638016 31.769415)'::geometry, ST_Transform('SRID=4326;POINT(-3.638016 31.769415)'::geometry, 3857)), +(797, 'SRID=4326;POINT(-3.638079 31.768865)'::geometry, ST_Transform('SRID=4326;POINT(-3.638079 31.768865)'::geometry, 3857)), +(798, 'SRID=4326;POINT(-3.638309 31.768567)'::geometry, ST_Transform('SRID=4326;POINT(-3.638309 31.768567)'::geometry, 3857)), +(799, 'SRID=4326;POINT(-3.638519 31.76941)'::geometry, ST_Transform('SRID=4326;POINT(-3.638519 31.76941)'::geometry, 3857)), +(800, 'SRID=4326;POINT(-3.638692 31.768971)'::geometry, ST_Transform('SRID=4326;POINT(-3.638692 31.768971)'::geometry, 3857)), +(801, 'SRID=4326;POINT(-3.6379 31.768873)'::geometry, ST_Transform('SRID=4326;POINT(-3.6379 31.768873)'::geometry, 3857)), +(802, 'SRID=4326;POINT(-3.638416 31.768977)'::geometry, ST_Transform('SRID=4326;POINT(-3.638416 31.768977)'::geometry, 3857)), +(803, 'SRID=4326;POINT(3.482375 34.823772)'::geometry, ST_Transform('SRID=4326;POINT(3.482375 34.823772)'::geometry, 3857)), +(804, 'SRID=4326;POINT(3.482611 34.823862)'::geometry, ST_Transform('SRID=4326;POINT(3.482611 34.823862)'::geometry, 3857)), +(805, 'SRID=4326;POINT(3.482458 34.823835)'::geometry, ST_Transform('SRID=4326;POINT(3.482458 34.823835)'::geometry, 3857)), +(806, 'SRID=4326;POINT(3.482499 34.823217)'::geometry, ST_Transform('SRID=4326;POINT(3.482499 34.823217)'::geometry, 3857)), +(807, 'SRID=4326;POINT(3.481979 34.824033)'::geometry, ST_Transform('SRID=4326;POINT(3.481979 34.824033)'::geometry, 3857)), +(808, 'SRID=4326;POINT(-2.509218 34.847743)'::geometry, ST_Transform('SRID=4326;POINT(-2.509218 34.847743)'::geometry, 3857)), +(809, 'SRID=4326;POINT(-2.508889 34.847727)'::geometry, ST_Transform('SRID=4326;POINT(-2.508889 34.847727)'::geometry, 3857)), +(810, 'SRID=4326;POINT(-2.50892 34.846884)'::geometry, ST_Transform('SRID=4326;POINT(-2.50892 34.846884)'::geometry, 3857)), +(811, 'SRID=4326;POINT(-2.508925 34.847728)'::geometry, ST_Transform('SRID=4326;POINT(-2.508925 34.847728)'::geometry, 3857)), +(812, 'SRID=4326;POINT(-2.509686 34.847259)'::geometry, ST_Transform('SRID=4326;POINT(-2.509686 34.847259)'::geometry, 3857)), +(813, 'SRID=4326;POINT(-2.509642 34.847683)'::geometry, ST_Transform('SRID=4326;POINT(-2.509642 34.847683)'::geometry, 3857)), +(814, 'SRID=4326;POINT(-2.509494 34.847088)'::geometry, ST_Transform('SRID=4326;POINT(-2.509494 34.847088)'::geometry, 3857)), +(815, 'SRID=4326;POINT(-2.508858 34.847826)'::geometry, ST_Transform('SRID=4326;POINT(-2.508858 34.847826)'::geometry, 3857)), +(816, 'SRID=4326;POINT(-2.508911 34.84779)'::geometry, ST_Transform('SRID=4326;POINT(-2.508911 34.84779)'::geometry, 3857)), +(817, 'SRID=4326;POINT(-2.509036 34.847235)'::geometry, ST_Transform('SRID=4326;POINT(-2.509036 34.847235)'::geometry, 3857)), +(818, 'SRID=4326;POINT(-2.508977 34.847441)'::geometry, ST_Transform('SRID=4326;POINT(-2.508977 34.847441)'::geometry, 3857)), +(819, 'SRID=4326;POINT(-2.509094 34.847048)'::geometry, ST_Transform('SRID=4326;POINT(-2.509094 34.847048)'::geometry, 3857)), +(820, 'SRID=4326;POINT(-2.509022 34.847189)'::geometry, ST_Transform('SRID=4326;POINT(-2.509022 34.847189)'::geometry, 3857)), +(821, 'SRID=4326;POINT(-2.509208 34.847051)'::geometry, ST_Transform('SRID=4326;POINT(-2.509208 34.847051)'::geometry, 3857)), +(822, 'SRID=4326;POINT(-2.509642 34.847293)'::geometry, ST_Transform('SRID=4326;POINT(-2.509642 34.847293)'::geometry, 3857)), +(823, 'SRID=4326;POINT(0.326508 39.66647)'::geometry, ST_Transform('SRID=4326;POINT(0.326508 39.66647)'::geometry, 3857)), +(824, 'SRID=4326;POINT(0.325896 39.666548)'::geometry, ST_Transform('SRID=4326;POINT(0.325896 39.666548)'::geometry, 3857)), +(825, 'SRID=4326;POINT(0.326264 39.66692)'::geometry, ST_Transform('SRID=4326;POINT(0.326264 39.66692)'::geometry, 3857)), +(826, 'SRID=4326;POINT(0.326113 39.666649)'::geometry, ST_Transform('SRID=4326;POINT(0.326113 39.666649)'::geometry, 3857)), +(827, 'SRID=4326;POINT(0.326511 39.666485)'::geometry, ST_Transform('SRID=4326;POINT(0.326511 39.666485)'::geometry, 3857)), +(828, 'SRID=4326;POINT(0.326479 39.667199)'::geometry, ST_Transform('SRID=4326;POINT(0.326479 39.667199)'::geometry, 3857)), +(829, 'SRID=4326;POINT(0.325908 39.667345)'::geometry, ST_Transform('SRID=4326;POINT(0.325908 39.667345)'::geometry, 3857)), +(830, 'SRID=4326;POINT(0.326475 39.666531)'::geometry, ST_Transform('SRID=4326;POINT(0.326475 39.666531)'::geometry, 3857)), +(831, 'SRID=4326;POINT(0.325636 39.666852)'::geometry, ST_Transform('SRID=4326;POINT(0.325636 39.666852)'::geometry, 3857)), +(832, 'SRID=4326;POINT(0.326265 39.666438)'::geometry, ST_Transform('SRID=4326;POINT(0.326265 39.666438)'::geometry, 3857)), +(833, 'SRID=4326;POINT(9.174032 33.398054)'::geometry, ST_Transform('SRID=4326;POINT(9.174032 33.398054)'::geometry, 3857)), +(834, 'SRID=4326;POINT(9.174151 33.397592)'::geometry, ST_Transform('SRID=4326;POINT(9.174151 33.397592)'::geometry, 3857)), +(835, 'SRID=4326;POINT(9.173741 33.397925)'::geometry, ST_Transform('SRID=4326;POINT(9.173741 33.397925)'::geometry, 3857)), +(836, 'SRID=4326;POINT(9.173967 33.397743)'::geometry, ST_Transform('SRID=4326;POINT(9.173967 33.397743)'::geometry, 3857)), +(837, 'SRID=4326;POINT(9.173591 33.397683)'::geometry, ST_Transform('SRID=4326;POINT(9.173591 33.397683)'::geometry, 3857)), +(838, 'SRID=4326;POINT(9.17437 33.398353)'::geometry, ST_Transform('SRID=4326;POINT(9.17437 33.398353)'::geometry, 3857)), +(839, 'SRID=4326;POINT(1.83634 38.816707)'::geometry, ST_Transform('SRID=4326;POINT(1.83634 38.816707)'::geometry, 3857)), +(840, 'SRID=4326;POINT(1.836636 38.815905)'::geometry, ST_Transform('SRID=4326;POINT(1.836636 38.815905)'::geometry, 3857)), +(841, 'SRID=4326;POINT(1.836376 38.81682)'::geometry, ST_Transform('SRID=4326;POINT(1.836376 38.81682)'::geometry, 3857)), +(842, 'SRID=4326;POINT(1.836335 38.816239)'::geometry, ST_Transform('SRID=4326;POINT(1.836335 38.816239)'::geometry, 3857)), +(843, 'SRID=4326;POINT(1.83687 38.816413)'::geometry, ST_Transform('SRID=4326;POINT(1.83687 38.816413)'::geometry, 3857)), +(844, 'SRID=4326;POINT(1.837073 38.81631)'::geometry, ST_Transform('SRID=4326;POINT(1.837073 38.81631)'::geometry, 3857)), +(845, 'SRID=4326;POINT(1.836343 38.816733)'::geometry, ST_Transform('SRID=4326;POINT(1.836343 38.816733)'::geometry, 3857)), +(846, 'SRID=4326;POINT(1.836489 38.816262)'::geometry, ST_Transform('SRID=4326;POINT(1.836489 38.816262)'::geometry, 3857)), +(847, 'SRID=4326;POINT(1.83676 38.816723)'::geometry, ST_Transform('SRID=4326;POINT(1.83676 38.816723)'::geometry, 3857)), +(848, 'SRID=4326;POINT(-6.101184 30.891359)'::geometry, ST_Transform('SRID=4326;POINT(-6.101184 30.891359)'::geometry, 3857)), +(849, 'SRID=4326;POINT(-6.101891 30.891475)'::geometry, ST_Transform('SRID=4326;POINT(-6.101891 30.891475)'::geometry, 3857)), +(850, 'SRID=4326;POINT(-6.101454 30.890926)'::geometry, ST_Transform('SRID=4326;POINT(-6.101454 30.890926)'::geometry, 3857)), +(851, 'SRID=4326;POINT(-6.101107 30.891705)'::geometry, ST_Transform('SRID=4326;POINT(-6.101107 30.891705)'::geometry, 3857)), +(852, 'SRID=4326;POINT(-6.102024 30.891119)'::geometry, ST_Transform('SRID=4326;POINT(-6.102024 30.891119)'::geometry, 3857)), +(853, 'SRID=4326;POINT(-6.101783 30.891325)'::geometry, ST_Transform('SRID=4326;POINT(-6.101783 30.891325)'::geometry, 3857)), +(854, 'SRID=4326;POINT(-6.101777 30.891247)'::geometry, ST_Transform('SRID=4326;POINT(-6.101777 30.891247)'::geometry, 3857)), +(855, 'SRID=4326;POINT(-6.101719 30.891249)'::geometry, ST_Transform('SRID=4326;POINT(-6.101719 30.891249)'::geometry, 3857)), +(856, 'SRID=4326;POINT(-6.101544 30.891609)'::geometry, ST_Transform('SRID=4326;POINT(-6.101544 30.891609)'::geometry, 3857)), +(857, 'SRID=4326;POINT(-6.101199 30.891006)'::geometry, ST_Transform('SRID=4326;POINT(-6.101199 30.891006)'::geometry, 3857)), +(858, 'SRID=4326;POINT(-6.101879 30.891786)'::geometry, ST_Transform('SRID=4326;POINT(-6.101879 30.891786)'::geometry, 3857)), +(859, 'SRID=4326;POINT(0.467665 33.036704)'::geometry, ST_Transform('SRID=4326;POINT(0.467665 33.036704)'::geometry, 3857)), +(860, 'SRID=4326;POINT(0.46855 33.036736)'::geometry, ST_Transform('SRID=4326;POINT(0.46855 33.036736)'::geometry, 3857)), +(861, 'SRID=4326;POINT(0.467955 33.036171)'::geometry, ST_Transform('SRID=4326;POINT(0.467955 33.036171)'::geometry, 3857)), +(862, 'SRID=4326;POINT(0.46803 33.036307)'::geometry, ST_Transform('SRID=4326;POINT(0.46803 33.036307)'::geometry, 3857)), +(863, 'SRID=4326;POINT(0.467935 33.036645)'::geometry, ST_Transform('SRID=4326;POINT(0.467935 33.036645)'::geometry, 3857)), +(864, 'SRID=4326;POINT(0.468476 33.036343)'::geometry, ST_Transform('SRID=4326;POINT(0.468476 33.036343)'::geometry, 3857)), +(865, 'SRID=4326;POINT(-4.397995 38.108926)'::geometry, ST_Transform('SRID=4326;POINT(-4.397995 38.108926)'::geometry, 3857)), +(866, 'SRID=4326;POINT(-4.397981 38.10856)'::geometry, ST_Transform('SRID=4326;POINT(-4.397981 38.10856)'::geometry, 3857)), +(867, 'SRID=4326;POINT(-4.398207 38.107988)'::geometry, ST_Transform('SRID=4326;POINT(-4.398207 38.107988)'::geometry, 3857)), +(868, 'SRID=4326;POINT(9.353839 32.862791)'::geometry, ST_Transform('SRID=4326;POINT(9.353839 32.862791)'::geometry, 3857)), +(869, 'SRID=4326;POINT(4.939926 35.255665)'::geometry, ST_Transform('SRID=4326;POINT(4.939926 35.255665)'::geometry, 3857)), +(870, 'SRID=4326;POINT(4.940045 35.255507)'::geometry, ST_Transform('SRID=4326;POINT(4.940045 35.255507)'::geometry, 3857)), +(871, 'SRID=4326;POINT(4.94067 35.255616)'::geometry, ST_Transform('SRID=4326;POINT(4.94067 35.255616)'::geometry, 3857)), +(872, 'SRID=4326;POINT(4.940524 35.255542)'::geometry, ST_Transform('SRID=4326;POINT(4.940524 35.255542)'::geometry, 3857)), +(873, 'SRID=4326;POINT(4.940745 35.254987)'::geometry, ST_Transform('SRID=4326;POINT(4.940745 35.254987)'::geometry, 3857)), +(874, 'SRID=4326;POINT(4.939899 35.255589)'::geometry, ST_Transform('SRID=4326;POINT(4.939899 35.255589)'::geometry, 3857)), +(875, 'SRID=4326;POINT(4.940335 35.25572)'::geometry, ST_Transform('SRID=4326;POINT(4.940335 35.25572)'::geometry, 3857)), +(876, 'SRID=4326;POINT(4.93996 35.255052)'::geometry, ST_Transform('SRID=4326;POINT(4.93996 35.255052)'::geometry, 3857)), +(877, 'SRID=4326;POINT(4.940408 35.255539)'::geometry, ST_Transform('SRID=4326;POINT(4.940408 35.255539)'::geometry, 3857)), +(878, 'SRID=4326;POINT(4.940393 35.25571)'::geometry, ST_Transform('SRID=4326;POINT(4.940393 35.25571)'::geometry, 3857)), +(879, 'SRID=4326;POINT(4.940594 35.255653)'::geometry, ST_Transform('SRID=4326;POINT(4.940594 35.255653)'::geometry, 3857)), +(880, 'SRID=4326;POINT(4.940249 35.255422)'::geometry, ST_Transform('SRID=4326;POINT(4.940249 35.255422)'::geometry, 3857)), +(881, 'SRID=4326;POINT(4.940547 35.255623)'::geometry, ST_Transform('SRID=4326;POINT(4.940547 35.255623)'::geometry, 3857)), +(882, 'SRID=4326;POINT(4.940604 35.255766)'::geometry, ST_Transform('SRID=4326;POINT(4.940604 35.255766)'::geometry, 3857)), +(883, 'SRID=4326;POINT(-4.361161 35.792722)'::geometry, ST_Transform('SRID=4326;POINT(-4.361161 35.792722)'::geometry, 3857)), +(884, 'SRID=4326;POINT(-4.361616 35.792782)'::geometry, ST_Transform('SRID=4326;POINT(-4.361616 35.792782)'::geometry, 3857)), +(885, 'SRID=4326;POINT(-4.361326 35.793018)'::geometry, ST_Transform('SRID=4326;POINT(-4.361326 35.793018)'::geometry, 3857)), +(886, 'SRID=4326;POINT(-4.361662 35.793089)'::geometry, ST_Transform('SRID=4326;POINT(-4.361662 35.793089)'::geometry, 3857)), +(887, 'SRID=4326;POINT(-4.360844 35.793344)'::geometry, ST_Transform('SRID=4326;POINT(-4.360844 35.793344)'::geometry, 3857)), +(888, 'SRID=4326;POINT(-4.360797 35.792963)'::geometry, ST_Transform('SRID=4326;POINT(-4.360797 35.792963)'::geometry, 3857)), +(889, 'SRID=4326;POINT(-4.361643 35.792646)'::geometry, ST_Transform('SRID=4326;POINT(-4.361643 35.792646)'::geometry, 3857)), +(890, 'SRID=4326;POINT(-4.361294 35.792786)'::geometry, ST_Transform('SRID=4326;POINT(-4.361294 35.792786)'::geometry, 3857)), +(891, 'SRID=4326;POINT(-4.361255 35.792726)'::geometry, ST_Transform('SRID=4326;POINT(-4.361255 35.792726)'::geometry, 3857)), +(892, 'SRID=4326;POINT(-4.361299 35.793037)'::geometry, ST_Transform('SRID=4326;POINT(-4.361299 35.793037)'::geometry, 3857)), +(893, 'SRID=4326;POINT(-4.360759 35.793348)'::geometry, ST_Transform('SRID=4326;POINT(-4.360759 35.793348)'::geometry, 3857)), +(894, 'SRID=4326;POINT(-4.361492 35.792563)'::geometry, ST_Transform('SRID=4326;POINT(-4.361492 35.792563)'::geometry, 3857)), +(895, 'SRID=4326;POINT(-4.361138 35.792639)'::geometry, ST_Transform('SRID=4326;POINT(-4.361138 35.792639)'::geometry, 3857)), +(896, 'SRID=4326;POINT(-4.361626 35.793258)'::geometry, ST_Transform('SRID=4326;POINT(-4.361626 35.793258)'::geometry, 3857)), +(897, 'SRID=4326;POINT(-4.361442 35.792772)'::geometry, ST_Transform('SRID=4326;POINT(-4.361442 35.792772)'::geometry, 3857)), +(898, 'SRID=4326;POINT(9.523596 36.520863)'::geometry, ST_Transform('SRID=4326;POINT(9.523596 36.520863)'::geometry, 3857)), +(899, 'SRID=4326;POINT(9.524498 36.520605)'::geometry, ST_Transform('SRID=4326;POINT(9.524498 36.520605)'::geometry, 3857)), +(900, 'SRID=4326;POINT(9.524193 36.520504)'::geometry, ST_Transform('SRID=4326;POINT(9.524193 36.520504)'::geometry, 3857)), +(901, 'SRID=4326;POINT(9.523808 36.520676)'::geometry, ST_Transform('SRID=4326;POINT(9.523808 36.520676)'::geometry, 3857)), +(902, 'SRID=4326;POINT(9.523765 36.520077)'::geometry, ST_Transform('SRID=4326;POINT(9.523765 36.520077)'::geometry, 3857)), +(903, 'SRID=4326;POINT(9.524111 36.52008)'::geometry, ST_Transform('SRID=4326;POINT(9.524111 36.52008)'::geometry, 3857)), +(904, 'SRID=4326;POINT(9.523609 36.520475)'::geometry, ST_Transform('SRID=4326;POINT(9.523609 36.520475)'::geometry, 3857)), +(905, 'SRID=4326;POINT(9.523761 36.520034)'::geometry, ST_Transform('SRID=4326;POINT(9.523761 36.520034)'::geometry, 3857)), +(906, 'SRID=4326;POINT(2.691972 39.13515)'::geometry, ST_Transform('SRID=4326;POINT(2.691972 39.13515)'::geometry, 3857)), +(907, 'SRID=4326;POINT(2.692015 39.135473)'::geometry, ST_Transform('SRID=4326;POINT(2.692015 39.135473)'::geometry, 3857)), +(908, 'SRID=4326;POINT(2.691972 39.135047)'::geometry, ST_Transform('SRID=4326;POINT(2.691972 39.135047)'::geometry, 3857)), +(909, 'SRID=4326;POINT(2.692026 39.135081)'::geometry, ST_Transform('SRID=4326;POINT(2.692026 39.135081)'::geometry, 3857)), +(910, 'SRID=4326;POINT(0.008581 37.840553)'::geometry, ST_Transform('SRID=4326;POINT(0.008581 37.840553)'::geometry, 3857)), +(911, 'SRID=4326;POINT(0.008625 37.840396)'::geometry, ST_Transform('SRID=4326;POINT(0.008625 37.840396)'::geometry, 3857)), +(912, 'SRID=4326;POINT(0.00866 37.840515)'::geometry, ST_Transform('SRID=4326;POINT(0.00866 37.840515)'::geometry, 3857)), +(913, 'SRID=4326;POINT(0.008149 37.840567)'::geometry, ST_Transform('SRID=4326;POINT(0.008149 37.840567)'::geometry, 3857)), +(914, 'SRID=4326;POINT(0.008371 37.840179)'::geometry, ST_Transform('SRID=4326;POINT(0.008371 37.840179)'::geometry, 3857)), +(915, 'SRID=4326;POINT(0.008235 37.840314)'::geometry, ST_Transform('SRID=4326;POINT(0.008235 37.840314)'::geometry, 3857)), +(916, 'SRID=4326;POINT(0.008591 37.840371)'::geometry, ST_Transform('SRID=4326;POINT(0.008591 37.840371)'::geometry, 3857)), +(917, 'SRID=4326;POINT(0.007883 37.840346)'::geometry, ST_Transform('SRID=4326;POINT(0.007883 37.840346)'::geometry, 3857)), +(918, 'SRID=4326;POINT(0.007834 37.841039)'::geometry, ST_Transform('SRID=4326;POINT(0.007834 37.841039)'::geometry, 3857)), +(919, 'SRID=4326;POINT(-3.502093 32.72715)'::geometry, ST_Transform('SRID=4326;POINT(-3.502093 32.72715)'::geometry, 3857)), +(920, 'SRID=4326;POINT(-3.502619 32.726865)'::geometry, ST_Transform('SRID=4326;POINT(-3.502619 32.726865)'::geometry, 3857)), +(921, 'SRID=4326;POINT(-3.501994 32.726925)'::geometry, ST_Transform('SRID=4326;POINT(-3.501994 32.726925)'::geometry, 3857)), +(922, 'SRID=4326;POINT(-3.502067 32.726896)'::geometry, ST_Transform('SRID=4326;POINT(-3.502067 32.726896)'::geometry, 3857)), +(923, 'SRID=4326;POINT(-3.501996 32.727402)'::geometry, ST_Transform('SRID=4326;POINT(-3.501996 32.727402)'::geometry, 3857)), +(924, 'SRID=4326;POINT(-3.502351 32.727182)'::geometry, ST_Transform('SRID=4326;POINT(-3.502351 32.727182)'::geometry, 3857)), +(925, 'SRID=4326;POINT(-3.502569 32.727488)'::geometry, ST_Transform('SRID=4326;POINT(-3.502569 32.727488)'::geometry, 3857)), +(926, 'SRID=4326;POINT(-3.502554 32.727055)'::geometry, ST_Transform('SRID=4326;POINT(-3.502554 32.727055)'::geometry, 3857)), +(927, 'SRID=4326;POINT(-3.501757 32.726911)'::geometry, ST_Transform('SRID=4326;POINT(-3.501757 32.726911)'::geometry, 3857)), +(928, 'SRID=4326;POINT(-3.501867 32.7268)'::geometry, ST_Transform('SRID=4326;POINT(-3.501867 32.7268)'::geometry, 3857)), +(929, 'SRID=4326;POINT(-4.517406 37.456378)'::geometry, ST_Transform('SRID=4326;POINT(-4.517406 37.456378)'::geometry, 3857)), +(930, 'SRID=4326;POINT(-4.516774 37.456898)'::geometry, ST_Transform('SRID=4326;POINT(-4.516774 37.456898)'::geometry, 3857)), +(931, 'SRID=4326;POINT(-4.517543 37.456407)'::geometry, ST_Transform('SRID=4326;POINT(-4.517543 37.456407)'::geometry, 3857)), +(932, 'SRID=4326;POINT(-4.517597 37.456574)'::geometry, ST_Transform('SRID=4326;POINT(-4.517597 37.456574)'::geometry, 3857)), +(933, 'SRID=4326;POINT(-4.516927 37.456282)'::geometry, ST_Transform('SRID=4326;POINT(-4.516927 37.456282)'::geometry, 3857)), +(934, 'SRID=4326;POINT(-4.517612 37.456792)'::geometry, ST_Transform('SRID=4326;POINT(-4.517612 37.456792)'::geometry, 3857)), +(935, 'SRID=4326;POINT(-4.516852 37.456605)'::geometry, ST_Transform('SRID=4326;POINT(-4.516852 37.456605)'::geometry, 3857)), +(936, 'SRID=4326;POINT(-4.51704 37.456707)'::geometry, ST_Transform('SRID=4326;POINT(-4.51704 37.456707)'::geometry, 3857)), +(937, 'SRID=4326;POINT(-4.517468 37.456538)'::geometry, ST_Transform('SRID=4326;POINT(-4.517468 37.456538)'::geometry, 3857)), +(938, 'SRID=4326;POINT(-4.51699 37.456715)'::geometry, ST_Transform('SRID=4326;POINT(-4.51699 37.456715)'::geometry, 3857)), +(939, 'SRID=4326;POINT(-4.51686 37.45712)'::geometry, ST_Transform('SRID=4326;POINT(-4.51686 37.45712)'::geometry, 3857)), +(940, 'SRID=4326;POINT(-4.516981 37.456901)'::geometry, ST_Transform('SRID=4326;POINT(-4.516981 37.456901)'::geometry, 3857)), +(941, 'SRID=4326;POINT(-4.517565 37.45646)'::geometry, ST_Transform('SRID=4326;POINT(-4.517565 37.45646)'::geometry, 3857)), +(942, 'SRID=4326;POINT(-4.516979 37.456419)'::geometry, ST_Transform('SRID=4326;POINT(-4.516979 37.456419)'::geometry, 3857)), +(943, 'SRID=4326;POINT(-5.25281 39.208222)'::geometry, ST_Transform('SRID=4326;POINT(-5.25281 39.208222)'::geometry, 3857)), +(944, 'SRID=4326;POINT(-5.252193 39.208342)'::geometry, ST_Transform('SRID=4326;POINT(-5.252193 39.208342)'::geometry, 3857)), +(945, 'SRID=4326;POINT(-5.252944 39.208113)'::geometry, ST_Transform('SRID=4326;POINT(-5.252944 39.208113)'::geometry, 3857)), +(946, 'SRID=4326;POINT(-3.392779 38.996535)'::geometry, ST_Transform('SRID=4326;POINT(-3.392779 38.996535)'::geometry, 3857)), +(947, 'SRID=4326;POINT(-3.392354 38.996052)'::geometry, ST_Transform('SRID=4326;POINT(-3.392354 38.996052)'::geometry, 3857)), +(948, 'SRID=4326;POINT(-3.392873 38.996805)'::geometry, ST_Transform('SRID=4326;POINT(-3.392873 38.996805)'::geometry, 3857)), +(949, 'SRID=4326;POINT(7.450684 31.45342)'::geometry, ST_Transform('SRID=4326;POINT(7.450684 31.45342)'::geometry, 3857)), +(950, 'SRID=4326;POINT(7.451103 31.453188)'::geometry, ST_Transform('SRID=4326;POINT(7.451103 31.453188)'::geometry, 3857)), +(951, 'SRID=4326;POINT(7.451097 31.453074)'::geometry, ST_Transform('SRID=4326;POINT(7.451097 31.453074)'::geometry, 3857)), +(952, 'SRID=4326;POINT(7.451434 31.453789)'::geometry, ST_Transform('SRID=4326;POINT(7.451434 31.453789)'::geometry, 3857)), +(953, 'SRID=4326;POINT(7.451138 31.453362)'::geometry, ST_Transform('SRID=4326;POINT(7.451138 31.453362)'::geometry, 3857)), +(954, 'SRID=4326;POINT(7.450761 31.453573)'::geometry, ST_Transform('SRID=4326;POINT(7.450761 31.453573)'::geometry, 3857)), +(955, 'SRID=4326;POINT(7.451598 31.453288)'::geometry, ST_Transform('SRID=4326;POINT(7.451598 31.453288)'::geometry, 3857)), +(956, 'SRID=4326;POINT(7.450992 31.453536)'::geometry, ST_Transform('SRID=4326;POINT(7.450992 31.453536)'::geometry, 3857)), +(957, 'SRID=4326;POINT(7.450987 31.453982)'::geometry, ST_Transform('SRID=4326;POINT(7.450987 31.453982)'::geometry, 3857)), +(958, 'SRID=4326;POINT(7.45092 31.453151)'::geometry, ST_Transform('SRID=4326;POINT(7.45092 31.453151)'::geometry, 3857)), +(959, 'SRID=4326;POINT(-5.166299 39.804795)'::geometry, ST_Transform('SRID=4326;POINT(-5.166299 39.804795)'::geometry, 3857)), +(960, 'SRID=4326;POINT(-5.166162 39.804953)'::geometry, ST_Transform('SRID=4326;POINT(-5.166162 39.804953)'::geometry, 3857)), +(961, 'SRID=4326;POINT(-5.166126 39.804703)'::geometry, ST_Transform('SRID=4326;POINT(-5.166126 39.804703)'::geometry, 3857)), +(962, 'SRID=4326;POINT(-5.166944 39.80527)'::geometry, ST_Transform('SRID=4326;POINT(-5.166944 39.80527)'::geometry, 3857)), +(963, 'SRID=4326;POINT(-5.166758 39.805624)'::geometry, ST_Transform('SRID=4326;POINT(-5.166758 39.805624)'::geometry, 3857)), +(964, 'SRID=4326;POINT(-5.166371 39.805331)'::geometry, ST_Transform('SRID=4326;POINT(-5.166371 39.805331)'::geometry, 3857)), +(965, 'SRID=4326;POINT(-5.166318 39.805433)'::geometry, ST_Transform('SRID=4326;POINT(-5.166318 39.805433)'::geometry, 3857)), +(966, 'SRID=4326;POINT(-5.166562 39.804734)'::geometry, ST_Transform('SRID=4326;POINT(-5.166562 39.804734)'::geometry, 3857)), +(967, 'SRID=4326;POINT(-5.167058 39.805388)'::geometry, ST_Transform('SRID=4326;POINT(-5.167058 39.805388)'::geometry, 3857)), +(968, 'SRID=4326;POINT(-5.166405 39.805063)'::geometry, ST_Transform('SRID=4326;POINT(-5.166405 39.805063)'::geometry, 3857)), +(969, 'SRID=4326;POINT(-5.167102 39.805551)'::geometry, ST_Transform('SRID=4326;POINT(-5.167102 39.805551)'::geometry, 3857)), +(970, 'SRID=4326;POINT(5.52788 37.61853)'::geometry, ST_Transform('SRID=4326;POINT(5.52788 37.61853)'::geometry, 3857)), +(971, 'SRID=4326;POINT(5.527105 37.618486)'::geometry, ST_Transform('SRID=4326;POINT(5.527105 37.618486)'::geometry, 3857)), +(972, 'SRID=4326;POINT(5.527643 37.618122)'::geometry, ST_Transform('SRID=4326;POINT(5.527643 37.618122)'::geometry, 3857)), +(973, 'SRID=4326;POINT(6.030142 31.306772)'::geometry, ST_Transform('SRID=4326;POINT(6.030142 31.306772)'::geometry, 3857)), +(974, 'SRID=4326;POINT(6.030499 31.306908)'::geometry, ST_Transform('SRID=4326;POINT(6.030499 31.306908)'::geometry, 3857)), +(975, 'SRID=4326;POINT(6.030614 31.307568)'::geometry, ST_Transform('SRID=4326;POINT(6.030614 31.307568)'::geometry, 3857)), +(976, 'SRID=4326;POINT(6.030637 31.306666)'::geometry, ST_Transform('SRID=4326;POINT(6.030637 31.306666)'::geometry, 3857)), +(977, 'SRID=4326;POINT(6.030282 31.307541)'::geometry, ST_Transform('SRID=4326;POINT(6.030282 31.307541)'::geometry, 3857)), +(978, 'SRID=4326;POINT(6.030282 31.306832)'::geometry, ST_Transform('SRID=4326;POINT(6.030282 31.306832)'::geometry, 3857)), +(979, 'SRID=4326;POINT(6.03011 31.306838)'::geometry, ST_Transform('SRID=4326;POINT(6.03011 31.306838)'::geometry, 3857)), +(980, 'SRID=4326;POINT(1.829057 34.422718)'::geometry, ST_Transform('SRID=4326;POINT(1.829057 34.422718)'::geometry, 3857)), +(981, 'SRID=4326;POINT(8.782734 33.24252)'::geometry, ST_Transform('SRID=4326;POINT(8.782734 33.24252)'::geometry, 3857)), +(982, 'SRID=4326;POINT(8.782245 33.24248)'::geometry, ST_Transform('SRID=4326;POINT(8.782245 33.24248)'::geometry, 3857)), +(983, 'SRID=4326;POINT(8.78309 33.242807)'::geometry, ST_Transform('SRID=4326;POINT(8.78309 33.242807)'::geometry, 3857)), +(984, 'SRID=4326;POINT(8.783052 33.24202)'::geometry, ST_Transform('SRID=4326;POINT(8.783052 33.24202)'::geometry, 3857)), +(985, 'SRID=4326;POINT(8.782844 33.24273)'::geometry, ST_Transform('SRID=4326;POINT(8.782844 33.24273)'::geometry, 3857)), +(986, 'SRID=4326;POINT(8.782231 33.242443)'::geometry, ST_Transform('SRID=4326;POINT(8.782231 33.242443)'::geometry, 3857)), +(987, 'SRID=4326;POINT(8.782856 33.24207)'::geometry, ST_Transform('SRID=4326;POINT(8.782856 33.24207)'::geometry, 3857)), +(988, 'SRID=4326;POINT(8.783088 33.242078)'::geometry, ST_Transform('SRID=4326;POINT(8.783088 33.242078)'::geometry, 3857)), +(989, 'SRID=4326;POINT(8.782783 33.24224)'::geometry, ST_Transform('SRID=4326;POINT(8.782783 33.24224)'::geometry, 3857)), +(990, 'SRID=4326;POINT(8.783071 33.242071)'::geometry, ST_Transform('SRID=4326;POINT(8.783071 33.242071)'::geometry, 3857)), +(991, 'SRID=4326;POINT(8.783033 33.242419)'::geometry, ST_Transform('SRID=4326;POINT(8.783033 33.242419)'::geometry, 3857)), +(992, 'SRID=4326;POINT(8.782311 33.242637)'::geometry, ST_Transform('SRID=4326;POINT(8.782311 33.242637)'::geometry, 3857)), +(993, 'SRID=4326;POINT(4.39674 36.892468)'::geometry, ST_Transform('SRID=4326;POINT(4.39674 36.892468)'::geometry, 3857)), +(994, 'SRID=4326;POINT(4.396783 36.891769)'::geometry, ST_Transform('SRID=4326;POINT(4.396783 36.891769)'::geometry, 3857)), +(995, 'SRID=4326;POINT(4.396202 36.891833)'::geometry, ST_Transform('SRID=4326;POINT(4.396202 36.891833)'::geometry, 3857)), +(996, 'SRID=4326;POINT(4.396442 36.892369)'::geometry, ST_Transform('SRID=4326;POINT(4.396442 36.892369)'::geometry, 3857)), +(997, 'SRID=4326;POINT(4.396019 36.892199)'::geometry, ST_Transform('SRID=4326;POINT(4.396019 36.892199)'::geometry, 3857)), +(998, 'SRID=4326;POINT(4.396474 36.892466)'::geometry, ST_Transform('SRID=4326;POINT(4.396474 36.892466)'::geometry, 3857)), +(999, 'SRID=4326;POINT(4.396306 36.891886)'::geometry, ST_Transform('SRID=4326;POINT(4.396306 36.891886)'::geometry, 3857)), +(1000, 'SRID=4326;POINT(4.396362 36.89161)'::geometry, ST_Transform('SRID=4326;POINT(4.396362 36.89161)'::geometry, 3857)), +(1001, 'SRID=4326;POINT(-3.025791 39.730985)'::geometry, ST_Transform('SRID=4326;POINT(-3.025791 39.730985)'::geometry, 3857)), +(1002, 'SRID=4326;POINT(-3.025076 39.731156)'::geometry, ST_Transform('SRID=4326;POINT(-3.025076 39.731156)'::geometry, 3857)), +(1003, 'SRID=4326;POINT(-3.025444 39.731737)'::geometry, ST_Transform('SRID=4326;POINT(-3.025444 39.731737)'::geometry, 3857)), +(1004, 'SRID=4326;POINT(-3.025222 39.731439)'::geometry, ST_Transform('SRID=4326;POINT(-3.025222 39.731439)'::geometry, 3857)), +(1005, 'SRID=4326;POINT(-3.025759 39.731847)'::geometry, ST_Transform('SRID=4326;POINT(-3.025759 39.731847)'::geometry, 3857)), +(1006, 'SRID=4326;POINT(-3.025799 39.731368)'::geometry, ST_Transform('SRID=4326;POINT(-3.025799 39.731368)'::geometry, 3857)), +(1007, 'SRID=4326;POINT(3.297084 30.775964)'::geometry, ST_Transform('SRID=4326;POINT(3.297084 30.775964)'::geometry, 3857)), +(1008, 'SRID=4326;POINT(3.297041 30.775622)'::geometry, ST_Transform('SRID=4326;POINT(3.297041 30.775622)'::geometry, 3857)), +(1009, 'SRID=4326;POINT(3.297415 30.775269)'::geometry, ST_Transform('SRID=4326;POINT(3.297415 30.775269)'::geometry, 3857)), +(1010, 'SRID=4326;POINT(3.296819 30.775614)'::geometry, ST_Transform('SRID=4326;POINT(3.296819 30.775614)'::geometry, 3857)), +(1011, 'SRID=4326;POINT(1.946867 38.568477)'::geometry, ST_Transform('SRID=4326;POINT(1.946867 38.568477)'::geometry, 3857)), +(1012, 'SRID=4326;POINT(1.94724 38.568368)'::geometry, ST_Transform('SRID=4326;POINT(1.94724 38.568368)'::geometry, 3857)), +(1013, 'SRID=4326;POINT(1.946641 38.568434)'::geometry, ST_Transform('SRID=4326;POINT(1.946641 38.568434)'::geometry, 3857)), +(1014, 'SRID=4326;POINT(1.946387 38.568415)'::geometry, ST_Transform('SRID=4326;POINT(1.946387 38.568415)'::geometry, 3857)), +(1015, 'SRID=4326;POINT(1.947139 38.568329)'::geometry, ST_Transform('SRID=4326;POINT(1.947139 38.568329)'::geometry, 3857)), +(1016, 'SRID=4326;POINT(1.947311 38.568084)'::geometry, ST_Transform('SRID=4326;POINT(1.947311 38.568084)'::geometry, 3857)), +(1017, 'SRID=4326;POINT(1.946555 38.5683)'::geometry, ST_Transform('SRID=4326;POINT(1.946555 38.5683)'::geometry, 3857)), +(1018, 'SRID=4326;POINT(1.946498 38.568167)'::geometry, ST_Transform('SRID=4326;POINT(1.946498 38.568167)'::geometry, 3857)), +(1019, 'SRID=4326;POINT(3.078254 39.32079)'::geometry, ST_Transform('SRID=4326;POINT(3.078254 39.32079)'::geometry, 3857)), +(1020, 'SRID=4326;POINT(3.07886 39.321409)'::geometry, ST_Transform('SRID=4326;POINT(3.07886 39.321409)'::geometry, 3857)), +(1021, 'SRID=4326;POINT(3.078319 39.32066)'::geometry, ST_Transform('SRID=4326;POINT(3.078319 39.32066)'::geometry, 3857)), +(1022, 'SRID=4326;POINT(3.078967 39.321233)'::geometry, ST_Transform('SRID=4326;POINT(3.078967 39.321233)'::geometry, 3857)), +(1023, 'SRID=4326;POINT(3.079088 39.321035)'::geometry, ST_Transform('SRID=4326;POINT(3.079088 39.321035)'::geometry, 3857)), +(1024, 'SRID=4326;POINT(3.078989 39.32099)'::geometry, ST_Transform('SRID=4326;POINT(3.078989 39.32099)'::geometry, 3857)), +(1025, 'SRID=4326;POINT(-4.467508 33.62169)'::geometry, ST_Transform('SRID=4326;POINT(-4.467508 33.62169)'::geometry, 3857)), +(1026, 'SRID=4326;POINT(-4.467668 33.621298)'::geometry, ST_Transform('SRID=4326;POINT(-4.467668 33.621298)'::geometry, 3857)), +(1027, 'SRID=4326;POINT(-4.467722 33.621318)'::geometry, ST_Transform('SRID=4326;POINT(-4.467722 33.621318)'::geometry, 3857)), +(1028, 'SRID=4326;POINT(-4.467164 33.621939)'::geometry, ST_Transform('SRID=4326;POINT(-4.467164 33.621939)'::geometry, 3857)), +(1029, 'SRID=4326;POINT(-4.467144 33.621807)'::geometry, ST_Transform('SRID=4326;POINT(-4.467144 33.621807)'::geometry, 3857)), +(1030, 'SRID=4326;POINT(-4.467366 33.621429)'::geometry, ST_Transform('SRID=4326;POINT(-4.467366 33.621429)'::geometry, 3857)), +(1031, 'SRID=4326;POINT(-4.467878 33.622214)'::geometry, ST_Transform('SRID=4326;POINT(-4.467878 33.622214)'::geometry, 3857)), +(1032, 'SRID=4326;POINT(-4.467818 33.621395)'::geometry, ST_Transform('SRID=4326;POINT(-4.467818 33.621395)'::geometry, 3857)), +(1033, 'SRID=4326;POINT(-4.467505 33.621982)'::geometry, ST_Transform('SRID=4326;POINT(-4.467505 33.621982)'::geometry, 3857)), +(1034, 'SRID=4326;POINT(-4.467095 33.622136)'::geometry, ST_Transform('SRID=4326;POINT(-4.467095 33.622136)'::geometry, 3857)), +(1035, 'SRID=4326;POINT(-4.467018 33.62219)'::geometry, ST_Transform('SRID=4326;POINT(-4.467018 33.62219)'::geometry, 3857)), +(1036, 'SRID=4326;POINT(-9.386335 38.537964)'::geometry, ST_Transform('SRID=4326;POINT(-9.386335 38.537964)'::geometry, 3857)), +(1037, 'SRID=4326;POINT(-9.387058 38.537527)'::geometry, ST_Transform('SRID=4326;POINT(-9.387058 38.537527)'::geometry, 3857)), +(1038, 'SRID=4326;POINT(-9.386532 38.538384)'::geometry, ST_Transform('SRID=4326;POINT(-9.386532 38.538384)'::geometry, 3857)), +(1039, 'SRID=4326;POINT(-9.386851 38.538101)'::geometry, ST_Transform('SRID=4326;POINT(-9.386851 38.538101)'::geometry, 3857)), +(1040, 'SRID=4326;POINT(-9.38632 38.538314)'::geometry, ST_Transform('SRID=4326;POINT(-9.38632 38.538314)'::geometry, 3857)), +(1041, 'SRID=4326;POINT(1.724469 36.566868)'::geometry, ST_Transform('SRID=4326;POINT(1.724469 36.566868)'::geometry, 3857)), +(1042, 'SRID=4326;POINT(1.724216 36.567273)'::geometry, ST_Transform('SRID=4326;POINT(1.724216 36.567273)'::geometry, 3857)), +(1043, 'SRID=4326;POINT(1.725133 36.56699)'::geometry, ST_Transform('SRID=4326;POINT(1.725133 36.56699)'::geometry, 3857)), +(1044, 'SRID=4326;POINT(1.72427 36.566541)'::geometry, ST_Transform('SRID=4326;POINT(1.72427 36.566541)'::geometry, 3857)), +(1045, 'SRID=4326;POINT(1.724579 36.566727)'::geometry, ST_Transform('SRID=4326;POINT(1.724579 36.566727)'::geometry, 3857)), +(1046, 'SRID=4326;POINT(1.724377 36.566944)'::geometry, ST_Transform('SRID=4326;POINT(1.724377 36.566944)'::geometry, 3857)), +(1047, 'SRID=4326;POINT(1.724544 36.566997)'::geometry, ST_Transform('SRID=4326;POINT(1.724544 36.566997)'::geometry, 3857)), +(1048, 'SRID=4326;POINT(1.725159 36.567219)'::geometry, ST_Transform('SRID=4326;POINT(1.725159 36.567219)'::geometry, 3857)), +(1049, 'SRID=4326;POINT(1.724639 36.567126)'::geometry, ST_Transform('SRID=4326;POINT(1.724639 36.567126)'::geometry, 3857)), +(1050, 'SRID=4326;POINT(1.724887 36.566844)'::geometry, ST_Transform('SRID=4326;POINT(1.724887 36.566844)'::geometry, 3857)), +(1051, 'SRID=4326;POINT(1.7245 36.566783)'::geometry, ST_Transform('SRID=4326;POINT(1.7245 36.566783)'::geometry, 3857)), +(1052, 'SRID=4326;POINT(1.725173 36.566542)'::geometry, ST_Transform('SRID=4326;POINT(1.725173 36.566542)'::geometry, 3857)), +(1053, 'SRID=4326;POINT(-1.215975 32.547197)'::geometry, ST_Transform('SRID=4326;POINT(-1.215975 32.547197)'::geometry, 3857)), +(1054, 'SRID=4326;POINT(-1.215926 32.547507)'::geometry, ST_Transform('SRID=4326;POINT(-1.215926 32.547507)'::geometry, 3857)), +(1055, 'SRID=4326;POINT(-1.216752 32.546703)'::geometry, ST_Transform('SRID=4326;POINT(-1.216752 32.546703)'::geometry, 3857)), +(1056, 'SRID=4326;POINT(-1.216613 32.54718)'::geometry, ST_Transform('SRID=4326;POINT(-1.216613 32.54718)'::geometry, 3857)), +(1057, 'SRID=4326;POINT(-7.993157 37.187857)'::geometry, ST_Transform('SRID=4326;POINT(-7.993157 37.187857)'::geometry, 3857)), +(1058, 'SRID=4326;POINT(-7.992873 37.187745)'::geometry, ST_Transform('SRID=4326;POINT(-7.992873 37.187745)'::geometry, 3857)), +(1059, 'SRID=4326;POINT(-7.993091 37.18814)'::geometry, ST_Transform('SRID=4326;POINT(-7.993091 37.18814)'::geometry, 3857)), +(1060, 'SRID=4326;POINT(-7.992773 37.187507)'::geometry, ST_Transform('SRID=4326;POINT(-7.992773 37.187507)'::geometry, 3857)), +(1061, 'SRID=4326;POINT(-7.99343 37.18819)'::geometry, ST_Transform('SRID=4326;POINT(-7.99343 37.18819)'::geometry, 3857)), +(1062, 'SRID=4326;POINT(-7.992727 37.187234)'::geometry, ST_Transform('SRID=4326;POINT(-7.992727 37.187234)'::geometry, 3857)), +(1063, 'SRID=4326;POINT(-7.992672 37.188057)'::geometry, ST_Transform('SRID=4326;POINT(-7.992672 37.188057)'::geometry, 3857)), +(1064, 'SRID=4326;POINT(-7.99318 37.18763)'::geometry, ST_Transform('SRID=4326;POINT(-7.99318 37.18763)'::geometry, 3857)), +(1065, 'SRID=4326;POINT(8.900398 32.262535)'::geometry, ST_Transform('SRID=4326;POINT(8.900398 32.262535)'::geometry, 3857)), +(1066, 'SRID=4326;POINT(8.900427 32.262327)'::geometry, ST_Transform('SRID=4326;POINT(8.900427 32.262327)'::geometry, 3857)), +(1067, 'SRID=4326;POINT(8.899843 32.262289)'::geometry, ST_Transform('SRID=4326;POINT(8.899843 32.262289)'::geometry, 3857)), +(1068, 'SRID=4326;POINT(8.900334 32.261977)'::geometry, ST_Transform('SRID=4326;POINT(8.900334 32.261977)'::geometry, 3857)), +(1069, 'SRID=4326;POINT(8.900136 32.262758)'::geometry, ST_Transform('SRID=4326;POINT(8.900136 32.262758)'::geometry, 3857)), +(1070, 'SRID=4326;POINT(8.90022 32.262509)'::geometry, ST_Transform('SRID=4326;POINT(8.90022 32.262509)'::geometry, 3857)), +(1071, 'SRID=4326;POINT(8.899751 32.262215)'::geometry, ST_Transform('SRID=4326;POINT(8.899751 32.262215)'::geometry, 3857)), +(1072, 'SRID=4326;POINT(8.900191 32.262102)'::geometry, ST_Transform('SRID=4326;POINT(8.900191 32.262102)'::geometry, 3857)), +(1073, 'SRID=4326;POINT(8.899721 32.262195)'::geometry, ST_Transform('SRID=4326;POINT(8.899721 32.262195)'::geometry, 3857)), +(1074, 'SRID=4326;POINT(8.899932 32.262497)'::geometry, ST_Transform('SRID=4326;POINT(8.899932 32.262497)'::geometry, 3857)), +(1075, 'SRID=4326;POINT(8.899968 32.262464)'::geometry, ST_Transform('SRID=4326;POINT(8.899968 32.262464)'::geometry, 3857)), +(1076, 'SRID=4326;POINT(8.899792 32.262717)'::geometry, ST_Transform('SRID=4326;POINT(8.899792 32.262717)'::geometry, 3857)), +(1077, 'SRID=4326;POINT(8.899919 32.262467)'::geometry, ST_Transform('SRID=4326;POINT(8.899919 32.262467)'::geometry, 3857)), +(1078, 'SRID=4326;POINT(8.9004 32.262731)'::geometry, ST_Transform('SRID=4326;POINT(8.9004 32.262731)'::geometry, 3857)), +(1079, 'SRID=4326;POINT(8.900461 32.262179)'::geometry, ST_Transform('SRID=4326;POINT(8.900461 32.262179)'::geometry, 3857)), +(1080, 'SRID=4326;POINT(8.900539 32.262052)'::geometry, ST_Transform('SRID=4326;POINT(8.900539 32.262052)'::geometry, 3857)), +(1081, 'SRID=4326;POINT(4.408361 39.427357)'::geometry, ST_Transform('SRID=4326;POINT(4.408361 39.427357)'::geometry, 3857)), +(1082, 'SRID=4326;POINT(4.409058 39.42786)'::geometry, ST_Transform('SRID=4326;POINT(4.409058 39.42786)'::geometry, 3857)), +(1083, 'SRID=4326;POINT(4.4091 39.427155)'::geometry, ST_Transform('SRID=4326;POINT(4.4091 39.427155)'::geometry, 3857)), +(1084, 'SRID=4326;POINT(4.408596 39.427209)'::geometry, ST_Transform('SRID=4326;POINT(4.408596 39.427209)'::geometry, 3857)), +(1085, 'SRID=4326;POINT(4.40852 39.427486)'::geometry, ST_Transform('SRID=4326;POINT(4.40852 39.427486)'::geometry, 3857)), +(1086, 'SRID=4326;POINT(4.408387 39.427188)'::geometry, ST_Transform('SRID=4326;POINT(4.408387 39.427188)'::geometry, 3857)), +(1087, 'SRID=4326;POINT(4.408612 39.427674)'::geometry, ST_Transform('SRID=4326;POINT(4.408612 39.427674)'::geometry, 3857)), +(1088, 'SRID=4326;POINT(4.408695 39.427922)'::geometry, ST_Transform('SRID=4326;POINT(4.408695 39.427922)'::geometry, 3857)), +(1089, 'SRID=4326;POINT(4.408693 39.427178)'::geometry, ST_Transform('SRID=4326;POINT(4.408693 39.427178)'::geometry, 3857)), +(1090, 'SRID=4326;POINT(4.408216 39.427706)'::geometry, ST_Transform('SRID=4326;POINT(4.408216 39.427706)'::geometry, 3857)), +(1091, 'SRID=4326;POINT(4.408435 39.427732)'::geometry, ST_Transform('SRID=4326;POINT(4.408435 39.427732)'::geometry, 3857)), +(1092, 'SRID=4326;POINT(4.408737 39.42783)'::geometry, ST_Transform('SRID=4326;POINT(4.408737 39.42783)'::geometry, 3857)), +(1093, 'SRID=4326;POINT(4.408624 39.427073)'::geometry, ST_Transform('SRID=4326;POINT(4.408624 39.427073)'::geometry, 3857)), +(1094, 'SRID=4326;POINT(4.408561 39.427638)'::geometry, ST_Transform('SRID=4326;POINT(4.408561 39.427638)'::geometry, 3857)), +(1095, 'SRID=4326;POINT(4.408244 39.427218)'::geometry, ST_Transform('SRID=4326;POINT(4.408244 39.427218)'::geometry, 3857)), +(1096, 'SRID=4326;POINT(4.408828 39.427396)'::geometry, ST_Transform('SRID=4326;POINT(4.408828 39.427396)'::geometry, 3857)), +(1097, 'SRID=4326;POINT(3.576089 38.267499)'::geometry, ST_Transform('SRID=4326;POINT(3.576089 38.267499)'::geometry, 3857)), +(1098, 'SRID=4326;POINT(3.575583 38.267731)'::geometry, ST_Transform('SRID=4326;POINT(3.575583 38.267731)'::geometry, 3857)), +(1099, 'SRID=4326;POINT(3.576442 38.267889)'::geometry, ST_Transform('SRID=4326;POINT(3.576442 38.267889)'::geometry, 3857)), +(1100, 'SRID=4326;POINT(3.576552 38.267045)'::geometry, ST_Transform('SRID=4326;POINT(3.576552 38.267045)'::geometry, 3857)), +(1101, 'SRID=4326;POINT(3.576473 38.267962)'::geometry, ST_Transform('SRID=4326;POINT(3.576473 38.267962)'::geometry, 3857)), +(1102, 'SRID=4326;POINT(3.576205 38.267778)'::geometry, ST_Transform('SRID=4326;POINT(3.576205 38.267778)'::geometry, 3857)), +(1103, 'SRID=4326;POINT(3.575928 38.267777)'::geometry, ST_Transform('SRID=4326;POINT(3.575928 38.267777)'::geometry, 3857)), +(1104, 'SRID=4326;POINT(3.575696 38.267961)'::geometry, ST_Transform('SRID=4326;POINT(3.575696 38.267961)'::geometry, 3857)), +(1105, 'SRID=4326;POINT(3.57577 38.267063)'::geometry, ST_Transform('SRID=4326;POINT(3.57577 38.267063)'::geometry, 3857)), +(1106, 'SRID=4326;POINT(5.456027 39.062911)'::geometry, ST_Transform('SRID=4326;POINT(5.456027 39.062911)'::geometry, 3857)), +(1107, 'SRID=4326;POINT(5.456313 39.063416)'::geometry, ST_Transform('SRID=4326;POINT(5.456313 39.063416)'::geometry, 3857)), +(1108, 'SRID=4326;POINT(5.455901 39.063434)'::geometry, ST_Transform('SRID=4326;POINT(5.455901 39.063434)'::geometry, 3857)), +(1109, 'SRID=4326;POINT(5.455573 39.06381)'::geometry, ST_Transform('SRID=4326;POINT(5.455573 39.06381)'::geometry, 3857)), +(1110, 'SRID=4326;POINT(5.45574 39.063318)'::geometry, ST_Transform('SRID=4326;POINT(5.45574 39.063318)'::geometry, 3857)), +(1111, 'SRID=4326;POINT(-1.544808 33.33398)'::geometry, ST_Transform('SRID=4326;POINT(-1.544808 33.33398)'::geometry, 3857)), +(1112, 'SRID=4326;POINT(-1.544993 33.333714)'::geometry, ST_Transform('SRID=4326;POINT(-1.544993 33.333714)'::geometry, 3857)), +(1113, 'SRID=4326;POINT(-1.544859 33.333711)'::geometry, ST_Transform('SRID=4326;POINT(-1.544859 33.333711)'::geometry, 3857)), +(1114, 'SRID=4326;POINT(-1.544863 33.334479)'::geometry, ST_Transform('SRID=4326;POINT(-1.544863 33.334479)'::geometry, 3857)); +-- table with attributes +CREATE TABLE base_t (cartodb_id integer, the_geom geometry, the_geom_webmercator geometry, number double precision, int_number integer, name text, start date); +INSERT INTO base_t VALUES +(1, 'SRID=4326;POINT(9.718384 33.139879)'::geometry, ST_Transform('SRID=4326;POINT(9.718384 33.139879)'::geometry, 3857)), +(2, 'SRID=4326;POINT(9.71832 33.139846)'::geometry, ST_Transform('SRID=4326;POINT(9.71832 33.139846)'::geometry, 3857)), +(3, 'SRID=4326;POINT(9.718776 33.139394)'::geometry, ST_Transform('SRID=4326;POINT(9.718776 33.139394)'::geometry, 3857)), +(4, 'SRID=4326;POINT(9.718086 33.139576)'::geometry, ST_Transform('SRID=4326;POINT(9.718086 33.139576)'::geometry, 3857)), +(5, 'SRID=4326;POINT(9.718036 33.139538)'::geometry, ST_Transform('SRID=4326;POINT(9.718036 33.139538)'::geometry, 3857)), +(6, 'SRID=4326;POINT(9.718197 33.139667)'::geometry, ST_Transform('SRID=4326;POINT(9.718197 33.139667)'::geometry, 3857)), +(7, 'SRID=4326;POINT(9.718357 33.139511)'::geometry, ST_Transform('SRID=4326;POINT(9.718357 33.139511)'::geometry, 3857)), +(8, 'SRID=4326;POINT(9.718385 33.13984)'::geometry, ST_Transform('SRID=4326;POINT(9.718385 33.13984)'::geometry, 3857)), +(9, 'SRID=4326;POINT(9.718312 33.139405)'::geometry, ST_Transform('SRID=4326;POINT(9.718312 33.139405)'::geometry, 3857)), +(10, 'SRID=4326;POINT(9.718951 33.139878)'::geometry, ST_Transform('SRID=4326;POINT(9.718951 33.139878)'::geometry, 3857)), +(11, 'SRID=4326;POINT(9.718799 33.139942)'::geometry, ST_Transform('SRID=4326;POINT(9.718799 33.139942)'::geometry, 3857)), +(12, 'SRID=4326;POINT(9.718777 33.139681)'::geometry, ST_Transform('SRID=4326;POINT(9.718777 33.139681)'::geometry, 3857)), +(13, 'SRID=4326;POINT(9.717971 33.13981)'::geometry, ST_Transform('SRID=4326;POINT(9.717971 33.13981)'::geometry, 3857)), +(14, 'SRID=4326;POINT(9.718334 33.139541)'::geometry, ST_Transform('SRID=4326;POINT(9.718334 33.139541)'::geometry, 3857)), +(15, 'SRID=4326;POINT(-5.989195 39.206665)'::geometry, ST_Transform('SRID=4326;POINT(-5.989195 39.206665)'::geometry, 3857)), +(16, 'SRID=4326;POINT(-5.988446 39.207071)'::geometry, ST_Transform('SRID=4326;POINT(-5.988446 39.207071)'::geometry, 3857)), +(17, 'SRID=4326;POINT(-5.989083 39.207225)'::geometry, ST_Transform('SRID=4326;POINT(-5.989083 39.207225)'::geometry, 3857)), +(18, 'SRID=4326;POINT(8.510012 32.031818)'::geometry, ST_Transform('SRID=4326;POINT(8.510012 32.031818)'::geometry, 3857)), +(19, 'SRID=4326;POINT(8.509814 32.03189)'::geometry, ST_Transform('SRID=4326;POINT(8.509814 32.03189)'::geometry, 3857)), +(20, 'SRID=4326;POINT(8.510091 32.031737)'::geometry, ST_Transform('SRID=4326;POINT(8.510091 32.031737)'::geometry, 3857)), +(21, 'SRID=4326;POINT(-1.337826 37.660347)'::geometry, ST_Transform('SRID=4326;POINT(-1.337826 37.660347)'::geometry, 3857)), +(22, 'SRID=4326;POINT(-1.337618 37.660051)'::geometry, ST_Transform('SRID=4326;POINT(-1.337618 37.660051)'::geometry, 3857)), +(23, 'SRID=4326;POINT(-1.337644 37.659833)'::geometry, ST_Transform('SRID=4326;POINT(-1.337644 37.659833)'::geometry, 3857)), +(24, 'SRID=4326;POINT(-1.337701 37.659615)'::geometry, ST_Transform('SRID=4326;POINT(-1.337701 37.659615)'::geometry, 3857)), +(25, 'SRID=4326;POINT(-1.337237 37.659644)'::geometry, ST_Transform('SRID=4326;POINT(-1.337237 37.659644)'::geometry, 3857)), +(26, 'SRID=4326;POINT(-1.337542 37.660018)'::geometry, ST_Transform('SRID=4326;POINT(-1.337542 37.660018)'::geometry, 3857)), +(27, 'SRID=4326;POINT(-1.337848 37.659752)'::geometry, ST_Transform('SRID=4326;POINT(-1.337848 37.659752)'::geometry, 3857)), +(28, 'SRID=4326;POINT(-1.337659 37.659788)'::geometry, ST_Transform('SRID=4326;POINT(-1.337659 37.659788)'::geometry, 3857)), +(29, 'SRID=4326;POINT(-1.337194 37.660026)'::geometry, ST_Transform('SRID=4326;POINT(-1.337194 37.660026)'::geometry, 3857)), +(30, 'SRID=4326;POINT(-1.337714 37.659619)'::geometry, ST_Transform('SRID=4326;POINT(-1.337714 37.659619)'::geometry, 3857)), +(31, 'SRID=4326;POINT(-1.337846 37.659781)'::geometry, ST_Transform('SRID=4326;POINT(-1.337846 37.659781)'::geometry, 3857)), +(32, 'SRID=4326;POINT(-1.33751 37.66052)'::geometry, ST_Transform('SRID=4326;POINT(-1.33751 37.66052)'::geometry, 3857)), +(33, 'SRID=4326;POINT(-1.337669 37.660154)'::geometry, ST_Transform('SRID=4326;POINT(-1.337669 37.660154)'::geometry, 3857)), +(34, 'SRID=4326;POINT(-3.050809 34.810112)'::geometry, ST_Transform('SRID=4326;POINT(-3.050809 34.810112)'::geometry, 3857)), +(35, 'SRID=4326;POINT(-3.049988 34.811057)'::geometry, ST_Transform('SRID=4326;POINT(-3.049988 34.811057)'::geometry, 3857)), +(36, 'SRID=4326;POINT(-3.050564 34.810536)'::geometry, ST_Transform('SRID=4326;POINT(-3.050564 34.810536)'::geometry, 3857)), +(37, 'SRID=4326;POINT(-3.050442 34.810239)'::geometry, ST_Transform('SRID=4326;POINT(-3.050442 34.810239)'::geometry, 3857)), +(38, 'SRID=4326;POINT(-3.05032 34.810969)'::geometry, ST_Transform('SRID=4326;POINT(-3.05032 34.810969)'::geometry, 3857)), +(39, 'SRID=4326;POINT(-3.050097 34.810504)'::geometry, ST_Transform('SRID=4326;POINT(-3.050097 34.810504)'::geometry, 3857)), +(40, 'SRID=4326;POINT(-3.05055 34.810908)'::geometry, ST_Transform('SRID=4326;POINT(-3.05055 34.810908)'::geometry, 3857)), +(41, 'SRID=4326;POINT(-3.050086 34.810386)'::geometry, ST_Transform('SRID=4326;POINT(-3.050086 34.810386)'::geometry, 3857)), +(42, 'SRID=4326;POINT(-3.050485 34.810751)'::geometry, ST_Transform('SRID=4326;POINT(-3.050485 34.810751)'::geometry, 3857)), +(43, 'SRID=4326;POINT(-3.04984 34.810113)'::geometry, ST_Transform('SRID=4326;POINT(-3.04984 34.810113)'::geometry, 3857)), +(44, 'SRID=4326;POINT(-3.049975 34.810547)'::geometry, ST_Transform('SRID=4326;POINT(-3.049975 34.810547)'::geometry, 3857)), +(45, 'SRID=4326;POINT(-3.05065 34.810262)'::geometry, ST_Transform('SRID=4326;POINT(-3.05065 34.810262)'::geometry, 3857)), +(46, 'SRID=4326;POINT(-3.050618 34.8107)'::geometry, ST_Transform('SRID=4326;POINT(-3.050618 34.8107)'::geometry, 3857)), +(47, 'SRID=4326;POINT(-3.050325 34.810601)'::geometry, ST_Transform('SRID=4326;POINT(-3.050325 34.810601)'::geometry, 3857)), +(48, 'SRID=4326;POINT(-3.049874 34.810936)'::geometry, ST_Transform('SRID=4326;POINT(-3.049874 34.810936)'::geometry, 3857)), +(49, 'SRID=4326;POINT(-3.049991 34.810872)'::geometry, ST_Transform('SRID=4326;POINT(-3.049991 34.810872)'::geometry, 3857)), +(50, 'SRID=4326;POINT(-7.192205 34.110465)'::geometry, ST_Transform('SRID=4326;POINT(-7.192205 34.110465)'::geometry, 3857)), +(51, 'SRID=4326;POINT(-1.111773 31.260536)'::geometry, ST_Transform('SRID=4326;POINT(-1.111773 31.260536)'::geometry, 3857)), +(52, 'SRID=4326;POINT(-1.112389 31.26055)'::geometry, ST_Transform('SRID=4326;POINT(-1.112389 31.26055)'::geometry, 3857)), +(53, 'SRID=4326;POINT(-1.11196 31.260683)'::geometry, ST_Transform('SRID=4326;POINT(-1.11196 31.260683)'::geometry, 3857)), +(54, 'SRID=4326;POINT(-1.11169 31.260137)'::geometry, ST_Transform('SRID=4326;POINT(-1.11169 31.260137)'::geometry, 3857)), +(55, 'SRID=4326;POINT(-1.111784 31.259982)'::geometry, ST_Transform('SRID=4326;POINT(-1.111784 31.259982)'::geometry, 3857)), +(56, 'SRID=4326;POINT(-1.111957 31.26044)'::geometry, ST_Transform('SRID=4326;POINT(-1.111957 31.26044)'::geometry, 3857)), +(57, 'SRID=4326;POINT(-1.112346 31.260099)'::geometry, ST_Transform('SRID=4326;POINT(-1.112346 31.260099)'::geometry, 3857)), +(58, 'SRID=4326;POINT(-1.112361 31.260683)'::geometry, ST_Transform('SRID=4326;POINT(-1.112361 31.260683)'::geometry, 3857)), +(59, 'SRID=4326;POINT(-1.112424 31.260104)'::geometry, ST_Transform('SRID=4326;POINT(-1.112424 31.260104)'::geometry, 3857)), +(60, 'SRID=4326;POINT(-1.11189 31.260241)'::geometry, ST_Transform('SRID=4326;POINT(-1.11189 31.260241)'::geometry, 3857)), +(61, 'SRID=4326;POINT(-1.111632 31.260126)'::geometry, ST_Transform('SRID=4326;POINT(-1.111632 31.260126)'::geometry, 3857)), +(62, 'SRID=4326;POINT(-1.112057 31.260066)'::geometry, ST_Transform('SRID=4326;POINT(-1.112057 31.260066)'::geometry, 3857)), +(63, 'SRID=4326;POINT(-1.111878 31.260402)'::geometry, ST_Transform('SRID=4326;POINT(-1.111878 31.260402)'::geometry, 3857)), +(64, 'SRID=4326;POINT(-1.112086 31.260331)'::geometry, ST_Transform('SRID=4326;POINT(-1.112086 31.260331)'::geometry, 3857)), +(65, 'SRID=4326;POINT(-1.11192 31.25996)'::geometry, ST_Transform('SRID=4326;POINT(-1.11192 31.25996)'::geometry, 3857)), +(66, 'SRID=4326;POINT(-1.111971 31.260519)'::geometry, ST_Transform('SRID=4326;POINT(-1.111971 31.260519)'::geometry, 3857)), +(67, 'SRID=4326;POINT(1.981315 36.414172)'::geometry, ST_Transform('SRID=4326;POINT(1.981315 36.414172)'::geometry, 3857)), +(68, 'SRID=4326;POINT(1.981157 36.414659)'::geometry, ST_Transform('SRID=4326;POINT(1.981157 36.414659)'::geometry, 3857)), +(69, 'SRID=4326;POINT(1.981097 36.414188)'::geometry, ST_Transform('SRID=4326;POINT(1.981097 36.414188)'::geometry, 3857)), +(70, 'SRID=4326;POINT(1.98147 36.414969)'::geometry, ST_Transform('SRID=4326;POINT(1.98147 36.414969)'::geometry, 3857)), +(71, 'SRID=4326;POINT(1.981473 36.414819)'::geometry, ST_Transform('SRID=4326;POINT(1.981473 36.414819)'::geometry, 3857)), +(72, 'SRID=4326;POINT(1.981159 36.414521)'::geometry, ST_Transform('SRID=4326;POINT(1.981159 36.414521)'::geometry, 3857)), +(73, 'SRID=4326;POINT(1.981434 36.414368)'::geometry, ST_Transform('SRID=4326;POINT(1.981434 36.414368)'::geometry, 3857)), +(74, 'SRID=4326;POINT(1.981508 36.414849)'::geometry, ST_Transform('SRID=4326;POINT(1.981508 36.414849)'::geometry, 3857)), +(75, 'SRID=4326;POINT(1.980794 36.414325)'::geometry, ST_Transform('SRID=4326;POINT(1.980794 36.414325)'::geometry, 3857)), +(76, 'SRID=4326;POINT(1.981257 36.414346)'::geometry, ST_Transform('SRID=4326;POINT(1.981257 36.414346)'::geometry, 3857)), +(77, 'SRID=4326;POINT(-0.953948 39.768838)'::geometry, ST_Transform('SRID=4326;POINT(-0.953948 39.768838)'::geometry, 3857)), +(78, 'SRID=4326;POINT(-0.954525 39.768965)'::geometry, ST_Transform('SRID=4326;POINT(-0.954525 39.768965)'::geometry, 3857)), +(79, 'SRID=4326;POINT(-0.954753 39.76904)'::geometry, ST_Transform('SRID=4326;POINT(-0.954753 39.76904)'::geometry, 3857)), +(80, 'SRID=4326;POINT(-0.954287 39.769265)'::geometry, ST_Transform('SRID=4326;POINT(-0.954287 39.769265)'::geometry, 3857)), +(81, 'SRID=4326;POINT(-0.953996 39.76948)'::geometry, ST_Transform('SRID=4326;POINT(-0.953996 39.76948)'::geometry, 3857)), +(82, 'SRID=4326;POINT(-0.954469 39.769349)'::geometry, ST_Transform('SRID=4326;POINT(-0.954469 39.769349)'::geometry, 3857)), +(83, 'SRID=4326;POINT(-0.953957 39.769444)'::geometry, ST_Transform('SRID=4326;POINT(-0.953957 39.769444)'::geometry, 3857)), +(84, 'SRID=4326;POINT(-0.954757 39.7688)'::geometry, ST_Transform('SRID=4326;POINT(-0.954757 39.7688)'::geometry, 3857)), +(85, 'SRID=4326;POINT(-0.954196 39.769695)'::geometry, ST_Transform('SRID=4326;POINT(-0.954196 39.769695)'::geometry, 3857)), +(86, 'SRID=4326;POINT(-0.954047 39.768844)'::geometry, ST_Transform('SRID=4326;POINT(-0.954047 39.768844)'::geometry, 3857)), +(87, 'SRID=4326;POINT(-0.954191 39.769569)'::geometry, ST_Transform('SRID=4326;POINT(-0.954191 39.769569)'::geometry, 3857)), +(88, 'SRID=4326;POINT(-0.954122 39.7692)'::geometry, ST_Transform('SRID=4326;POINT(-0.954122 39.7692)'::geometry, 3857)), +(89, 'SRID=4326;POINT(-0.954273 39.76964)'::geometry, ST_Transform('SRID=4326;POINT(-0.954273 39.76964)'::geometry, 3857)), +(90, 'SRID=4326;POINT(-0.953816 39.769145)'::geometry, ST_Transform('SRID=4326;POINT(-0.953816 39.769145)'::geometry, 3857)), +(91, 'SRID=4326;POINT(-0.954025 39.7691)'::geometry, ST_Transform('SRID=4326;POINT(-0.954025 39.7691)'::geometry, 3857)), +(92, 'SRID=4326;POINT(-0.95416 39.769704)'::geometry, ST_Transform('SRID=4326;POINT(-0.95416 39.769704)'::geometry, 3857)), +(93, 'SRID=4326;POINT(-7.587221 32.009901)'::geometry, ST_Transform('SRID=4326;POINT(-7.587221 32.009901)'::geometry, 3857)), +(94, 'SRID=4326;POINT(-7.586856 32.010641)'::geometry, ST_Transform('SRID=4326;POINT(-7.586856 32.010641)'::geometry, 3857)), +(95, 'SRID=4326;POINT(-7.586722 32.010493)'::geometry, ST_Transform('SRID=4326;POINT(-7.586722 32.010493)'::geometry, 3857)), +(96, 'SRID=4326;POINT(-7.586391 32.010262)'::geometry, ST_Transform('SRID=4326;POINT(-7.586391 32.010262)'::geometry, 3857)), +(97, 'SRID=4326;POINT(-7.586974 32.010238)'::geometry, ST_Transform('SRID=4326;POINT(-7.586974 32.010238)'::geometry, 3857)), +(98, 'SRID=4326;POINT(-7.586775 32.010427)'::geometry, ST_Transform('SRID=4326;POINT(-7.586775 32.010427)'::geometry, 3857)), +(99, 'SRID=4326;POINT(-7.586872 32.009897)'::geometry, ST_Transform('SRID=4326;POINT(-7.586872 32.009897)'::geometry, 3857)), +(100, 'SRID=4326;POINT(-7.586628 32.010007)'::geometry, ST_Transform('SRID=4326;POINT(-7.586628 32.010007)'::geometry, 3857)), +(101, 'SRID=4326;POINT(-7.587165 32.010048)'::geometry, ST_Transform('SRID=4326;POINT(-7.587165 32.010048)'::geometry, 3857)), +(102, 'SRID=4326;POINT(1.184165 37.50755)'::geometry, ST_Transform('SRID=4326;POINT(1.184165 37.50755)'::geometry, 3857)), +(103, 'SRID=4326;POINT(1.183645 37.507603)'::geometry, ST_Transform('SRID=4326;POINT(1.183645 37.507603)'::geometry, 3857)), +(104, 'SRID=4326;POINT(1.184264 37.507825)'::geometry, ST_Transform('SRID=4326;POINT(1.184264 37.507825)'::geometry, 3857)), +(105, 'SRID=4326;POINT(1.184288 37.507609)'::geometry, ST_Transform('SRID=4326;POINT(1.184288 37.507609)'::geometry, 3857)), +(106, 'SRID=4326;POINT(1.183561 37.507407)'::geometry, ST_Transform('SRID=4326;POINT(1.183561 37.507407)'::geometry, 3857)), +(107, 'SRID=4326;POINT(1.184181 37.50741)'::geometry, ST_Transform('SRID=4326;POINT(1.184181 37.50741)'::geometry, 3857)), +(108, 'SRID=4326;POINT(1.183824 37.508023)'::geometry, ST_Transform('SRID=4326;POINT(1.183824 37.508023)'::geometry, 3857)), +(109, 'SRID=4326;POINT(1.183603 37.507709)'::geometry, ST_Transform('SRID=4326;POINT(1.183603 37.507709)'::geometry, 3857)), +(110, 'SRID=4326;POINT(1.18372 37.507527)'::geometry, ST_Transform('SRID=4326;POINT(1.18372 37.507527)'::geometry, 3857)), +(111, 'SRID=4326;POINT(1.183425 37.507321)'::geometry, ST_Transform('SRID=4326;POINT(1.183425 37.507321)'::geometry, 3857)), +(112, 'SRID=4326;POINT(1.184305 37.507615)'::geometry, ST_Transform('SRID=4326;POINT(1.184305 37.507615)'::geometry, 3857)), +(113, 'SRID=4326;POINT(1.183852 37.508007)'::geometry, ST_Transform('SRID=4326;POINT(1.183852 37.508007)'::geometry, 3857)), +(114, 'SRID=4326;POINT(3.831779 31.429738)'::geometry, ST_Transform('SRID=4326;POINT(3.831779 31.429738)'::geometry, 3857)), +(115, 'SRID=4326;POINT(3.831813 31.4298)'::geometry, ST_Transform('SRID=4326;POINT(3.831813 31.4298)'::geometry, 3857)), +(116, 'SRID=4326;POINT(3.831852 31.429751)'::geometry, ST_Transform('SRID=4326;POINT(3.831852 31.429751)'::geometry, 3857)), +(117, 'SRID=4326;POINT(3.832368 31.430079)'::geometry, ST_Transform('SRID=4326;POINT(3.832368 31.430079)'::geometry, 3857)), +(118, 'SRID=4326;POINT(3.83201 31.429663)'::geometry, ST_Transform('SRID=4326;POINT(3.83201 31.429663)'::geometry, 3857)), +(119, 'SRID=4326;POINT(3.832181 31.429739)'::geometry, ST_Transform('SRID=4326;POINT(3.832181 31.429739)'::geometry, 3857)), +(120, 'SRID=4326;POINT(3.831543 31.429602)'::geometry, ST_Transform('SRID=4326;POINT(3.831543 31.429602)'::geometry, 3857)), +(121, 'SRID=4326;POINT(3.831601 31.430119)'::geometry, ST_Transform('SRID=4326;POINT(3.831601 31.430119)'::geometry, 3857)), +(122, 'SRID=4326;POINT(3.831729 31.42977)'::geometry, ST_Transform('SRID=4326;POINT(3.831729 31.42977)'::geometry, 3857)), +(123, 'SRID=4326;POINT(3.831987 31.430192)'::geometry, ST_Transform('SRID=4326;POINT(3.831987 31.430192)'::geometry, 3857)), +(124, 'SRID=4326;POINT(8.47022 33.825659)'::geometry, ST_Transform('SRID=4326;POINT(8.47022 33.825659)'::geometry, 3857)), +(125, 'SRID=4326;POINT(8.470632 33.825421)'::geometry, ST_Transform('SRID=4326;POINT(8.470632 33.825421)'::geometry, 3857)), +(126, 'SRID=4326;POINT(8.470131 33.825262)'::geometry, ST_Transform('SRID=4326;POINT(8.470131 33.825262)'::geometry, 3857)), +(127, 'SRID=4326;POINT(8.470458 33.825972)'::geometry, ST_Transform('SRID=4326;POINT(8.470458 33.825972)'::geometry, 3857)), +(128, 'SRID=4326;POINT(8.470603 33.825651)'::geometry, ST_Transform('SRID=4326;POINT(8.470603 33.825651)'::geometry, 3857)), +(129, 'SRID=4326;POINT(8.470558 33.825475)'::geometry, ST_Transform('SRID=4326;POINT(8.470558 33.825475)'::geometry, 3857)), +(130, 'SRID=4326;POINT(8.470193 33.82544)'::geometry, ST_Transform('SRID=4326;POINT(8.470193 33.82544)'::geometry, 3857)), +(131, 'SRID=4326;POINT(8.47041 33.825325)'::geometry, ST_Transform('SRID=4326;POINT(8.47041 33.825325)'::geometry, 3857)), +(132, 'SRID=4326;POINT(8.470797 33.825402)'::geometry, ST_Transform('SRID=4326;POINT(8.470797 33.825402)'::geometry, 3857)), +(133, 'SRID=4326;POINT(8.470405 33.825234)'::geometry, ST_Transform('SRID=4326;POINT(8.470405 33.825234)'::geometry, 3857)), +(134, 'SRID=4326;POINT(8.47069 33.825547)'::geometry, ST_Transform('SRID=4326;POINT(8.47069 33.825547)'::geometry, 3857)), +(135, 'SRID=4326;POINT(8.470491 33.825588)'::geometry, ST_Transform('SRID=4326;POINT(8.470491 33.825588)'::geometry, 3857)), +(136, 'SRID=4326;POINT(8.470293 33.825798)'::geometry, ST_Transform('SRID=4326;POINT(8.470293 33.825798)'::geometry, 3857)), +(137, 'SRID=4326;POINT(8.47064 33.825412)'::geometry, ST_Transform('SRID=4326;POINT(8.47064 33.825412)'::geometry, 3857)), +(138, 'SRID=4326;POINT(8.470238 33.825427)'::geometry, ST_Transform('SRID=4326;POINT(8.470238 33.825427)'::geometry, 3857)), +(139, 'SRID=4326;POINT(8.20576 30.965218)'::geometry, ST_Transform('SRID=4326;POINT(8.20576 30.965218)'::geometry, 3857)), +(140, 'SRID=4326;POINT(8.205812 30.96474)'::geometry, ST_Transform('SRID=4326;POINT(8.205812 30.96474)'::geometry, 3857)), +(141, 'SRID=4326;POINT(8.205599 30.964695)'::geometry, ST_Transform('SRID=4326;POINT(8.205599 30.964695)'::geometry, 3857)), +(142, 'SRID=4326;POINT(-1.94997 37.466004)'::geometry, ST_Transform('SRID=4326;POINT(-1.94997 37.466004)'::geometry, 3857)), +(143, 'SRID=4326;POINT(-1.950577 37.466006)'::geometry, ST_Transform('SRID=4326;POINT(-1.950577 37.466006)'::geometry, 3857)), +(144, 'SRID=4326;POINT(-1.950744 37.465286)'::geometry, ST_Transform('SRID=4326;POINT(-1.950744 37.465286)'::geometry, 3857)), +(145, 'SRID=4326;POINT(-1.950241 37.466054)'::geometry, ST_Transform('SRID=4326;POINT(-1.950241 37.466054)'::geometry, 3857)), +(146, 'SRID=4326;POINT(-1.950335 37.465202)'::geometry, ST_Transform('SRID=4326;POINT(-1.950335 37.465202)'::geometry, 3857)), +(147, 'SRID=4326;POINT(-1.949968 37.465359)'::geometry, ST_Transform('SRID=4326;POINT(-1.949968 37.465359)'::geometry, 3857)), +(148, 'SRID=4326;POINT(-1.950149 37.465273)'::geometry, ST_Transform('SRID=4326;POINT(-1.950149 37.465273)'::geometry, 3857)), +(149, 'SRID=4326;POINT(-1.950008 37.46512)'::geometry, ST_Transform('SRID=4326;POINT(-1.950008 37.46512)'::geometry, 3857)), +(150, 'SRID=4326;POINT(-1.950516 37.465531)'::geometry, ST_Transform('SRID=4326;POINT(-1.950516 37.465531)'::geometry, 3857)), +(151, 'SRID=4326;POINT(-1.950595 37.465682)'::geometry, ST_Transform('SRID=4326;POINT(-1.950595 37.465682)'::geometry, 3857)), +(152, 'SRID=4326;POINT(-1.950222 37.465858)'::geometry, ST_Transform('SRID=4326;POINT(-1.950222 37.465858)'::geometry, 3857)), +(153, 'SRID=4326;POINT(-1.950306 37.465943)'::geometry, ST_Transform('SRID=4326;POINT(-1.950306 37.465943)'::geometry, 3857)), +(154, 'SRID=4326;POINT(-1.950272 37.466052)'::geometry, ST_Transform('SRID=4326;POINT(-1.950272 37.466052)'::geometry, 3857)), +(155, 'SRID=4326;POINT(-1.950724 37.465937)'::geometry, ST_Transform('SRID=4326;POINT(-1.950724 37.465937)'::geometry, 3857)), +(156, 'SRID=4326;POINT(-1.950334 37.465308)'::geometry, ST_Transform('SRID=4326;POINT(-1.950334 37.465308)'::geometry, 3857)), +(157, 'SRID=4326;POINT(-1.950797 37.465927)'::geometry, ST_Transform('SRID=4326;POINT(-1.950797 37.465927)'::geometry, 3857)), +(158, 'SRID=4326;POINT(9.779537 35.54475)'::geometry, ST_Transform('SRID=4326;POINT(9.779537 35.54475)'::geometry, 3857)), +(159, 'SRID=4326;POINT(9.779673 35.544579)'::geometry, ST_Transform('SRID=4326;POINT(9.779673 35.544579)'::geometry, 3857)), +(160, 'SRID=4326;POINT(9.779822 35.544831)'::geometry, ST_Transform('SRID=4326;POINT(9.779822 35.544831)'::geometry, 3857)), +(161, 'SRID=4326;POINT(-8.280843 31.373195)'::geometry, ST_Transform('SRID=4326;POINT(-8.280843 31.373195)'::geometry, 3857)), +(162, 'SRID=4326;POINT(-8.281007 31.374063)'::geometry, ST_Transform('SRID=4326;POINT(-8.281007 31.374063)'::geometry, 3857)), +(163, 'SRID=4326;POINT(-8.280772 31.373137)'::geometry, ST_Transform('SRID=4326;POINT(-8.280772 31.373137)'::geometry, 3857)), +(164, 'SRID=4326;POINT(-8.28126 31.373852)'::geometry, ST_Transform('SRID=4326;POINT(-8.28126 31.373852)'::geometry, 3857)), +(165, 'SRID=4326;POINT(-8.281032 31.374022)'::geometry, ST_Transform('SRID=4326;POINT(-8.281032 31.374022)'::geometry, 3857)), +(166, 'SRID=4326;POINT(-5.492422 32.876965)'::geometry, ST_Transform('SRID=4326;POINT(-5.492422 32.876965)'::geometry, 3857)), +(167, 'SRID=4326;POINT(-5.492822 32.877251)'::geometry, ST_Transform('SRID=4326;POINT(-5.492822 32.877251)'::geometry, 3857)), +(168, 'SRID=4326;POINT(-5.492531 32.877462)'::geometry, ST_Transform('SRID=4326;POINT(-5.492531 32.877462)'::geometry, 3857)), +(169, 'SRID=4326;POINT(-5.492944 32.877059)'::geometry, ST_Transform('SRID=4326;POINT(-5.492944 32.877059)'::geometry, 3857)), +(170, 'SRID=4326;POINT(-5.492309 32.877729)'::geometry, ST_Transform('SRID=4326;POINT(-5.492309 32.877729)'::geometry, 3857)), +(171, 'SRID=4326;POINT(-5.492892 32.877087)'::geometry, ST_Transform('SRID=4326;POINT(-5.492892 32.877087)'::geometry, 3857)), +(172, 'SRID=4326;POINT(3.901874 37.553725)'::geometry, ST_Transform('SRID=4326;POINT(3.901874 37.553725)'::geometry, 3857)), +(173, 'SRID=4326;POINT(3.902047 37.554527)'::geometry, ST_Transform('SRID=4326;POINT(3.902047 37.554527)'::geometry, 3857)), +(174, 'SRID=4326;POINT(3.901596 37.55417)'::geometry, ST_Transform('SRID=4326;POINT(3.901596 37.55417)'::geometry, 3857)), +(175, 'SRID=4326;POINT(3.902012 37.553726)'::geometry, ST_Transform('SRID=4326;POINT(3.902012 37.553726)'::geometry, 3857)), +(176, 'SRID=4326;POINT(3.901739 37.554492)'::geometry, ST_Transform('SRID=4326;POINT(3.901739 37.554492)'::geometry, 3857)), +(177, 'SRID=4326;POINT(3.901397 37.554598)'::geometry, ST_Transform('SRID=4326;POINT(3.901397 37.554598)'::geometry, 3857)), +(178, 'SRID=4326;POINT(3.901348 37.553662)'::geometry, ST_Transform('SRID=4326;POINT(3.901348 37.553662)'::geometry, 3857)), +(179, 'SRID=4326;POINT(3.90194 37.554032)'::geometry, ST_Transform('SRID=4326;POINT(3.90194 37.554032)'::geometry, 3857)), +(180, 'SRID=4326;POINT(-2.684028 31.988394)'::geometry, ST_Transform('SRID=4326;POINT(-2.684028 31.988394)'::geometry, 3857)), +(181, 'SRID=4326;POINT(-2.684145 31.988734)'::geometry, ST_Transform('SRID=4326;POINT(-2.684145 31.988734)'::geometry, 3857)), +(182, 'SRID=4326;POINT(-2.684262 31.988291)'::geometry, ST_Transform('SRID=4326;POINT(-2.684262 31.988291)'::geometry, 3857)), +(183, 'SRID=4326;POINT(-2.684535 31.988447)'::geometry, ST_Transform('SRID=4326;POINT(-2.684535 31.988447)'::geometry, 3857)), +(184, 'SRID=4326;POINT(-2.684214 31.9884)'::geometry, ST_Transform('SRID=4326;POINT(-2.684214 31.9884)'::geometry, 3857)), +(185, 'SRID=4326;POINT(-2.684298 31.989248)'::geometry, ST_Transform('SRID=4326;POINT(-2.684298 31.989248)'::geometry, 3857)), +(186, 'SRID=4326;POINT(-2.684349 31.988645)'::geometry, ST_Transform('SRID=4326;POINT(-2.684349 31.988645)'::geometry, 3857)), +(187, 'SRID=4326;POINT(-2.683797 31.988608)'::geometry, ST_Transform('SRID=4326;POINT(-2.683797 31.988608)'::geometry, 3857)), +(188, 'SRID=4326;POINT(-2.684117 31.988665)'::geometry, ST_Transform('SRID=4326;POINT(-2.684117 31.988665)'::geometry, 3857)), +(189, 'SRID=4326;POINT(-2.68444 31.988764)'::geometry, ST_Transform('SRID=4326;POINT(-2.68444 31.988764)'::geometry, 3857)), +(190, 'SRID=4326;POINT(-2.684519 31.98856)'::geometry, ST_Transform('SRID=4326;POINT(-2.684519 31.98856)'::geometry, 3857)), +(191, 'SRID=4326;POINT(-2.684361 31.988464)'::geometry, ST_Transform('SRID=4326;POINT(-2.684361 31.988464)'::geometry, 3857)), +(192, 'SRID=4326;POINT(-2.683966 31.988706)'::geometry, ST_Transform('SRID=4326;POINT(-2.683966 31.988706)'::geometry, 3857)), +(193, 'SRID=4326;POINT(-5.650994 38.876385)'::geometry, ST_Transform('SRID=4326;POINT(-5.650994 38.876385)'::geometry, 3857)), +(194, 'SRID=4326;POINT(-5.650197 38.876046)'::geometry, ST_Transform('SRID=4326;POINT(-5.650197 38.876046)'::geometry, 3857)), +(195, 'SRID=4326;POINT(-5.650764 38.875596)'::geometry, ST_Transform('SRID=4326;POINT(-5.650764 38.875596)'::geometry, 3857)), +(196, 'SRID=4326;POINT(-5.650742 38.875876)'::geometry, ST_Transform('SRID=4326;POINT(-5.650742 38.875876)'::geometry, 3857)), +(197, 'SRID=4326;POINT(-5.650184 38.876442)'::geometry, ST_Transform('SRID=4326;POINT(-5.650184 38.876442)'::geometry, 3857)), +(198, 'SRID=4326;POINT(-5.65088 38.876264)'::geometry, ST_Transform('SRID=4326;POINT(-5.65088 38.876264)'::geometry, 3857)), +(199, 'SRID=4326;POINT(-5.650245 38.876459)'::geometry, ST_Transform('SRID=4326;POINT(-5.650245 38.876459)'::geometry, 3857)), +(200, 'SRID=4326;POINT(0.94164 33.420389)'::geometry, ST_Transform('SRID=4326;POINT(0.94164 33.420389)'::geometry, 3857)), +(201, 'SRID=4326;POINT(0.942386 33.420323)'::geometry, ST_Transform('SRID=4326;POINT(0.942386 33.420323)'::geometry, 3857)), +(202, 'SRID=4326;POINT(0.942523 33.420441)'::geometry, ST_Transform('SRID=4326;POINT(0.942523 33.420441)'::geometry, 3857)), +(203, 'SRID=4326;POINT(0.941933 33.420348)'::geometry, ST_Transform('SRID=4326;POINT(0.941933 33.420348)'::geometry, 3857)), +(204, 'SRID=4326;POINT(0.942198 33.42006)'::geometry, ST_Transform('SRID=4326;POINT(0.942198 33.42006)'::geometry, 3857)), +(205, 'SRID=4326;POINT(0.942105 33.420254)'::geometry, ST_Transform('SRID=4326;POINT(0.942105 33.420254)'::geometry, 3857)), +(206, 'SRID=4326;POINT(0.94195 33.419859)'::geometry, ST_Transform('SRID=4326;POINT(0.94195 33.419859)'::geometry, 3857)), +(207, 'SRID=4326;POINT(0.9417 33.419948)'::geometry, ST_Transform('SRID=4326;POINT(0.9417 33.419948)'::geometry, 3857)), +(208, 'SRID=4326;POINT(0.942123 33.420747)'::geometry, ST_Transform('SRID=4326;POINT(0.942123 33.420747)'::geometry, 3857)), +(209, 'SRID=4326;POINT(0.942372 33.420072)'::geometry, ST_Transform('SRID=4326;POINT(0.942372 33.420072)'::geometry, 3857)), +(210, 'SRID=4326;POINT(0.941993 33.41995)'::geometry, ST_Transform('SRID=4326;POINT(0.941993 33.41995)'::geometry, 3857)), +(211, 'SRID=4326;POINT(6.372568 36.408838)'::geometry, ST_Transform('SRID=4326;POINT(6.372568 36.408838)'::geometry, 3857)), +(212, 'SRID=4326;POINT(6.372528 36.408063)'::geometry, ST_Transform('SRID=4326;POINT(6.372528 36.408063)'::geometry, 3857)), +(213, 'SRID=4326;POINT(6.373022 36.408816)'::geometry, ST_Transform('SRID=4326;POINT(6.373022 36.408816)'::geometry, 3857)), +(214, 'SRID=4326;POINT(6.373019 36.408548)'::geometry, ST_Transform('SRID=4326;POINT(6.373019 36.408548)'::geometry, 3857)), +(215, 'SRID=4326;POINT(6.372454 36.408772)'::geometry, ST_Transform('SRID=4326;POINT(6.372454 36.408772)'::geometry, 3857)), +(216, 'SRID=4326;POINT(6.372993 36.408855)'::geometry, ST_Transform('SRID=4326;POINT(6.372993 36.408855)'::geometry, 3857)), +(217, 'SRID=4326;POINT(6.372609 36.40839)'::geometry, ST_Transform('SRID=4326;POINT(6.372609 36.40839)'::geometry, 3857)), +(218, 'SRID=4326;POINT(6.373079 36.408347)'::geometry, ST_Transform('SRID=4326;POINT(6.373079 36.408347)'::geometry, 3857)), +(219, 'SRID=4326;POINT(6.37296 36.408476)'::geometry, ST_Transform('SRID=4326;POINT(6.37296 36.408476)'::geometry, 3857)), +(220, 'SRID=4326;POINT(6.245506 34.781366)'::geometry, ST_Transform('SRID=4326;POINT(6.245506 34.781366)'::geometry, 3857)), +(221, 'SRID=4326;POINT(6.246049 34.781405)'::geometry, ST_Transform('SRID=4326;POINT(6.246049 34.781405)'::geometry, 3857)), +(222, 'SRID=4326;POINT(6.245706 34.780982)'::geometry, ST_Transform('SRID=4326;POINT(6.245706 34.780982)'::geometry, 3857)), +(223, 'SRID=4326;POINT(6.245218 34.78099)'::geometry, ST_Transform('SRID=4326;POINT(6.245218 34.78099)'::geometry, 3857)), +(224, 'SRID=4326;POINT(6.245708 34.781197)'::geometry, ST_Transform('SRID=4326;POINT(6.245708 34.781197)'::geometry, 3857)), +(225, 'SRID=4326;POINT(6.245418 34.781542)'::geometry, ST_Transform('SRID=4326;POINT(6.245418 34.781542)'::geometry, 3857)), +(226, 'SRID=4326;POINT(6.245194 34.781294)'::geometry, ST_Transform('SRID=4326;POINT(6.245194 34.781294)'::geometry, 3857)), +(227, 'SRID=4326;POINT(6.245286 34.781662)'::geometry, ST_Transform('SRID=4326;POINT(6.245286 34.781662)'::geometry, 3857)), +(228, 'SRID=4326;POINT(6.246011 34.781247)'::geometry, ST_Transform('SRID=4326;POINT(6.246011 34.781247)'::geometry, 3857)), +(229, 'SRID=4326;POINT(-0.923093 32.167767)'::geometry, ST_Transform('SRID=4326;POINT(-0.923093 32.167767)'::geometry, 3857)), +(230, 'SRID=4326;POINT(-0.923549 32.167517)'::geometry, ST_Transform('SRID=4326;POINT(-0.923549 32.167517)'::geometry, 3857)), +(231, 'SRID=4326;POINT(-0.923094 32.166999)'::geometry, ST_Transform('SRID=4326;POINT(-0.923094 32.166999)'::geometry, 3857)), +(232, 'SRID=4326;POINT(-0.923765 32.166879)'::geometry, ST_Transform('SRID=4326;POINT(-0.923765 32.166879)'::geometry, 3857)), +(233, 'SRID=4326;POINT(-0.92404 32.167552)'::geometry, ST_Transform('SRID=4326;POINT(-0.92404 32.167552)'::geometry, 3857)), +(234, 'SRID=4326;POINT(-0.923406 32.166902)'::geometry, ST_Transform('SRID=4326;POINT(-0.923406 32.166902)'::geometry, 3857)), +(235, 'SRID=4326;POINT(-0.923247 32.167601)'::geometry, ST_Transform('SRID=4326;POINT(-0.923247 32.167601)'::geometry, 3857)), +(236, 'SRID=4326;POINT(-0.923771 32.167432)'::geometry, ST_Transform('SRID=4326;POINT(-0.923771 32.167432)'::geometry, 3857)), +(237, 'SRID=4326;POINT(-0.923963 32.167581)'::geometry, ST_Transform('SRID=4326;POINT(-0.923963 32.167581)'::geometry, 3857)), +(238, 'SRID=4326;POINT(-9.608738 39.303829)'::geometry, ST_Transform('SRID=4326;POINT(-9.608738 39.303829)'::geometry, 3857)), +(239, 'SRID=4326;POINT(-9.608444 39.303876)'::geometry, ST_Transform('SRID=4326;POINT(-9.608444 39.303876)'::geometry, 3857)), +(240, 'SRID=4326;POINT(8.268155 38.901343)'::geometry, ST_Transform('SRID=4326;POINT(8.268155 38.901343)'::geometry, 3857)), +(241, 'SRID=4326;POINT(8.267981 38.901286)'::geometry, ST_Transform('SRID=4326;POINT(8.267981 38.901286)'::geometry, 3857)), +(242, 'SRID=4326;POINT(8.268 38.901021)'::geometry, ST_Transform('SRID=4326;POINT(8.268 38.901021)'::geometry, 3857)), +(243, 'SRID=4326;POINT(8.26786 38.900806)'::geometry, ST_Transform('SRID=4326;POINT(8.26786 38.900806)'::geometry, 3857)), +(244, 'SRID=4326;POINT(8.268006 38.900948)'::geometry, ST_Transform('SRID=4326;POINT(8.268006 38.900948)'::geometry, 3857)), +(245, 'SRID=4326;POINT(8.26838 38.901022)'::geometry, ST_Transform('SRID=4326;POINT(8.26838 38.901022)'::geometry, 3857)), +(246, 'SRID=4326;POINT(6.530044 36.477513)'::geometry, ST_Transform('SRID=4326;POINT(6.530044 36.477513)'::geometry, 3857)), +(247, 'SRID=4326;POINT(6.529964 36.477625)'::geometry, ST_Transform('SRID=4326;POINT(6.529964 36.477625)'::geometry, 3857)), +(248, 'SRID=4326;POINT(6.529983 36.476846)'::geometry, ST_Transform('SRID=4326;POINT(6.529983 36.476846)'::geometry, 3857)), +(249, 'SRID=4326;POINT(-5.266262 38.716886)'::geometry, ST_Transform('SRID=4326;POINT(-5.266262 38.716886)'::geometry, 3857)), +(250, 'SRID=4326;POINT(-5.266413 38.716785)'::geometry, ST_Transform('SRID=4326;POINT(-5.266413 38.716785)'::geometry, 3857)), +(251, 'SRID=4326;POINT(-5.266222 38.717228)'::geometry, ST_Transform('SRID=4326;POINT(-5.266222 38.717228)'::geometry, 3857)), +(252, 'SRID=4326;POINT(-5.266795 38.717403)'::geometry, ST_Transform('SRID=4326;POINT(-5.266795 38.717403)'::geometry, 3857)), +(253, 'SRID=4326;POINT(-5.2668 38.716593)'::geometry, ST_Transform('SRID=4326;POINT(-5.2668 38.716593)'::geometry, 3857)), +(254, 'SRID=4326;POINT(-5.26693 38.716904)'::geometry, ST_Transform('SRID=4326;POINT(-5.26693 38.716904)'::geometry, 3857)), +(255, 'SRID=4326;POINT(-5.26618 38.717319)'::geometry, ST_Transform('SRID=4326;POINT(-5.26618 38.717319)'::geometry, 3857)), +(256, 'SRID=4326;POINT(-5.266235 38.716907)'::geometry, ST_Transform('SRID=4326;POINT(-5.266235 38.716907)'::geometry, 3857)), +(257, 'SRID=4326;POINT(-5.266846 38.716705)'::geometry, ST_Transform('SRID=4326;POINT(-5.266846 38.716705)'::geometry, 3857)), +(258, 'SRID=4326;POINT(-5.266687 38.717023)'::geometry, ST_Transform('SRID=4326;POINT(-5.266687 38.717023)'::geometry, 3857)), +(259, 'SRID=4326;POINT(-5.266512 38.717075)'::geometry, ST_Transform('SRID=4326;POINT(-5.266512 38.717075)'::geometry, 3857)), +(260, 'SRID=4326;POINT(-5.266189 38.716888)'::geometry, ST_Transform('SRID=4326;POINT(-5.266189 38.716888)'::geometry, 3857)), +(261, 'SRID=4326;POINT(-5.266565 38.717296)'::geometry, ST_Transform('SRID=4326;POINT(-5.266565 38.717296)'::geometry, 3857)), +(262, 'SRID=4326;POINT(9.504841 37.828039)'::geometry, ST_Transform('SRID=4326;POINT(9.504841 37.828039)'::geometry, 3857)), +(263, 'SRID=4326;POINT(9.504447 37.828131)'::geometry, ST_Transform('SRID=4326;POINT(9.504447 37.828131)'::geometry, 3857)), +(264, 'SRID=4326;POINT(9.505267 37.827879)'::geometry, ST_Transform('SRID=4326;POINT(9.505267 37.827879)'::geometry, 3857)), +(265, 'SRID=4326;POINT(9.505171 37.828127)'::geometry, ST_Transform('SRID=4326;POINT(9.505171 37.828127)'::geometry, 3857)), +(266, 'SRID=4326;POINT(9.505196 37.827809)'::geometry, ST_Transform('SRID=4326;POINT(9.505196 37.827809)'::geometry, 3857)), +(267, 'SRID=4326;POINT(9.505213 37.827885)'::geometry, ST_Transform('SRID=4326;POINT(9.505213 37.827885)'::geometry, 3857)), +(268, 'SRID=4326;POINT(9.504808 37.827401)'::geometry, ST_Transform('SRID=4326;POINT(9.504808 37.827401)'::geometry, 3857)), +(269, 'SRID=4326;POINT(-2.170801 36.903601)'::geometry, ST_Transform('SRID=4326;POINT(-2.170801 36.903601)'::geometry, 3857)), +(270, 'SRID=4326;POINT(-2.171542 36.904446)'::geometry, ST_Transform('SRID=4326;POINT(-2.171542 36.904446)'::geometry, 3857)), +(271, 'SRID=4326;POINT(-2.17161 36.904028)'::geometry, ST_Transform('SRID=4326;POINT(-2.17161 36.904028)'::geometry, 3857)), +(272, 'SRID=4326;POINT(-2.171332 36.903833)'::geometry, ST_Transform('SRID=4326;POINT(-2.171332 36.903833)'::geometry, 3857)), +(273, 'SRID=4326;POINT(-2.171042 36.904388)'::geometry, ST_Transform('SRID=4326;POINT(-2.171042 36.904388)'::geometry, 3857)), +(274, 'SRID=4326;POINT(-2.170963 36.903795)'::geometry, ST_Transform('SRID=4326;POINT(-2.170963 36.903795)'::geometry, 3857)), +(275, 'SRID=4326;POINT(-2.170688 36.903863)'::geometry, ST_Transform('SRID=4326;POINT(-2.170688 36.903863)'::geometry, 3857)), +(276, 'SRID=4326;POINT(-2.171087 36.903635)'::geometry, ST_Transform('SRID=4326;POINT(-2.171087 36.903635)'::geometry, 3857)), +(277, 'SRID=4326;POINT(-2.171346 36.903793)'::geometry, ST_Transform('SRID=4326;POINT(-2.171346 36.903793)'::geometry, 3857)), +(278, 'SRID=4326;POINT(-2.171005 36.903886)'::geometry, ST_Transform('SRID=4326;POINT(-2.171005 36.903886)'::geometry, 3857)), +(279, 'SRID=4326;POINT(-2.171343 36.9036)'::geometry, ST_Transform('SRID=4326;POINT(-2.171343 36.9036)'::geometry, 3857)), +(280, 'SRID=4326;POINT(-2.171242 36.904239)'::geometry, ST_Transform('SRID=4326;POINT(-2.171242 36.904239)'::geometry, 3857)), +(281, 'SRID=4326;POINT(-2.170868 36.903745)'::geometry, ST_Transform('SRID=4326;POINT(-2.170868 36.903745)'::geometry, 3857)), +(282, 'SRID=4326;POINT(-2.170799 36.90389)'::geometry, ST_Transform('SRID=4326;POINT(-2.170799 36.90389)'::geometry, 3857)), +(283, 'SRID=4326;POINT(-2.171564 36.903816)'::geometry, ST_Transform('SRID=4326;POINT(-2.171564 36.903816)'::geometry, 3857)), +(284, 'SRID=4326;POINT(8.368988 30.229265)'::geometry, ST_Transform('SRID=4326;POINT(8.368988 30.229265)'::geometry, 3857)), +(285, 'SRID=4326;POINT(8.369595 30.230013)'::geometry, ST_Transform('SRID=4326;POINT(8.369595 30.230013)'::geometry, 3857)), +(286, 'SRID=4326;POINT(8.3694 30.230109)'::geometry, ST_Transform('SRID=4326;POINT(8.3694 30.230109)'::geometry, 3857)), +(287, 'SRID=4326;POINT(8.369027 30.230082)'::geometry, ST_Transform('SRID=4326;POINT(8.369027 30.230082)'::geometry, 3857)), +(288, 'SRID=4326;POINT(8.368959 30.229372)'::geometry, ST_Transform('SRID=4326;POINT(8.368959 30.229372)'::geometry, 3857)), +(289, 'SRID=4326;POINT(8.369272 30.229717)'::geometry, ST_Transform('SRID=4326;POINT(8.369272 30.229717)'::geometry, 3857)), +(290, 'SRID=4326;POINT(8.369758 30.230161)'::geometry, ST_Transform('SRID=4326;POINT(8.369758 30.230161)'::geometry, 3857)), +(291, 'SRID=4326;POINT(8.36936 30.229783)'::geometry, ST_Transform('SRID=4326;POINT(8.36936 30.229783)'::geometry, 3857)), +(292, 'SRID=4326;POINT(-2.999782 31.589505)'::geometry, ST_Transform('SRID=4326;POINT(-2.999782 31.589505)'::geometry, 3857)), +(293, 'SRID=4326;POINT(-3.000221 31.589572)'::geometry, ST_Transform('SRID=4326;POINT(-3.000221 31.589572)'::geometry, 3857)), +(294, 'SRID=4326;POINT(-3.000412 31.589102)'::geometry, ST_Transform('SRID=4326;POINT(-3.000412 31.589102)'::geometry, 3857)), +(295, 'SRID=4326;POINT(-2.999662 31.589182)'::geometry, ST_Transform('SRID=4326;POINT(-2.999662 31.589182)'::geometry, 3857)), +(296, 'SRID=4326;POINT(-3.000224 31.589259)'::geometry, ST_Transform('SRID=4326;POINT(-3.000224 31.589259)'::geometry, 3857)), +(297, 'SRID=4326;POINT(-2.999983 31.589437)'::geometry, ST_Transform('SRID=4326;POINT(-2.999983 31.589437)'::geometry, 3857)), +(298, 'SRID=4326;POINT(-2.999877 31.589458)'::geometry, ST_Transform('SRID=4326;POINT(-2.999877 31.589458)'::geometry, 3857)), +(299, 'SRID=4326;POINT(-3.000263 31.589101)'::geometry, ST_Transform('SRID=4326;POINT(-3.000263 31.589101)'::geometry, 3857)), +(300, 'SRID=4326;POINT(-3.000401 31.589088)'::geometry, ST_Transform('SRID=4326;POINT(-3.000401 31.589088)'::geometry, 3857)), +(301, 'SRID=4326;POINT(-4.385852 39.752276)'::geometry, ST_Transform('SRID=4326;POINT(-4.385852 39.752276)'::geometry, 3857)), +(302, 'SRID=4326;POINT(-4.385884 39.752477)'::geometry, ST_Transform('SRID=4326;POINT(-4.385884 39.752477)'::geometry, 3857)), +(303, 'SRID=4326;POINT(-4.385735 39.752246)'::geometry, ST_Transform('SRID=4326;POINT(-4.385735 39.752246)'::geometry, 3857)), +(304, 'SRID=4326;POINT(-4.385942 39.752032)'::geometry, ST_Transform('SRID=4326;POINT(-4.385942 39.752032)'::geometry, 3857)), +(305, 'SRID=4326;POINT(-4.386277 39.751596)'::geometry, ST_Transform('SRID=4326;POINT(-4.386277 39.751596)'::geometry, 3857)), +(306, 'SRID=4326;POINT(-4.386394 39.751679)'::geometry, ST_Transform('SRID=4326;POINT(-4.386394 39.751679)'::geometry, 3857)), +(307, 'SRID=4326;POINT(-4.385727 39.752405)'::geometry, ST_Transform('SRID=4326;POINT(-4.385727 39.752405)'::geometry, 3857)), +(308, 'SRID=4326;POINT(-4.38659 39.752503)'::geometry, ST_Transform('SRID=4326;POINT(-4.38659 39.752503)'::geometry, 3857)), +(309, 'SRID=4326;POINT(-4.386676 39.751577)'::geometry, ST_Transform('SRID=4326;POINT(-4.386676 39.751577)'::geometry, 3857)), +(310, 'SRID=4326;POINT(-4.386058 39.752441)'::geometry, ST_Transform('SRID=4326;POINT(-4.386058 39.752441)'::geometry, 3857)), +(311, 'SRID=4326;POINT(8.783959 38.480157)'::geometry, ST_Transform('SRID=4326;POINT(8.783959 38.480157)'::geometry, 3857)), +(312, 'SRID=4326;POINT(8.784044 38.480085)'::geometry, ST_Transform('SRID=4326;POINT(8.784044 38.480085)'::geometry, 3857)), +(313, 'SRID=4326;POINT(8.78403 38.480162)'::geometry, ST_Transform('SRID=4326;POINT(8.78403 38.480162)'::geometry, 3857)), +(314, 'SRID=4326;POINT(8.784699 38.480106)'::geometry, ST_Transform('SRID=4326;POINT(8.784699 38.480106)'::geometry, 3857)), +(315, 'SRID=4326;POINT(8.784249 38.479839)'::geometry, ST_Transform('SRID=4326;POINT(8.784249 38.479839)'::geometry, 3857)), +(316, 'SRID=4326;POINT(8.783899 38.479817)'::geometry, ST_Transform('SRID=4326;POINT(8.783899 38.479817)'::geometry, 3857)), +(317, 'SRID=4326;POINT(8.78446 38.480156)'::geometry, ST_Transform('SRID=4326;POINT(8.78446 38.480156)'::geometry, 3857)), +(318, 'SRID=4326;POINT(8.784665 38.479739)'::geometry, ST_Transform('SRID=4326;POINT(8.784665 38.479739)'::geometry, 3857)), +(319, 'SRID=4326;POINT(8.784078 38.479956)'::geometry, ST_Transform('SRID=4326;POINT(8.784078 38.479956)'::geometry, 3857)), +(320, 'SRID=4326;POINT(8.783993 38.47977)'::geometry, ST_Transform('SRID=4326;POINT(8.783993 38.47977)'::geometry, 3857)), +(321, 'SRID=4326;POINT(8.784086 38.479532)'::geometry, ST_Transform('SRID=4326;POINT(8.784086 38.479532)'::geometry, 3857)), +(322, 'SRID=4326;POINT(8.784273 38.47969)'::geometry, ST_Transform('SRID=4326;POINT(8.784273 38.47969)'::geometry, 3857)), +(323, 'SRID=4326;POINT(8.784413 38.480132)'::geometry, ST_Transform('SRID=4326;POINT(8.784413 38.480132)'::geometry, 3857)), +(324, 'SRID=4326;POINT(8.784039 38.479655)'::geometry, ST_Transform('SRID=4326;POINT(8.784039 38.479655)'::geometry, 3857)), +(325, 'SRID=4326;POINT(8.783959 38.479375)'::geometry, ST_Transform('SRID=4326;POINT(8.783959 38.479375)'::geometry, 3857)), +(326, 'SRID=4326;POINT(-8.060178 31.973027)'::geometry, ST_Transform('SRID=4326;POINT(-8.060178 31.973027)'::geometry, 3857)), +(327, 'SRID=4326;POINT(-8.059659 31.973225)'::geometry, ST_Transform('SRID=4326;POINT(-8.059659 31.973225)'::geometry, 3857)), +(328, 'SRID=4326;POINT(-8.059924 31.973108)'::geometry, ST_Transform('SRID=4326;POINT(-8.059924 31.973108)'::geometry, 3857)), +(329, 'SRID=4326;POINT(-8.060125 31.973226)'::geometry, ST_Transform('SRID=4326;POINT(-8.060125 31.973226)'::geometry, 3857)), +(330, 'SRID=4326;POINT(-8.059829 31.973612)'::geometry, ST_Transform('SRID=4326;POINT(-8.059829 31.973612)'::geometry, 3857)), +(331, 'SRID=4326;POINT(-8.060249 31.97362)'::geometry, ST_Transform('SRID=4326;POINT(-8.060249 31.97362)'::geometry, 3857)), +(332, 'SRID=4326;POINT(-8.059803 31.972989)'::geometry, ST_Transform('SRID=4326;POINT(-8.059803 31.972989)'::geometry, 3857)), +(333, 'SRID=4326;POINT(-8.059599 31.973695)'::geometry, ST_Transform('SRID=4326;POINT(-8.059599 31.973695)'::geometry, 3857)), +(334, 'SRID=4326;POINT(-8.059936 31.973495)'::geometry, ST_Transform('SRID=4326;POINT(-8.059936 31.973495)'::geometry, 3857)), +(335, 'SRID=4326;POINT(-8.05947 31.97354)'::geometry, ST_Transform('SRID=4326;POINT(-8.05947 31.97354)'::geometry, 3857)), +(336, 'SRID=4326;POINT(-8.059534 31.973116)'::geometry, ST_Transform('SRID=4326;POINT(-8.059534 31.973116)'::geometry, 3857)), +(337, 'SRID=4326;POINT(-8.059575 31.973105)'::geometry, ST_Transform('SRID=4326;POINT(-8.059575 31.973105)'::geometry, 3857)), +(338, 'SRID=4326;POINT(-4.63212 35.998127)'::geometry, ST_Transform('SRID=4326;POINT(-4.63212 35.998127)'::geometry, 3857)), +(339, 'SRID=4326;POINT(-4.632715 35.998019)'::geometry, ST_Transform('SRID=4326;POINT(-4.632715 35.998019)'::geometry, 3857)), +(340, 'SRID=4326;POINT(-4.632119 35.997393)'::geometry, ST_Transform('SRID=4326;POINT(-4.632119 35.997393)'::geometry, 3857)), +(341, 'SRID=4326;POINT(-4.632803 35.99753)'::geometry, ST_Transform('SRID=4326;POINT(-4.632803 35.99753)'::geometry, 3857)), +(342, 'SRID=4326;POINT(-9.077417 37.751901)'::geometry, ST_Transform('SRID=4326;POINT(-9.077417 37.751901)'::geometry, 3857)), +(343, 'SRID=4326;POINT(-9.077265 37.752111)'::geometry, ST_Transform('SRID=4326;POINT(-9.077265 37.752111)'::geometry, 3857)), +(344, 'SRID=4326;POINT(-9.077343 37.75176)'::geometry, ST_Transform('SRID=4326;POINT(-9.077343 37.75176)'::geometry, 3857)), +(345, 'SRID=4326;POINT(-9.077467 37.751908)'::geometry, ST_Transform('SRID=4326;POINT(-9.077467 37.751908)'::geometry, 3857)), +(346, 'SRID=4326;POINT(-9.077027 37.751421)'::geometry, ST_Transform('SRID=4326;POINT(-9.077027 37.751421)'::geometry, 3857)), +(347, 'SRID=4326;POINT(-9.077902 37.751891)'::geometry, ST_Transform('SRID=4326;POINT(-9.077902 37.751891)'::geometry, 3857)), +(348, 'SRID=4326;POINT(-9.077804 37.751888)'::geometry, ST_Transform('SRID=4326;POINT(-9.077804 37.751888)'::geometry, 3857)), +(349, 'SRID=4326;POINT(-9.077673 37.751405)'::geometry, ST_Transform('SRID=4326;POINT(-9.077673 37.751405)'::geometry, 3857)), +(350, 'SRID=4326;POINT(-9.076988 37.751842)'::geometry, ST_Transform('SRID=4326;POINT(-9.076988 37.751842)'::geometry, 3857)), +(351, 'SRID=4326;POINT(-9.077688 37.75141)'::geometry, ST_Transform('SRID=4326;POINT(-9.077688 37.75141)'::geometry, 3857)), +(352, 'SRID=4326;POINT(-9.077493 37.751423)'::geometry, ST_Transform('SRID=4326;POINT(-9.077493 37.751423)'::geometry, 3857)), +(353, 'SRID=4326;POINT(-9.07777 37.75196)'::geometry, ST_Transform('SRID=4326;POINT(-9.07777 37.75196)'::geometry, 3857)), +(354, 'SRID=4326;POINT(-9.077415 37.751844)'::geometry, ST_Transform('SRID=4326;POINT(-9.077415 37.751844)'::geometry, 3857)), +(355, 'SRID=4326;POINT(-9.077104 37.751428)'::geometry, ST_Transform('SRID=4326;POINT(-9.077104 37.751428)'::geometry, 3857)), +(356, 'SRID=4326;POINT(-9.077731 37.751225)'::geometry, ST_Transform('SRID=4326;POINT(-9.077731 37.751225)'::geometry, 3857)), +(357, 'SRID=4326;POINT(5.736671 39.05025)'::geometry, ST_Transform('SRID=4326;POINT(5.736671 39.05025)'::geometry, 3857)), +(358, 'SRID=4326;POINT(2.486706 38.642451)'::geometry, ST_Transform('SRID=4326;POINT(2.486706 38.642451)'::geometry, 3857)), +(359, 'SRID=4326;POINT(2.487244 38.642613)'::geometry, ST_Transform('SRID=4326;POINT(2.487244 38.642613)'::geometry, 3857)), +(360, 'SRID=4326;POINT(2.487265 38.64297)'::geometry, ST_Transform('SRID=4326;POINT(2.487265 38.64297)'::geometry, 3857)), +(361, 'SRID=4326;POINT(2.487094 38.642426)'::geometry, ST_Transform('SRID=4326;POINT(2.487094 38.642426)'::geometry, 3857)), +(362, 'SRID=4326;POINT(2.486678 38.642585)'::geometry, ST_Transform('SRID=4326;POINT(2.486678 38.642585)'::geometry, 3857)), +(363, 'SRID=4326;POINT(2.487308 38.642908)'::geometry, ST_Transform('SRID=4326;POINT(2.487308 38.642908)'::geometry, 3857)), +(364, 'SRID=4326;POINT(2.486737 38.642071)'::geometry, ST_Transform('SRID=4326;POINT(2.486737 38.642071)'::geometry, 3857)), +(365, 'SRID=4326;POINT(2.486899 38.642834)'::geometry, ST_Transform('SRID=4326;POINT(2.486899 38.642834)'::geometry, 3857)), +(366, 'SRID=4326;POINT(2.487133 38.642518)'::geometry, ST_Transform('SRID=4326;POINT(2.487133 38.642518)'::geometry, 3857)), +(367, 'SRID=4326;POINT(0.190222 39.022953)'::geometry, ST_Transform('SRID=4326;POINT(0.190222 39.022953)'::geometry, 3857)), +(368, 'SRID=4326;POINT(0.190043 39.023114)'::geometry, ST_Transform('SRID=4326;POINT(0.190043 39.023114)'::geometry, 3857)), +(369, 'SRID=4326;POINT(0.190124 39.023072)'::geometry, ST_Transform('SRID=4326;POINT(0.190124 39.023072)'::geometry, 3857)), +(370, 'SRID=4326;POINT(0.190422 39.023139)'::geometry, ST_Transform('SRID=4326;POINT(0.190422 39.023139)'::geometry, 3857)), +(371, 'SRID=4326;POINT(0.190447 39.023119)'::geometry, ST_Transform('SRID=4326;POINT(0.190447 39.023119)'::geometry, 3857)), +(372, 'SRID=4326;POINT(0.190864 39.022787)'::geometry, ST_Transform('SRID=4326;POINT(0.190864 39.022787)'::geometry, 3857)), +(373, 'SRID=4326;POINT(0.190587 39.023213)'::geometry, ST_Transform('SRID=4326;POINT(0.190587 39.023213)'::geometry, 3857)), +(374, 'SRID=4326;POINT(0.190173 39.023267)'::geometry, ST_Transform('SRID=4326;POINT(0.190173 39.023267)'::geometry, 3857)), +(375, 'SRID=4326;POINT(0.190158 39.023269)'::geometry, ST_Transform('SRID=4326;POINT(0.190158 39.023269)'::geometry, 3857)), +(376, 'SRID=4326;POINT(0.190034 39.023105)'::geometry, ST_Transform('SRID=4326;POINT(0.190034 39.023105)'::geometry, 3857)), +(377, 'SRID=4326;POINT(0.190614 39.023247)'::geometry, ST_Transform('SRID=4326;POINT(0.190614 39.023247)'::geometry, 3857)), +(378, 'SRID=4326;POINT(0.19013 39.022976)'::geometry, ST_Transform('SRID=4326;POINT(0.19013 39.022976)'::geometry, 3857)), +(379, 'SRID=4326;POINT(0.190578 39.023254)'::geometry, ST_Transform('SRID=4326;POINT(0.190578 39.023254)'::geometry, 3857)), +(380, 'SRID=4326;POINT(-4.726492 38.505264)'::geometry, ST_Transform('SRID=4326;POINT(-4.726492 38.505264)'::geometry, 3857)), +(381, 'SRID=4326;POINT(-4.726996 38.505473)'::geometry, ST_Transform('SRID=4326;POINT(-4.726996 38.505473)'::geometry, 3857)), +(382, 'SRID=4326;POINT(6.295031 33.792646)'::geometry, ST_Transform('SRID=4326;POINT(6.295031 33.792646)'::geometry, 3857)), +(383, 'SRID=4326;POINT(6.29525 33.792686)'::geometry, ST_Transform('SRID=4326;POINT(6.29525 33.792686)'::geometry, 3857)), +(384, 'SRID=4326;POINT(6.294926 33.793128)'::geometry, ST_Transform('SRID=4326;POINT(6.294926 33.793128)'::geometry, 3857)), +(385, 'SRID=4326;POINT(6.295688 33.792557)'::geometry, ST_Transform('SRID=4326;POINT(6.295688 33.792557)'::geometry, 3857)), +(386, 'SRID=4326;POINT(6.295214 33.792642)'::geometry, ST_Transform('SRID=4326;POINT(6.295214 33.792642)'::geometry, 3857)), +(387, 'SRID=4326;POINT(6.295116 33.792807)'::geometry, ST_Transform('SRID=4326;POINT(6.295116 33.792807)'::geometry, 3857)), +(388, 'SRID=4326;POINT(6.295144 33.792432)'::geometry, ST_Transform('SRID=4326;POINT(6.295144 33.792432)'::geometry, 3857)), +(389, 'SRID=4326;POINT(6.295344 33.793005)'::geometry, ST_Transform('SRID=4326;POINT(6.295344 33.793005)'::geometry, 3857)), +(390, 'SRID=4326;POINT(6.294974 33.792792)'::geometry, ST_Transform('SRID=4326;POINT(6.294974 33.792792)'::geometry, 3857)), +(391, 'SRID=4326;POINT(6.29545 33.792402)'::geometry, ST_Transform('SRID=4326;POINT(6.29545 33.792402)'::geometry, 3857)), +(392, 'SRID=4326;POINT(6.295601 33.792992)'::geometry, ST_Transform('SRID=4326;POINT(6.295601 33.792992)'::geometry, 3857)), +(393, 'SRID=4326;POINT(6.295289 33.79258)'::geometry, ST_Transform('SRID=4326;POINT(6.295289 33.79258)'::geometry, 3857)), +(394, 'SRID=4326;POINT(6.295285 33.79334)'::geometry, ST_Transform('SRID=4326;POINT(6.295285 33.79334)'::geometry, 3857)), +(395, 'SRID=4326;POINT(6.295307 33.792945)'::geometry, ST_Transform('SRID=4326;POINT(6.295307 33.792945)'::geometry, 3857)), +(396, 'SRID=4326;POINT(-3.961321 37.574227)'::geometry, ST_Transform('SRID=4326;POINT(-3.961321 37.574227)'::geometry, 3857)), +(397, 'SRID=4326;POINT(-3.961179 37.574737)'::geometry, ST_Transform('SRID=4326;POINT(-3.961179 37.574737)'::geometry, 3857)), +(398, 'SRID=4326;POINT(-3.961895 37.574623)'::geometry, ST_Transform('SRID=4326;POINT(-3.961895 37.574623)'::geometry, 3857)), +(399, 'SRID=4326;POINT(-3.961152 37.574831)'::geometry, ST_Transform('SRID=4326;POINT(-3.961152 37.574831)'::geometry, 3857)), +(400, 'SRID=4326;POINT(-3.961619 37.574905)'::geometry, ST_Transform('SRID=4326;POINT(-3.961619 37.574905)'::geometry, 3857)), +(401, 'SRID=4326;POINT(-3.961297 37.574127)'::geometry, ST_Transform('SRID=4326;POINT(-3.961297 37.574127)'::geometry, 3857)), +(402, 'SRID=4326;POINT(-3.961714 37.574449)'::geometry, ST_Transform('SRID=4326;POINT(-3.961714 37.574449)'::geometry, 3857)), +(403, 'SRID=4326;POINT(-3.961663 37.574729)'::geometry, ST_Transform('SRID=4326;POINT(-3.961663 37.574729)'::geometry, 3857)), +(404, 'SRID=4326;POINT(-3.962034 37.574013)'::geometry, ST_Transform('SRID=4326;POINT(-3.962034 37.574013)'::geometry, 3857)), +(405, 'SRID=4326;POINT(-3.961185 37.574931)'::geometry, ST_Transform('SRID=4326;POINT(-3.961185 37.574931)'::geometry, 3857)), +(406, 'SRID=4326;POINT(-3.96149 37.574124)'::geometry, ST_Transform('SRID=4326;POINT(-3.96149 37.574124)'::geometry, 3857)), +(407, 'SRID=4326;POINT(-3.961513 37.574389)'::geometry, ST_Transform('SRID=4326;POINT(-3.961513 37.574389)'::geometry, 3857)), +(408, 'SRID=4326;POINT(-3.962069 37.57462)'::geometry, ST_Transform('SRID=4326;POINT(-3.962069 37.57462)'::geometry, 3857)), +(409, 'SRID=4326;POINT(-3.961603 37.574585)'::geometry, ST_Transform('SRID=4326;POINT(-3.961603 37.574585)'::geometry, 3857)), +(410, 'SRID=4326;POINT(-9.221169 39.607003)'::geometry, ST_Transform('SRID=4326;POINT(-9.221169 39.607003)'::geometry, 3857)), +(411, 'SRID=4326;POINT(-9.221883 39.607595)'::geometry, ST_Transform('SRID=4326;POINT(-9.221883 39.607595)'::geometry, 3857)), +(412, 'SRID=4326;POINT(-9.222102 39.607298)'::geometry, ST_Transform('SRID=4326;POINT(-9.222102 39.607298)'::geometry, 3857)), +(413, 'SRID=4326;POINT(-9.222118 39.606969)'::geometry, ST_Transform('SRID=4326;POINT(-9.222118 39.606969)'::geometry, 3857)), +(414, 'SRID=4326;POINT(-9.221516 39.607447)'::geometry, ST_Transform('SRID=4326;POINT(-9.221516 39.607447)'::geometry, 3857)), +(415, 'SRID=4326;POINT(-9.222017 39.607394)'::geometry, ST_Transform('SRID=4326;POINT(-9.222017 39.607394)'::geometry, 3857)), +(416, 'SRID=4326;POINT(-9.22136 39.607455)'::geometry, ST_Transform('SRID=4326;POINT(-9.22136 39.607455)'::geometry, 3857)), +(417, 'SRID=4326;POINT(-9.222014 39.606962)'::geometry, ST_Transform('SRID=4326;POINT(-9.222014 39.606962)'::geometry, 3857)), +(418, 'SRID=4326;POINT(-9.221755 39.607393)'::geometry, ST_Transform('SRID=4326;POINT(-9.221755 39.607393)'::geometry, 3857)), +(419, 'SRID=4326;POINT(-9.221748 39.607181)'::geometry, ST_Transform('SRID=4326;POINT(-9.221748 39.607181)'::geometry, 3857)), +(420, 'SRID=4326;POINT(-9.221728 39.607402)'::geometry, ST_Transform('SRID=4326;POINT(-9.221728 39.607402)'::geometry, 3857)), +(421, 'SRID=4326;POINT(-9.221372 39.60722)'::geometry, ST_Transform('SRID=4326;POINT(-9.221372 39.60722)'::geometry, 3857)), +(422, 'SRID=4326;POINT(-9.221399 39.607532)'::geometry, ST_Transform('SRID=4326;POINT(-9.221399 39.607532)'::geometry, 3857)), +(423, 'SRID=4326;POINT(-9.221766 39.60764)'::geometry, ST_Transform('SRID=4326;POINT(-9.221766 39.60764)'::geometry, 3857)), +(424, 'SRID=4326;POINT(-9.221211 39.607327)'::geometry, ST_Transform('SRID=4326;POINT(-9.221211 39.607327)'::geometry, 3857)), +(425, 'SRID=4326;POINT(-9.221834 39.607635)'::geometry, ST_Transform('SRID=4326;POINT(-9.221834 39.607635)'::geometry, 3857)), +(426, 'SRID=4326;POINT(6.85655 34.912087)'::geometry, ST_Transform('SRID=4326;POINT(6.85655 34.912087)'::geometry, 3857)), +(427, 'SRID=4326;POINT(6.856473 34.912241)'::geometry, ST_Transform('SRID=4326;POINT(6.856473 34.912241)'::geometry, 3857)), +(428, 'SRID=4326;POINT(6.856142 34.912217)'::geometry, ST_Transform('SRID=4326;POINT(6.856142 34.912217)'::geometry, 3857)), +(429, 'SRID=4326;POINT(6.856378 34.912182)'::geometry, ST_Transform('SRID=4326;POINT(6.856378 34.912182)'::geometry, 3857)), +(430, 'SRID=4326;POINT(6.856079 34.912444)'::geometry, ST_Transform('SRID=4326;POINT(6.856079 34.912444)'::geometry, 3857)), +(431, 'SRID=4326;POINT(6.856087 34.911668)'::geometry, ST_Transform('SRID=4326;POINT(6.856087 34.911668)'::geometry, 3857)), +(432, 'SRID=4326;POINT(6.856699 34.911491)'::geometry, ST_Transform('SRID=4326;POINT(6.856699 34.911491)'::geometry, 3857)), +(433, 'SRID=4326;POINT(6.856371 34.911687)'::geometry, ST_Transform('SRID=4326;POINT(6.856371 34.911687)'::geometry, 3857)), +(434, 'SRID=4326;POINT(6.856564 34.91177)'::geometry, ST_Transform('SRID=4326;POINT(6.856564 34.91177)'::geometry, 3857)), +(435, 'SRID=4326;POINT(6.856768 34.911903)'::geometry, ST_Transform('SRID=4326;POINT(6.856768 34.911903)'::geometry, 3857)), +(436, 'SRID=4326;POINT(6.856324 34.912415)'::geometry, ST_Transform('SRID=4326;POINT(6.856324 34.912415)'::geometry, 3857)), +(437, 'SRID=4326;POINT(6.856826 34.911767)'::geometry, ST_Transform('SRID=4326;POINT(6.856826 34.911767)'::geometry, 3857)), +(438, 'SRID=4326;POINT(6.856792 34.912182)'::geometry, ST_Transform('SRID=4326;POINT(6.856792 34.912182)'::geometry, 3857)), +(439, 'SRID=4326;POINT(6.856929 34.912379)'::geometry, ST_Transform('SRID=4326;POINT(6.856929 34.912379)'::geometry, 3857)), +(440, 'SRID=4326;POINT(6.85643 34.912242)'::geometry, ST_Transform('SRID=4326;POINT(6.85643 34.912242)'::geometry, 3857)), +(441, 'SRID=4326;POINT(3.596947 38.1486)'::geometry, ST_Transform('SRID=4326;POINT(3.596947 38.1486)'::geometry, 3857)), +(442, 'SRID=4326;POINT(3.596769 38.148948)'::geometry, ST_Transform('SRID=4326;POINT(3.596769 38.148948)'::geometry, 3857)), +(443, 'SRID=4326;POINT(3.596829 38.148394)'::geometry, ST_Transform('SRID=4326;POINT(3.596829 38.148394)'::geometry, 3857)), +(444, 'SRID=4326;POINT(3.597295 38.14811)'::geometry, ST_Transform('SRID=4326;POINT(3.597295 38.14811)'::geometry, 3857)), +(445, 'SRID=4326;POINT(3.597307 38.148007)'::geometry, ST_Transform('SRID=4326;POINT(3.597307 38.148007)'::geometry, 3857)), +(446, 'SRID=4326;POINT(3.597512 38.148592)'::geometry, ST_Transform('SRID=4326;POINT(3.597512 38.148592)'::geometry, 3857)), +(447, 'SRID=4326;POINT(3.596798 38.148721)'::geometry, ST_Transform('SRID=4326;POINT(3.596798 38.148721)'::geometry, 3857)), +(448, 'SRID=4326;POINT(3.597043 38.14809)'::geometry, ST_Transform('SRID=4326;POINT(3.597043 38.14809)'::geometry, 3857)), +(449, 'SRID=4326;POINT(3.597261 38.148706)'::geometry, ST_Transform('SRID=4326;POINT(3.597261 38.148706)'::geometry, 3857)), +(450, 'SRID=4326;POINT(3.597318 38.14896)'::geometry, ST_Transform('SRID=4326;POINT(3.597318 38.14896)'::geometry, 3857)), +(451, 'SRID=4326;POINT(7.017467 32.682268)'::geometry, ST_Transform('SRID=4326;POINT(7.017467 32.682268)'::geometry, 3857)), +(452, 'SRID=4326;POINT(7.017442 32.682523)'::geometry, ST_Transform('SRID=4326;POINT(7.017442 32.682523)'::geometry, 3857)), +(453, 'SRID=4326;POINT(7.017381 32.682706)'::geometry, ST_Transform('SRID=4326;POINT(7.017381 32.682706)'::geometry, 3857)), +(454, 'SRID=4326;POINT(7.017033 32.6818)'::geometry, ST_Transform('SRID=4326;POINT(7.017033 32.6818)'::geometry, 3857)), +(455, 'SRID=4326;POINT(7.017106 32.681931)'::geometry, ST_Transform('SRID=4326;POINT(7.017106 32.681931)'::geometry, 3857)), +(456, 'SRID=4326;POINT(7.017705 32.682579)'::geometry, ST_Transform('SRID=4326;POINT(7.017705 32.682579)'::geometry, 3857)), +(457, 'SRID=4326;POINT(7.017261 32.682337)'::geometry, ST_Transform('SRID=4326;POINT(7.017261 32.682337)'::geometry, 3857)), +(458, 'SRID=4326;POINT(7.017581 32.682233)'::geometry, ST_Transform('SRID=4326;POINT(7.017581 32.682233)'::geometry, 3857)), +(459, 'SRID=4326;POINT(7.017235 32.682232)'::geometry, ST_Transform('SRID=4326;POINT(7.017235 32.682232)'::geometry, 3857)), +(460, 'SRID=4326;POINT(7.017307 32.682267)'::geometry, ST_Transform('SRID=4326;POINT(7.017307 32.682267)'::geometry, 3857)), +(461, 'SRID=4326;POINT(7.017528 32.682155)'::geometry, ST_Transform('SRID=4326;POINT(7.017528 32.682155)'::geometry, 3857)), +(462, 'SRID=4326;POINT(7.017666 32.682105)'::geometry, ST_Transform('SRID=4326;POINT(7.017666 32.682105)'::geometry, 3857)), +(463, 'SRID=4326;POINT(7.017189 32.682041)'::geometry, ST_Transform('SRID=4326;POINT(7.017189 32.682041)'::geometry, 3857)), +(464, 'SRID=4326;POINT(-8.05544 34.279282)'::geometry, ST_Transform('SRID=4326;POINT(-8.05544 34.279282)'::geometry, 3857)), +(465, 'SRID=4326;POINT(-8.055997 34.279187)'::geometry, ST_Transform('SRID=4326;POINT(-8.055997 34.279187)'::geometry, 3857)), +(466, 'SRID=4326;POINT(-8.055628 34.278509)'::geometry, ST_Transform('SRID=4326;POINT(-8.055628 34.278509)'::geometry, 3857)), +(467, 'SRID=4326;POINT(-8.056024 34.278599)'::geometry, ST_Transform('SRID=4326;POINT(-8.056024 34.278599)'::geometry, 3857)), +(468, 'SRID=4326;POINT(-8.056048 34.278384)'::geometry, ST_Transform('SRID=4326;POINT(-8.056048 34.278384)'::geometry, 3857)), +(469, 'SRID=4326;POINT(-8.05553 34.278415)'::geometry, ST_Transform('SRID=4326;POINT(-8.05553 34.278415)'::geometry, 3857)), +(470, 'SRID=4326;POINT(-8.055728 34.279115)'::geometry, ST_Transform('SRID=4326;POINT(-8.055728 34.279115)'::geometry, 3857)), +(471, 'SRID=4326;POINT(-8.056245 34.278838)'::geometry, ST_Transform('SRID=4326;POINT(-8.056245 34.278838)'::geometry, 3857)), +(472, 'SRID=4326;POINT(-8.055941 34.279043)'::geometry, ST_Transform('SRID=4326;POINT(-8.055941 34.279043)'::geometry, 3857)), +(473, 'SRID=4326;POINT(-7.228337 37.816001)'::geometry, ST_Transform('SRID=4326;POINT(-7.228337 37.816001)'::geometry, 3857)), +(474, 'SRID=4326;POINT(-7.227998 37.816439)'::geometry, ST_Transform('SRID=4326;POINT(-7.227998 37.816439)'::geometry, 3857)), +(475, 'SRID=4326;POINT(-7.228233 37.816839)'::geometry, ST_Transform('SRID=4326;POINT(-7.228233 37.816839)'::geometry, 3857)), +(476, 'SRID=4326;POINT(-7.228156 37.816186)'::geometry, ST_Transform('SRID=4326;POINT(-7.228156 37.816186)'::geometry, 3857)), +(477, 'SRID=4326;POINT(-7.227702 37.816616)'::geometry, ST_Transform('SRID=4326;POINT(-7.227702 37.816616)'::geometry, 3857)), +(478, 'SRID=4326;POINT(-1.129358 38.380395)'::geometry, ST_Transform('SRID=4326;POINT(-1.129358 38.380395)'::geometry, 3857)), +(479, 'SRID=4326;POINT(-1.129632 38.379986)'::geometry, ST_Transform('SRID=4326;POINT(-1.129632 38.379986)'::geometry, 3857)), +(480, 'SRID=4326;POINT(-1.129738 38.379575)'::geometry, ST_Transform('SRID=4326;POINT(-1.129738 38.379575)'::geometry, 3857)), +(481, 'SRID=4326;POINT(-1.129916 38.38044)'::geometry, ST_Transform('SRID=4326;POINT(-1.129916 38.38044)'::geometry, 3857)), +(482, 'SRID=4326;POINT(-1.129103 38.379631)'::geometry, ST_Transform('SRID=4326;POINT(-1.129103 38.379631)'::geometry, 3857)), +(483, 'SRID=4326;POINT(-1.129994 38.379868)'::geometry, ST_Transform('SRID=4326;POINT(-1.129994 38.379868)'::geometry, 3857)), +(484, 'SRID=4326;POINT(5.367991 30.545321)'::geometry, ST_Transform('SRID=4326;POINT(5.367991 30.545321)'::geometry, 3857)), +(485, 'SRID=4326;POINT(5.367515 30.544982)'::geometry, ST_Transform('SRID=4326;POINT(5.367515 30.544982)'::geometry, 3857)), +(486, 'SRID=4326;POINT(5.367259 30.545084)'::geometry, ST_Transform('SRID=4326;POINT(5.367259 30.545084)'::geometry, 3857)), +(487, 'SRID=4326;POINT(5.368137 30.54498)'::geometry, ST_Transform('SRID=4326;POINT(5.368137 30.54498)'::geometry, 3857)), +(488, 'SRID=4326;POINT(5.367194 30.545244)'::geometry, ST_Transform('SRID=4326;POINT(5.367194 30.545244)'::geometry, 3857)), +(489, 'SRID=4326;POINT(5.367261 30.54535)'::geometry, ST_Transform('SRID=4326;POINT(5.367261 30.54535)'::geometry, 3857)), +(490, 'SRID=4326;POINT(5.367572 30.54492)'::geometry, ST_Transform('SRID=4326;POINT(5.367572 30.54492)'::geometry, 3857)), +(491, 'SRID=4326;POINT(5.367869 30.544706)'::geometry, ST_Transform('SRID=4326;POINT(5.367869 30.544706)'::geometry, 3857)), +(492, 'SRID=4326;POINT(5.368171 30.544438)'::geometry, ST_Transform('SRID=4326;POINT(5.368171 30.544438)'::geometry, 3857)), +(493, 'SRID=4326;POINT(5.367826 30.544732)'::geometry, ST_Transform('SRID=4326;POINT(5.367826 30.544732)'::geometry, 3857)), +(494, 'SRID=4326;POINT(5.367472 30.544565)'::geometry, ST_Transform('SRID=4326;POINT(5.367472 30.544565)'::geometry, 3857)), +(495, 'SRID=4326;POINT(5.367818 30.544714)'::geometry, ST_Transform('SRID=4326;POINT(5.367818 30.544714)'::geometry, 3857)), +(496, 'SRID=4326;POINT(5.367437 30.544804)'::geometry, ST_Transform('SRID=4326;POINT(5.367437 30.544804)'::geometry, 3857)), +(497, 'SRID=4326;POINT(3.578513 39.192891)'::geometry, ST_Transform('SRID=4326;POINT(3.578513 39.192891)'::geometry, 3857)), +(498, 'SRID=4326;POINT(3.578994 39.192304)'::geometry, ST_Transform('SRID=4326;POINT(3.578994 39.192304)'::geometry, 3857)), +(499, 'SRID=4326;POINT(3.578709 39.192954)'::geometry, ST_Transform('SRID=4326;POINT(3.578709 39.192954)'::geometry, 3857)), +(500, 'SRID=4326;POINT(3.5789 39.192329)'::geometry, ST_Transform('SRID=4326;POINT(3.5789 39.192329)'::geometry, 3857)), +(501, 'SRID=4326;POINT(3.57896 39.192534)'::geometry, ST_Transform('SRID=4326;POINT(3.57896 39.192534)'::geometry, 3857)), +(502, 'SRID=4326;POINT(3.578331 39.1927)'::geometry, ST_Transform('SRID=4326;POINT(3.578331 39.1927)'::geometry, 3857)), +(503, 'SRID=4326;POINT(6.467563 35.761929)'::geometry, ST_Transform('SRID=4326;POINT(6.467563 35.761929)'::geometry, 3857)), +(504, 'SRID=4326;POINT(6.467797 35.76232)'::geometry, ST_Transform('SRID=4326;POINT(6.467797 35.76232)'::geometry, 3857)), +(505, 'SRID=4326;POINT(6.468167 35.762407)'::geometry, ST_Transform('SRID=4326;POINT(6.468167 35.762407)'::geometry, 3857)), +(506, 'SRID=4326;POINT(6.467727 35.76243)'::geometry, ST_Transform('SRID=4326;POINT(6.467727 35.76243)'::geometry, 3857)), +(507, 'SRID=4326;POINT(6.467698 35.761842)'::geometry, ST_Transform('SRID=4326;POINT(6.467698 35.761842)'::geometry, 3857)), +(508, 'SRID=4326;POINT(6.468043 35.761548)'::geometry, ST_Transform('SRID=4326;POINT(6.468043 35.761548)'::geometry, 3857)), +(509, 'SRID=4326;POINT(6.467748 35.761895)'::geometry, ST_Transform('SRID=4326;POINT(6.467748 35.761895)'::geometry, 3857)), +(510, 'SRID=4326;POINT(-9.376008 37.66543)'::geometry, ST_Transform('SRID=4326;POINT(-9.376008 37.66543)'::geometry, 3857)), +(511, 'SRID=4326;POINT(-9.376352 37.665134)'::geometry, ST_Transform('SRID=4326;POINT(-9.376352 37.665134)'::geometry, 3857)), +(512, 'SRID=4326;POINT(-9.375792 37.665016)'::geometry, ST_Transform('SRID=4326;POINT(-9.375792 37.665016)'::geometry, 3857)), +(513, 'SRID=4326;POINT(-9.376451 37.664977)'::geometry, ST_Transform('SRID=4326;POINT(-9.376451 37.664977)'::geometry, 3857)), +(514, 'SRID=4326;POINT(-9.37563 37.664995)'::geometry, ST_Transform('SRID=4326;POINT(-9.37563 37.664995)'::geometry, 3857)), +(515, 'SRID=4326;POINT(-9.37582 37.665323)'::geometry, ST_Transform('SRID=4326;POINT(-9.37582 37.665323)'::geometry, 3857)), +(516, 'SRID=4326;POINT(-9.37587 37.665407)'::geometry, ST_Transform('SRID=4326;POINT(-9.37587 37.665407)'::geometry, 3857)), +(517, 'SRID=4326;POINT(-9.376338 37.665701)'::geometry, ST_Transform('SRID=4326;POINT(-9.376338 37.665701)'::geometry, 3857)), +(518, 'SRID=4326;POINT(-9.376514 37.665477)'::geometry, ST_Transform('SRID=4326;POINT(-9.376514 37.665477)'::geometry, 3857)), +(519, 'SRID=4326;POINT(-9.375748 37.66524)'::geometry, ST_Transform('SRID=4326;POINT(-9.375748 37.66524)'::geometry, 3857)), +(520, 'SRID=4326;POINT(1.260345 31.995092)'::geometry, ST_Transform('SRID=4326;POINT(1.260345 31.995092)'::geometry, 3857)), +(521, 'SRID=4326;POINT(1.259769 31.994365)'::geometry, ST_Transform('SRID=4326;POINT(1.259769 31.994365)'::geometry, 3857)), +(522, 'SRID=4326;POINT(1.259952 31.994605)'::geometry, ST_Transform('SRID=4326;POINT(1.259952 31.994605)'::geometry, 3857)), +(523, 'SRID=4326;POINT(1.26004 31.994175)'::geometry, ST_Transform('SRID=4326;POINT(1.26004 31.994175)'::geometry, 3857)), +(524, 'SRID=4326;POINT(1.260128 31.995111)'::geometry, ST_Transform('SRID=4326;POINT(1.260128 31.995111)'::geometry, 3857)), +(525, 'SRID=4326;POINT(1.259655 31.994736)'::geometry, ST_Transform('SRID=4326;POINT(1.259655 31.994736)'::geometry, 3857)), +(526, 'SRID=4326;POINT(1.259791 31.994912)'::geometry, ST_Transform('SRID=4326;POINT(1.259791 31.994912)'::geometry, 3857)), +(527, 'SRID=4326;POINT(1.260467 31.994231)'::geometry, ST_Transform('SRID=4326;POINT(1.260467 31.994231)'::geometry, 3857)), +(528, 'SRID=4326;POINT(1.25997 31.994557)'::geometry, ST_Transform('SRID=4326;POINT(1.25997 31.994557)'::geometry, 3857)), +(529, 'SRID=4326;POINT(1.260369 31.994511)'::geometry, ST_Transform('SRID=4326;POINT(1.260369 31.994511)'::geometry, 3857)), +(530, 'SRID=4326;POINT(1.259745 31.994475)'::geometry, ST_Transform('SRID=4326;POINT(1.259745 31.994475)'::geometry, 3857)), +(531, 'SRID=4326;POINT(1.259567 31.995074)'::geometry, ST_Transform('SRID=4326;POINT(1.259567 31.995074)'::geometry, 3857)), +(532, 'SRID=4326;POINT(1.260254 31.994468)'::geometry, ST_Transform('SRID=4326;POINT(1.260254 31.994468)'::geometry, 3857)), +(533, 'SRID=4326;POINT(1.259734 31.994586)'::geometry, ST_Transform('SRID=4326;POINT(1.259734 31.994586)'::geometry, 3857)), +(534, 'SRID=4326;POINT(1.260463 31.994721)'::geometry, ST_Transform('SRID=4326;POINT(1.260463 31.994721)'::geometry, 3857)), +(535, 'SRID=4326;POINT(2.729133 38.492349)'::geometry, ST_Transform('SRID=4326;POINT(2.729133 38.492349)'::geometry, 3857)), +(536, 'SRID=4326;POINT(-6.622615 33.402887)'::geometry, ST_Transform('SRID=4326;POINT(-6.622615 33.402887)'::geometry, 3857)), +(537, 'SRID=4326;POINT(-6.62201 33.40347)'::geometry, ST_Transform('SRID=4326;POINT(-6.62201 33.40347)'::geometry, 3857)), +(538, 'SRID=4326;POINT(-6.622602 33.403156)'::geometry, ST_Transform('SRID=4326;POINT(-6.622602 33.403156)'::geometry, 3857)), +(539, 'SRID=4326;POINT(-6.62229 33.403373)'::geometry, ST_Transform('SRID=4326;POINT(-6.62229 33.403373)'::geometry, 3857)), +(540, 'SRID=4326;POINT(-6.622021 33.403713)'::geometry, ST_Transform('SRID=4326;POINT(-6.622021 33.403713)'::geometry, 3857)), +(541, 'SRID=4326;POINT(-6.621709 33.403616)'::geometry, ST_Transform('SRID=4326;POINT(-6.621709 33.403616)'::geometry, 3857)), +(542, 'SRID=4326;POINT(-6.622664 33.403289)'::geometry, ST_Transform('SRID=4326;POINT(-6.622664 33.403289)'::geometry, 3857)), +(543, 'SRID=4326;POINT(-6.621894 33.403001)'::geometry, ST_Transform('SRID=4326;POINT(-6.621894 33.403001)'::geometry, 3857)), +(544, 'SRID=4326;POINT(-6.621753 33.403296)'::geometry, ST_Transform('SRID=4326;POINT(-6.621753 33.403296)'::geometry, 3857)), +(545, 'SRID=4326;POINT(-6.622631 33.403423)'::geometry, ST_Transform('SRID=4326;POINT(-6.622631 33.403423)'::geometry, 3857)), +(546, 'SRID=4326;POINT(-6.622649 33.402773)'::geometry, ST_Transform('SRID=4326;POINT(-6.622649 33.402773)'::geometry, 3857)), +(547, 'SRID=4326;POINT(-4.40069 32.83652)'::geometry, ST_Transform('SRID=4326;POINT(-4.40069 32.83652)'::geometry, 3857)), +(548, 'SRID=4326;POINT(-4.400915 32.835874)'::geometry, ST_Transform('SRID=4326;POINT(-4.400915 32.835874)'::geometry, 3857)), +(549, 'SRID=4326;POINT(-4.400611 32.836162)'::geometry, ST_Transform('SRID=4326;POINT(-4.400611 32.836162)'::geometry, 3857)), +(550, 'SRID=4326;POINT(-4.401156 32.836423)'::geometry, ST_Transform('SRID=4326;POINT(-4.401156 32.836423)'::geometry, 3857)), +(551, 'SRID=4326;POINT(-4.400751 32.836387)'::geometry, ST_Transform('SRID=4326;POINT(-4.400751 32.836387)'::geometry, 3857)), +(552, 'SRID=4326;POINT(-4.401099 32.836165)'::geometry, ST_Transform('SRID=4326;POINT(-4.401099 32.836165)'::geometry, 3857)), +(553, 'SRID=4326;POINT(-4.401483 32.836585)'::geometry, ST_Transform('SRID=4326;POINT(-4.401483 32.836585)'::geometry, 3857)), +(554, 'SRID=4326;POINT(-4.400596 32.836855)'::geometry, ST_Transform('SRID=4326;POINT(-4.400596 32.836855)'::geometry, 3857)), +(555, 'SRID=4326;POINT(-4.400921 32.836087)'::geometry, ST_Transform('SRID=4326;POINT(-4.400921 32.836087)'::geometry, 3857)), +(556, 'SRID=4326;POINT(-4.401047 32.836189)'::geometry, ST_Transform('SRID=4326;POINT(-4.401047 32.836189)'::geometry, 3857)), +(557, 'SRID=4326;POINT(-4.400684 32.836472)'::geometry, ST_Transform('SRID=4326;POINT(-4.400684 32.836472)'::geometry, 3857)), +(558, 'SRID=4326;POINT(4.492599 35.25261)'::geometry, ST_Transform('SRID=4326;POINT(4.492599 35.25261)'::geometry, 3857)), +(559, 'SRID=4326;POINT(4.492929 35.252912)'::geometry, ST_Transform('SRID=4326;POINT(4.492929 35.252912)'::geometry, 3857)), +(560, 'SRID=4326;POINT(4.49299 35.25299)'::geometry, ST_Transform('SRID=4326;POINT(4.49299 35.25299)'::geometry, 3857)), +(561, 'SRID=4326;POINT(-9.9593 31.93916)'::geometry, ST_Transform('SRID=4326;POINT(-9.9593 31.93916)'::geometry, 3857)), +(562, 'SRID=4326;POINT(-9.959219 31.939457)'::geometry, ST_Transform('SRID=4326;POINT(-9.959219 31.939457)'::geometry, 3857)), +(563, 'SRID=4326;POINT(-9.959225 31.938742)'::geometry, ST_Transform('SRID=4326;POINT(-9.959225 31.938742)'::geometry, 3857)), +(564, 'SRID=4326;POINT(-9.959793 31.939377)'::geometry, ST_Transform('SRID=4326;POINT(-9.959793 31.939377)'::geometry, 3857)), +(565, 'SRID=4326;POINT(-9.959077 31.9388)'::geometry, ST_Transform('SRID=4326;POINT(-9.959077 31.9388)'::geometry, 3857)), +(566, 'SRID=4326;POINT(-9.959222 31.93878)'::geometry, ST_Transform('SRID=4326;POINT(-9.959222 31.93878)'::geometry, 3857)), +(567, 'SRID=4326;POINT(-9.959156 31.939046)'::geometry, ST_Transform('SRID=4326;POINT(-9.959156 31.939046)'::geometry, 3857)), +(568, 'SRID=4326;POINT(-9.95889 31.938758)'::geometry, ST_Transform('SRID=4326;POINT(-9.95889 31.938758)'::geometry, 3857)), +(569, 'SRID=4326;POINT(-9.959658 31.939125)'::geometry, ST_Transform('SRID=4326;POINT(-9.959658 31.939125)'::geometry, 3857)), +(570, 'SRID=4326;POINT(-9.959243 31.939014)'::geometry, ST_Transform('SRID=4326;POINT(-9.959243 31.939014)'::geometry, 3857)), +(571, 'SRID=4326;POINT(-9.959627 31.939155)'::geometry, ST_Transform('SRID=4326;POINT(-9.959627 31.939155)'::geometry, 3857)), +(572, 'SRID=4326;POINT(-9.959284 31.938954)'::geometry, ST_Transform('SRID=4326;POINT(-9.959284 31.938954)'::geometry, 3857)), +(573, 'SRID=4326;POINT(-4.056215 35.879559)'::geometry, ST_Transform('SRID=4326;POINT(-4.056215 35.879559)'::geometry, 3857)), +(574, 'SRID=4326;POINT(9.407199 35.632402)'::geometry, ST_Transform('SRID=4326;POINT(9.407199 35.632402)'::geometry, 3857)), +(575, 'SRID=4326;POINT(9.407456 35.632353)'::geometry, ST_Transform('SRID=4326;POINT(9.407456 35.632353)'::geometry, 3857)), +(576, 'SRID=4326;POINT(9.407844 35.632295)'::geometry, ST_Transform('SRID=4326;POINT(9.407844 35.632295)'::geometry, 3857)), +(577, 'SRID=4326;POINT(9.40776 35.631777)'::geometry, ST_Transform('SRID=4326;POINT(9.40776 35.631777)'::geometry, 3857)), +(578, 'SRID=4326;POINT(2.231809 36.542849)'::geometry, ST_Transform('SRID=4326;POINT(2.231809 36.542849)'::geometry, 3857)), +(579, 'SRID=4326;POINT(2.232178 36.543185)'::geometry, ST_Transform('SRID=4326;POINT(2.232178 36.543185)'::geometry, 3857)), +(580, 'SRID=4326;POINT(2.232212 36.542512)'::geometry, ST_Transform('SRID=4326;POINT(2.232212 36.542512)'::geometry, 3857)), +(581, 'SRID=4326;POINT(2.232029 36.543168)'::geometry, ST_Transform('SRID=4326;POINT(2.232029 36.543168)'::geometry, 3857)), +(582, 'SRID=4326;POINT(2.231443 36.542672)'::geometry, ST_Transform('SRID=4326;POINT(2.231443 36.542672)'::geometry, 3857)), +(583, 'SRID=4326;POINT(2.231272 36.543057)'::geometry, ST_Transform('SRID=4326;POINT(2.231272 36.543057)'::geometry, 3857)), +(584, 'SRID=4326;POINT(2.231296 36.542955)'::geometry, ST_Transform('SRID=4326;POINT(2.231296 36.542955)'::geometry, 3857)), +(585, 'SRID=4326;POINT(2.231748 36.543061)'::geometry, ST_Transform('SRID=4326;POINT(2.231748 36.543061)'::geometry, 3857)), +(586, 'SRID=4326;POINT(2.232033 36.542659)'::geometry, ST_Transform('SRID=4326;POINT(2.232033 36.542659)'::geometry, 3857)), +(587, 'SRID=4326;POINT(2.23203 36.542826)'::geometry, ST_Transform('SRID=4326;POINT(2.23203 36.542826)'::geometry, 3857)), +(588, 'SRID=4326;POINT(2.232181 36.542546)'::geometry, ST_Transform('SRID=4326;POINT(2.232181 36.542546)'::geometry, 3857)), +(589, 'SRID=4326;POINT(2.232023 36.543425)'::geometry, ST_Transform('SRID=4326;POINT(2.232023 36.543425)'::geometry, 3857)), +(590, 'SRID=4326;POINT(0.948501 32.875271)'::geometry, ST_Transform('SRID=4326;POINT(0.948501 32.875271)'::geometry, 3857)), +(591, 'SRID=4326;POINT(0.9481 32.874688)'::geometry, ST_Transform('SRID=4326;POINT(0.9481 32.874688)'::geometry, 3857)), +(592, 'SRID=4326;POINT(0.948466 32.875415)'::geometry, ST_Transform('SRID=4326;POINT(0.948466 32.875415)'::geometry, 3857)), +(593, 'SRID=4326;POINT(0.947954 32.874821)'::geometry, ST_Transform('SRID=4326;POINT(0.947954 32.874821)'::geometry, 3857)), +(594, 'SRID=4326;POINT(0.947609 32.875461)'::geometry, ST_Transform('SRID=4326;POINT(0.947609 32.875461)'::geometry, 3857)), +(595, 'SRID=4326;POINT(0.948057 32.875049)'::geometry, ST_Transform('SRID=4326;POINT(0.948057 32.875049)'::geometry, 3857)), +(596, 'SRID=4326;POINT(0.94801 32.874707)'::geometry, ST_Transform('SRID=4326;POINT(0.94801 32.874707)'::geometry, 3857)), +(597, 'SRID=4326;POINT(0.947579 32.875047)'::geometry, ST_Transform('SRID=4326;POINT(0.947579 32.875047)'::geometry, 3857)), +(598, 'SRID=4326;POINT(0.948398 32.875394)'::geometry, ST_Transform('SRID=4326;POINT(0.948398 32.875394)'::geometry, 3857)), +(599, 'SRID=4326;POINT(0.948466 32.875444)'::geometry, ST_Transform('SRID=4326;POINT(0.948466 32.875444)'::geometry, 3857)), +(600, 'SRID=4326;POINT(0.94785 32.875375)'::geometry, ST_Transform('SRID=4326;POINT(0.94785 32.875375)'::geometry, 3857)), +(601, 'SRID=4326;POINT(0.948108 32.875197)'::geometry, ST_Transform('SRID=4326;POINT(0.948108 32.875197)'::geometry, 3857)), +(602, 'SRID=4326;POINT(0.948288 32.875307)'::geometry, ST_Transform('SRID=4326;POINT(0.948288 32.875307)'::geometry, 3857)), +(603, 'SRID=4326;POINT(0.948283 32.874956)'::geometry, ST_Transform('SRID=4326;POINT(0.948283 32.874956)'::geometry, 3857)), +(604, 'SRID=4326;POINT(0.948033 32.874929)'::geometry, ST_Transform('SRID=4326;POINT(0.948033 32.874929)'::geometry, 3857)), +(605, 'SRID=4326;POINT(0.948309 32.874623)'::geometry, ST_Transform('SRID=4326;POINT(0.948309 32.874623)'::geometry, 3857)), +(606, 'SRID=4326;POINT(-1.377445 36.13206)'::geometry, ST_Transform('SRID=4326;POINT(-1.377445 36.13206)'::geometry, 3857)), +(607, 'SRID=4326;POINT(-1.377573 36.132389)'::geometry, ST_Transform('SRID=4326;POINT(-1.377573 36.132389)'::geometry, 3857)), +(608, 'SRID=4326;POINT(-1.377342 36.132377)'::geometry, ST_Transform('SRID=4326;POINT(-1.377342 36.132377)'::geometry, 3857)), +(609, 'SRID=4326;POINT(-1.378103 36.131979)'::geometry, ST_Transform('SRID=4326;POINT(-1.378103 36.131979)'::geometry, 3857)), +(610, 'SRID=4326;POINT(-1.37759 36.132034)'::geometry, ST_Transform('SRID=4326;POINT(-1.37759 36.132034)'::geometry, 3857)), +(611, 'SRID=4326;POINT(-1.377544 36.13201)'::geometry, ST_Transform('SRID=4326;POINT(-1.377544 36.13201)'::geometry, 3857)), +(612, 'SRID=4326;POINT(-1.377877 36.132664)'::geometry, ST_Transform('SRID=4326;POINT(-1.377877 36.132664)'::geometry, 3857)), +(613, 'SRID=4326;POINT(-1.377243 36.1327)'::geometry, ST_Transform('SRID=4326;POINT(-1.377243 36.1327)'::geometry, 3857)), +(614, 'SRID=4326;POINT(-1.377821 36.132226)'::geometry, ST_Transform('SRID=4326;POINT(-1.377821 36.132226)'::geometry, 3857)), +(615, 'SRID=4326;POINT(-1.377819 36.131905)'::geometry, ST_Transform('SRID=4326;POINT(-1.377819 36.131905)'::geometry, 3857)), +(616, 'SRID=4326;POINT(-1.377647 36.132385)'::geometry, ST_Transform('SRID=4326;POINT(-1.377647 36.132385)'::geometry, 3857)), +(617, 'SRID=4326;POINT(-1.378114 36.132113)'::geometry, ST_Transform('SRID=4326;POINT(-1.378114 36.132113)'::geometry, 3857)), +(618, 'SRID=4326;POINT(1.281128 38.138626)'::geometry, ST_Transform('SRID=4326;POINT(1.281128 38.138626)'::geometry, 3857)), +(619, 'SRID=4326;POINT(1.281305 38.138959)'::geometry, ST_Transform('SRID=4326;POINT(1.281305 38.138959)'::geometry, 3857)), +(620, 'SRID=4326;POINT(1.281758 38.138407)'::geometry, ST_Transform('SRID=4326;POINT(1.281758 38.138407)'::geometry, 3857)), +(621, 'SRID=4326;POINT(1.281123 38.138734)'::geometry, ST_Transform('SRID=4326;POINT(1.281123 38.138734)'::geometry, 3857)), +(622, 'SRID=4326;POINT(1.281161 38.138177)'::geometry, ST_Transform('SRID=4326;POINT(1.281161 38.138177)'::geometry, 3857)), +(623, 'SRID=4326;POINT(1.281354 38.138617)'::geometry, ST_Transform('SRID=4326;POINT(1.281354 38.138617)'::geometry, 3857)), +(624, 'SRID=4326;POINT(1.281123 38.138171)'::geometry, ST_Transform('SRID=4326;POINT(1.281123 38.138171)'::geometry, 3857)), +(625, 'SRID=4326;POINT(1.001776 36.920915)'::geometry, ST_Transform('SRID=4326;POINT(1.001776 36.920915)'::geometry, 3857)), +(626, 'SRID=4326;POINT(1.001429 36.921273)'::geometry, ST_Transform('SRID=4326;POINT(1.001429 36.921273)'::geometry, 3857)), +(627, 'SRID=4326;POINT(1.001985 36.921254)'::geometry, ST_Transform('SRID=4326;POINT(1.001985 36.921254)'::geometry, 3857)), +(628, 'SRID=4326;POINT(1.001384 36.92111)'::geometry, ST_Transform('SRID=4326;POINT(1.001384 36.92111)'::geometry, 3857)), +(629, 'SRID=4326;POINT(1.001699 36.920728)'::geometry, ST_Transform('SRID=4326;POINT(1.001699 36.920728)'::geometry, 3857)), +(630, 'SRID=4326;POINT(1.002016 36.920362)'::geometry, ST_Transform('SRID=4326;POINT(1.002016 36.920362)'::geometry, 3857)), +(631, 'SRID=4326;POINT(1.001573 36.921188)'::geometry, ST_Transform('SRID=4326;POINT(1.001573 36.921188)'::geometry, 3857)), +(632, 'SRID=4326;POINT(1.00177 36.920421)'::geometry, ST_Transform('SRID=4326;POINT(1.00177 36.920421)'::geometry, 3857)), +(633, 'SRID=4326;POINT(1.001975 36.920794)'::geometry, ST_Transform('SRID=4326;POINT(1.001975 36.920794)'::geometry, 3857)), +(634, 'SRID=4326;POINT(1.001852 36.920518)'::geometry, ST_Transform('SRID=4326;POINT(1.001852 36.920518)'::geometry, 3857)), +(635, 'SRID=4326;POINT(1.001596 36.920567)'::geometry, ST_Transform('SRID=4326;POINT(1.001596 36.920567)'::geometry, 3857)), +(636, 'SRID=4326;POINT(1.002041 36.921094)'::geometry, ST_Transform('SRID=4326;POINT(1.002041 36.921094)'::geometry, 3857)), +(637, 'SRID=4326;POINT(1.00193 36.92129)'::geometry, ST_Transform('SRID=4326;POINT(1.00193 36.92129)'::geometry, 3857)), +(638, 'SRID=4326;POINT(1.001253 36.920578)'::geometry, ST_Transform('SRID=4326;POINT(1.001253 36.920578)'::geometry, 3857)), +(639, 'SRID=4326;POINT(1.001296 36.920603)'::geometry, ST_Transform('SRID=4326;POINT(1.001296 36.920603)'::geometry, 3857)), +(640, 'SRID=4326;POINT(1.001743 36.921216)'::geometry, ST_Transform('SRID=4326;POINT(1.001743 36.921216)'::geometry, 3857)), +(641, 'SRID=4326;POINT(-9.439246 39.930375)'::geometry, ST_Transform('SRID=4326;POINT(-9.439246 39.930375)'::geometry, 3857)), +(642, 'SRID=4326;POINT(-9.439831 39.93007)'::geometry, ST_Transform('SRID=4326;POINT(-9.439831 39.93007)'::geometry, 3857)), +(643, 'SRID=4326;POINT(-9.439794 39.930747)'::geometry, ST_Transform('SRID=4326;POINT(-9.439794 39.930747)'::geometry, 3857)), +(644, 'SRID=4326;POINT(7.051979 39.998654)'::geometry, ST_Transform('SRID=4326;POINT(7.051979 39.998654)'::geometry, 3857)), +(645, 'SRID=4326;POINT(7.052303 39.998459)'::geometry, ST_Transform('SRID=4326;POINT(7.052303 39.998459)'::geometry, 3857)), +(646, 'SRID=4326;POINT(7.051495 39.998286)'::geometry, ST_Transform('SRID=4326;POINT(7.051495 39.998286)'::geometry, 3857)), +(647, 'SRID=4326;POINT(7.052358 39.998959)'::geometry, ST_Transform('SRID=4326;POINT(7.052358 39.998959)'::geometry, 3857)), +(648, 'SRID=4326;POINT(7.051902 39.998646)'::geometry, ST_Transform('SRID=4326;POINT(7.051902 39.998646)'::geometry, 3857)), +(649, 'SRID=4326;POINT(7.051961 39.998936)'::geometry, ST_Transform('SRID=4326;POINT(7.051961 39.998936)'::geometry, 3857)), +(650, 'SRID=4326;POINT(7.052188 39.998715)'::geometry, ST_Transform('SRID=4326;POINT(7.052188 39.998715)'::geometry, 3857)), +(651, 'SRID=4326;POINT(7.051928 39.999019)'::geometry, ST_Transform('SRID=4326;POINT(7.051928 39.999019)'::geometry, 3857)), +(652, 'SRID=4326;POINT(7.051679 39.999193)'::geometry, ST_Transform('SRID=4326;POINT(7.051679 39.999193)'::geometry, 3857)), +(653, 'SRID=4326;POINT(7.052355 39.998444)'::geometry, ST_Transform('SRID=4326;POINT(7.052355 39.998444)'::geometry, 3857)), +(654, 'SRID=4326;POINT(7.052312 39.998467)'::geometry, ST_Transform('SRID=4326;POINT(7.052312 39.998467)'::geometry, 3857)), +(655, 'SRID=4326;POINT(3.946722 30.978786)'::geometry, ST_Transform('SRID=4326;POINT(3.946722 30.978786)'::geometry, 3857)), +(656, 'SRID=4326;POINT(3.946383 30.979446)'::geometry, ST_Transform('SRID=4326;POINT(3.946383 30.979446)'::geometry, 3857)), +(657, 'SRID=4326;POINT(3.946577 30.978671)'::geometry, ST_Transform('SRID=4326;POINT(3.946577 30.978671)'::geometry, 3857)), +(658, 'SRID=4326;POINT(3.946805 30.979383)'::geometry, ST_Transform('SRID=4326;POINT(3.946805 30.979383)'::geometry, 3857)), +(659, 'SRID=4326;POINT(4.739725 32.536293)'::geometry, ST_Transform('SRID=4326;POINT(4.739725 32.536293)'::geometry, 3857)), +(660, 'SRID=4326;POINT(4.739867 32.5367)'::geometry, ST_Transform('SRID=4326;POINT(4.739867 32.5367)'::geometry, 3857)), +(661, 'SRID=4326;POINT(4.739999 32.536189)'::geometry, ST_Transform('SRID=4326;POINT(4.739999 32.536189)'::geometry, 3857)), +(662, 'SRID=4326;POINT(4.739876 32.536571)'::geometry, ST_Transform('SRID=4326;POINT(4.739876 32.536571)'::geometry, 3857)), +(663, 'SRID=4326;POINT(4.739204 32.536119)'::geometry, ST_Transform('SRID=4326;POINT(4.739204 32.536119)'::geometry, 3857)), +(664, 'SRID=4326;POINT(4.739705 32.53637)'::geometry, ST_Transform('SRID=4326;POINT(4.739705 32.53637)'::geometry, 3857)), +(665, 'SRID=4326;POINT(4.739147 32.536027)'::geometry, ST_Transform('SRID=4326;POINT(4.739147 32.536027)'::geometry, 3857)), +(666, 'SRID=4326;POINT(4.739809 32.535831)'::geometry, ST_Transform('SRID=4326;POINT(4.739809 32.535831)'::geometry, 3857)), +(667, 'SRID=4326;POINT(4.739446 32.535993)'::geometry, ST_Transform('SRID=4326;POINT(4.739446 32.535993)'::geometry, 3857)), +(668, 'SRID=4326;POINT(4.739356 32.536354)'::geometry, ST_Transform('SRID=4326;POINT(4.739356 32.536354)'::geometry, 3857)), +(669, 'SRID=4326;POINT(4.73949 32.536547)'::geometry, ST_Transform('SRID=4326;POINT(4.73949 32.536547)'::geometry, 3857)), +(670, 'SRID=4326;POINT(4.739345 32.536142)'::geometry, ST_Transform('SRID=4326;POINT(4.739345 32.536142)'::geometry, 3857)), +(671, 'SRID=4326;POINT(4.73992 32.536513)'::geometry, ST_Transform('SRID=4326;POINT(4.73992 32.536513)'::geometry, 3857)), +(672, 'SRID=4326;POINT(4.739484 32.536518)'::geometry, ST_Transform('SRID=4326;POINT(4.739484 32.536518)'::geometry, 3857)), +(673, 'SRID=4326;POINT(4.739594 32.535765)'::geometry, ST_Transform('SRID=4326;POINT(4.739594 32.535765)'::geometry, 3857)), +(674, 'SRID=4326;POINT(-1.897518 32.955127)'::geometry, ST_Transform('SRID=4326;POINT(-1.897518 32.955127)'::geometry, 3857)), +(675, 'SRID=4326;POINT(-1.897857 32.955143)'::geometry, ST_Transform('SRID=4326;POINT(-1.897857 32.955143)'::geometry, 3857)), +(676, 'SRID=4326;POINT(-1.897766 32.954686)'::geometry, ST_Transform('SRID=4326;POINT(-1.897766 32.954686)'::geometry, 3857)), +(677, 'SRID=4326;POINT(6.858485 32.878875)'::geometry, ST_Transform('SRID=4326;POINT(6.858485 32.878875)'::geometry, 3857)), +(678, 'SRID=4326;POINT(6.858625 32.879165)'::geometry, ST_Transform('SRID=4326;POINT(6.858625 32.879165)'::geometry, 3857)), +(679, 'SRID=4326;POINT(6.859173 32.879623)'::geometry, ST_Transform('SRID=4326;POINT(6.859173 32.879623)'::geometry, 3857)), +(680, 'SRID=4326;POINT(6.858652 32.879073)'::geometry, ST_Transform('SRID=4326;POINT(6.858652 32.879073)'::geometry, 3857)), +(681, 'SRID=4326;POINT(6.858875 32.879512)'::geometry, ST_Transform('SRID=4326;POINT(6.858875 32.879512)'::geometry, 3857)), +(682, 'SRID=4326;POINT(2.489402 36.24209)'::geometry, ST_Transform('SRID=4326;POINT(2.489402 36.24209)'::geometry, 3857)), +(683, 'SRID=4326;POINT(2.490019 36.242308)'::geometry, ST_Transform('SRID=4326;POINT(2.490019 36.242308)'::geometry, 3857)), +(684, 'SRID=4326;POINT(2.490157 36.242104)'::geometry, ST_Transform('SRID=4326;POINT(2.490157 36.242104)'::geometry, 3857)), +(685, 'SRID=4326;POINT(2.48969 36.242247)'::geometry, ST_Transform('SRID=4326;POINT(2.48969 36.242247)'::geometry, 3857)), +(686, 'SRID=4326;POINT(2.489518 36.242617)'::geometry, ST_Transform('SRID=4326;POINT(2.489518 36.242617)'::geometry, 3857)), +(687, 'SRID=4326;POINT(2.490287 36.242602)'::geometry, ST_Transform('SRID=4326;POINT(2.490287 36.242602)'::geometry, 3857)), +(688, 'SRID=4326;POINT(2.490008 36.242113)'::geometry, ST_Transform('SRID=4326;POINT(2.490008 36.242113)'::geometry, 3857)), +(689, 'SRID=4326;POINT(2.489767 36.242141)'::geometry, ST_Transform('SRID=4326;POINT(2.489767 36.242141)'::geometry, 3857)), +(690, 'SRID=4326;POINT(2.490068 36.24219)'::geometry, ST_Transform('SRID=4326;POINT(2.490068 36.24219)'::geometry, 3857)), +(691, 'SRID=4326;POINT(2.489361 36.242592)'::geometry, ST_Transform('SRID=4326;POINT(2.489361 36.242592)'::geometry, 3857)), +(692, 'SRID=4326;POINT(4.675157 34.745728)'::geometry, ST_Transform('SRID=4326;POINT(4.675157 34.745728)'::geometry, 3857)), +(693, 'SRID=4326;POINT(4.675288 34.745268)'::geometry, ST_Transform('SRID=4326;POINT(4.675288 34.745268)'::geometry, 3857)), +(694, 'SRID=4326;POINT(4.67474 34.745439)'::geometry, ST_Transform('SRID=4326;POINT(4.67474 34.745439)'::geometry, 3857)), +(695, 'SRID=4326;POINT(-1.619779 36.505134)'::geometry, ST_Transform('SRID=4326;POINT(-1.619779 36.505134)'::geometry, 3857)), +(696, 'SRID=4326;POINT(-1.619178 36.504973)'::geometry, ST_Transform('SRID=4326;POINT(-1.619178 36.504973)'::geometry, 3857)), +(697, 'SRID=4326;POINT(1.443654 35.03996)'::geometry, ST_Transform('SRID=4326;POINT(1.443654 35.03996)'::geometry, 3857)), +(698, 'SRID=4326;POINT(1.443555 35.040102)'::geometry, ST_Transform('SRID=4326;POINT(1.443555 35.040102)'::geometry, 3857)), +(699, 'SRID=4326;POINT(1.444439 35.040191)'::geometry, ST_Transform('SRID=4326;POINT(1.444439 35.040191)'::geometry, 3857)), +(700, 'SRID=4326;POINT(1.443705 35.040334)'::geometry, ST_Transform('SRID=4326;POINT(1.443705 35.040334)'::geometry, 3857)), +(701, 'SRID=4326;POINT(1.444309 35.040845)'::geometry, ST_Transform('SRID=4326;POINT(1.444309 35.040845)'::geometry, 3857)), +(702, 'SRID=4326;POINT(1.444155 35.040343)'::geometry, ST_Transform('SRID=4326;POINT(1.444155 35.040343)'::geometry, 3857)), +(703, 'SRID=4326;POINT(1.443996 35.040538)'::geometry, ST_Transform('SRID=4326;POINT(1.443996 35.040538)'::geometry, 3857)), +(704, 'SRID=4326;POINT(1.443617 35.040449)'::geometry, ST_Transform('SRID=4326;POINT(1.443617 35.040449)'::geometry, 3857)), +(705, 'SRID=4326;POINT(1.443732 35.040449)'::geometry, ST_Transform('SRID=4326;POINT(1.443732 35.040449)'::geometry, 3857)), +(706, 'SRID=4326;POINT(1.510391 37.025753)'::geometry, ST_Transform('SRID=4326;POINT(1.510391 37.025753)'::geometry, 3857)), +(707, 'SRID=4326;POINT(1.510774 37.025573)'::geometry, ST_Transform('SRID=4326;POINT(1.510774 37.025573)'::geometry, 3857)), +(708, 'SRID=4326;POINT(-1.068005 30.909683)'::geometry, ST_Transform('SRID=4326;POINT(-1.068005 30.909683)'::geometry, 3857)), +(709, 'SRID=4326;POINT(-1.067915 30.910178)'::geometry, ST_Transform('SRID=4326;POINT(-1.067915 30.910178)'::geometry, 3857)), +(710, 'SRID=4326;POINT(-1.067998 30.909856)'::geometry, ST_Transform('SRID=4326;POINT(-1.067998 30.909856)'::geometry, 3857)), +(711, 'SRID=4326;POINT(-1.067593 30.910177)'::geometry, ST_Transform('SRID=4326;POINT(-1.067593 30.910177)'::geometry, 3857)), +(712, 'SRID=4326;POINT(-1.068124 30.909608)'::geometry, ST_Transform('SRID=4326;POINT(-1.068124 30.909608)'::geometry, 3857)), +(713, 'SRID=4326;POINT(-1.067982 30.909937)'::geometry, ST_Transform('SRID=4326;POINT(-1.067982 30.909937)'::geometry, 3857)), +(714, 'SRID=4326;POINT(-1.068222 30.909692)'::geometry, ST_Transform('SRID=4326;POINT(-1.068222 30.909692)'::geometry, 3857)), +(715, 'SRID=4326;POINT(-1.067383 30.909904)'::geometry, ST_Transform('SRID=4326;POINT(-1.067383 30.909904)'::geometry, 3857)), +(716, 'SRID=4326;POINT(-1.067335 30.91012)'::geometry, ST_Transform('SRID=4326;POINT(-1.067335 30.91012)'::geometry, 3857)), +(717, 'SRID=4326;POINT(-1.06821 30.909356)'::geometry, ST_Transform('SRID=4326;POINT(-1.06821 30.909356)'::geometry, 3857)), +(718, 'SRID=4326;POINT(-1.067598 30.909364)'::geometry, ST_Transform('SRID=4326;POINT(-1.067598 30.909364)'::geometry, 3857)), +(719, 'SRID=4326;POINT(-1.067629 30.909687)'::geometry, ST_Transform('SRID=4326;POINT(-1.067629 30.909687)'::geometry, 3857)), +(720, 'SRID=4326;POINT(-1.068031 30.90956)'::geometry, ST_Transform('SRID=4326;POINT(-1.068031 30.90956)'::geometry, 3857)), +(721, 'SRID=4326;POINT(-1.067461 30.909412)'::geometry, ST_Transform('SRID=4326;POINT(-1.067461 30.909412)'::geometry, 3857)), +(722, 'SRID=4326;POINT(-4.441301 35.734339)'::geometry, ST_Transform('SRID=4326;POINT(-4.441301 35.734339)'::geometry, 3857)), +(723, 'SRID=4326;POINT(-4.441614 35.734596)'::geometry, ST_Transform('SRID=4326;POINT(-4.441614 35.734596)'::geometry, 3857)), +(724, 'SRID=4326;POINT(-4.441374 35.734511)'::geometry, ST_Transform('SRID=4326;POINT(-4.441374 35.734511)'::geometry, 3857)), +(725, 'SRID=4326;POINT(-4.442144 35.733728)'::geometry, ST_Transform('SRID=4326;POINT(-4.442144 35.733728)'::geometry, 3857)), +(726, 'SRID=4326;POINT(-4.442129 35.733779)'::geometry, ST_Transform('SRID=4326;POINT(-4.442129 35.733779)'::geometry, 3857)), +(727, 'SRID=4326;POINT(-4.442129 35.7343)'::geometry, ST_Transform('SRID=4326;POINT(-4.442129 35.7343)'::geometry, 3857)), +(728, 'SRID=4326;POINT(-4.441357 35.734573)'::geometry, ST_Transform('SRID=4326;POINT(-4.441357 35.734573)'::geometry, 3857)), +(729, 'SRID=4326;POINT(-4.441611 35.734042)'::geometry, ST_Transform('SRID=4326;POINT(-4.441611 35.734042)'::geometry, 3857)), +(730, 'SRID=4326;POINT(-4.442273 35.734478)'::geometry, ST_Transform('SRID=4326;POINT(-4.442273 35.734478)'::geometry, 3857)), +(731, 'SRID=4326;POINT(3.777839 39.080855)'::geometry, ST_Transform('SRID=4326;POINT(3.777839 39.080855)'::geometry, 3857)), +(732, 'SRID=4326;POINT(3.778302 39.081637)'::geometry, ST_Transform('SRID=4326;POINT(3.778302 39.081637)'::geometry, 3857)), +(733, 'SRID=4326;POINT(3.778134 39.081327)'::geometry, ST_Transform('SRID=4326;POINT(3.778134 39.081327)'::geometry, 3857)), +(734, 'SRID=4326;POINT(3.77753 39.080837)'::geometry, ST_Transform('SRID=4326;POINT(3.77753 39.080837)'::geometry, 3857)), +(735, 'SRID=4326;POINT(3.777524 39.08106)'::geometry, ST_Transform('SRID=4326;POINT(3.777524 39.08106)'::geometry, 3857)), +(736, 'SRID=4326;POINT(3.778196 39.081177)'::geometry, ST_Transform('SRID=4326;POINT(3.778196 39.081177)'::geometry, 3857)), +(737, 'SRID=4326;POINT(3.777824 39.081648)'::geometry, ST_Transform('SRID=4326;POINT(3.777824 39.081648)'::geometry, 3857)), +(738, 'SRID=4326;POINT(3.778294 39.081016)'::geometry, ST_Transform('SRID=4326;POINT(3.778294 39.081016)'::geometry, 3857)), +(739, 'SRID=4326;POINT(3.778384 39.080821)'::geometry, ST_Transform('SRID=4326;POINT(3.778384 39.080821)'::geometry, 3857)), +(740, 'SRID=4326;POINT(3.77832 39.081738)'::geometry, ST_Transform('SRID=4326;POINT(3.77832 39.081738)'::geometry, 3857)), +(741, 'SRID=4326;POINT(3.77775 39.081581)'::geometry, ST_Transform('SRID=4326;POINT(3.77775 39.081581)'::geometry, 3857)), +(742, 'SRID=4326;POINT(3.777606 39.080794)'::geometry, ST_Transform('SRID=4326;POINT(3.777606 39.080794)'::geometry, 3857)), +(743, 'SRID=4326;POINT(3.777891 39.081417)'::geometry, ST_Transform('SRID=4326;POINT(3.777891 39.081417)'::geometry, 3857)), +(744, 'SRID=4326;POINT(5.649526 31.865244)'::geometry, ST_Transform('SRID=4326;POINT(5.649526 31.865244)'::geometry, 3857)), +(745, 'SRID=4326;POINT(5.649871 31.865085)'::geometry, ST_Transform('SRID=4326;POINT(5.649871 31.865085)'::geometry, 3857)), +(746, 'SRID=4326;POINT(5.649532 31.86498)'::geometry, ST_Transform('SRID=4326;POINT(5.649532 31.86498)'::geometry, 3857)), +(747, 'SRID=4326;POINT(5.650394 31.864659)'::geometry, ST_Transform('SRID=4326;POINT(5.650394 31.864659)'::geometry, 3857)), +(748, 'SRID=4326;POINT(5.650448 31.865148)'::geometry, ST_Transform('SRID=4326;POINT(5.650448 31.865148)'::geometry, 3857)), +(749, 'SRID=4326;POINT(5.649964 31.865283)'::geometry, ST_Transform('SRID=4326;POINT(5.649964 31.865283)'::geometry, 3857)), +(750, 'SRID=4326;POINT(5.650139 31.865148)'::geometry, ST_Transform('SRID=4326;POINT(5.650139 31.865148)'::geometry, 3857)), +(751, 'SRID=4326;POINT(5.650438 31.865057)'::geometry, ST_Transform('SRID=4326;POINT(5.650438 31.865057)'::geometry, 3857)), +(752, 'SRID=4326;POINT(5.649977 31.86457)'::geometry, ST_Transform('SRID=4326;POINT(5.649977 31.86457)'::geometry, 3857)), +(753, 'SRID=4326;POINT(5.649628 31.864566)'::geometry, ST_Transform('SRID=4326;POINT(5.649628 31.864566)'::geometry, 3857)), +(754, 'SRID=4326;POINT(-9.754618 33.438008)'::geometry, ST_Transform('SRID=4326;POINT(-9.754618 33.438008)'::geometry, 3857)), +(755, 'SRID=4326;POINT(-9.75386 33.437609)'::geometry, ST_Transform('SRID=4326;POINT(-9.75386 33.437609)'::geometry, 3857)), +(756, 'SRID=4326;POINT(-9.754443 33.437308)'::geometry, ST_Transform('SRID=4326;POINT(-9.754443 33.437308)'::geometry, 3857)), +(757, 'SRID=4326;POINT(-9.75421 33.437932)'::geometry, ST_Transform('SRID=4326;POINT(-9.75421 33.437932)'::geometry, 3857)), +(758, 'SRID=4326;POINT(-9.753773 33.437663)'::geometry, ST_Transform('SRID=4326;POINT(-9.753773 33.437663)'::geometry, 3857)), +(759, 'SRID=4326;POINT(-9.754267 33.437916)'::geometry, ST_Transform('SRID=4326;POINT(-9.754267 33.437916)'::geometry, 3857)), +(760, 'SRID=4326;POINT(-9.754199 33.437889)'::geometry, ST_Transform('SRID=4326;POINT(-9.754199 33.437889)'::geometry, 3857)), +(761, 'SRID=4326;POINT(-9.75385 33.437159)'::geometry, ST_Transform('SRID=4326;POINT(-9.75385 33.437159)'::geometry, 3857)), +(762, 'SRID=4326;POINT(-3.543263 37.732976)'::geometry, ST_Transform('SRID=4326;POINT(-3.543263 37.732976)'::geometry, 3857)), +(763, 'SRID=4326;POINT(-3.542739 37.73271)'::geometry, ST_Transform('SRID=4326;POINT(-3.542739 37.73271)'::geometry, 3857)), +(764, 'SRID=4326;POINT(-3.54322 37.733139)'::geometry, ST_Transform('SRID=4326;POINT(-3.54322 37.733139)'::geometry, 3857)), +(765, 'SRID=4326;POINT(-3.54322 37.732576)'::geometry, ST_Transform('SRID=4326;POINT(-3.54322 37.732576)'::geometry, 3857)), +(766, 'SRID=4326;POINT(-3.543006 37.732667)'::geometry, ST_Transform('SRID=4326;POINT(-3.543006 37.732667)'::geometry, 3857)), +(767, 'SRID=4326;POINT(-8.711766 37.59638)'::geometry, ST_Transform('SRID=4326;POINT(-8.711766 37.59638)'::geometry, 3857)), +(768, 'SRID=4326;POINT(-8.711754 37.596229)'::geometry, ST_Transform('SRID=4326;POINT(-8.711754 37.596229)'::geometry, 3857)), +(769, 'SRID=4326;POINT(-8.711602 37.596288)'::geometry, ST_Transform('SRID=4326;POINT(-8.711602 37.596288)'::geometry, 3857)), +(770, 'SRID=4326;POINT(-8.712524 37.59617)'::geometry, ST_Transform('SRID=4326;POINT(-8.712524 37.59617)'::geometry, 3857)), +(771, 'SRID=4326;POINT(-8.712334 37.596219)'::geometry, ST_Transform('SRID=4326;POINT(-8.712334 37.596219)'::geometry, 3857)), +(772, 'SRID=4326;POINT(-8.71181 37.596124)'::geometry, ST_Transform('SRID=4326;POINT(-8.71181 37.596124)'::geometry, 3857)), +(773, 'SRID=4326;POINT(-8.712069 37.596608)'::geometry, ST_Transform('SRID=4326;POINT(-8.712069 37.596608)'::geometry, 3857)), +(774, 'SRID=4326;POINT(-8.711985 37.596911)'::geometry, ST_Transform('SRID=4326;POINT(-8.711985 37.596911)'::geometry, 3857)), +(775, 'SRID=4326;POINT(-3.044214 35.702146)'::geometry, ST_Transform('SRID=4326;POINT(-3.044214 35.702146)'::geometry, 3857)), +(776, 'SRID=4326;POINT(-3.044209 35.702853)'::geometry, ST_Transform('SRID=4326;POINT(-3.044209 35.702853)'::geometry, 3857)), +(777, 'SRID=4326;POINT(-3.044276 35.703038)'::geometry, ST_Transform('SRID=4326;POINT(-3.044276 35.703038)'::geometry, 3857)), +(778, 'SRID=4326;POINT(-3.043811 35.702228)'::geometry, ST_Transform('SRID=4326;POINT(-3.043811 35.702228)'::geometry, 3857)), +(779, 'SRID=4326;POINT(-3.043957 35.702876)'::geometry, ST_Transform('SRID=4326;POINT(-3.043957 35.702876)'::geometry, 3857)), +(780, 'SRID=4326;POINT(-3.044306 35.70211)'::geometry, ST_Transform('SRID=4326;POINT(-3.044306 35.70211)'::geometry, 3857)), +(781, 'SRID=4326;POINT(-3.044272 35.702647)'::geometry, ST_Transform('SRID=4326;POINT(-3.044272 35.702647)'::geometry, 3857)), +(782, 'SRID=4326;POINT(-3.044 35.702192)'::geometry, ST_Transform('SRID=4326;POINT(-3.044 35.702192)'::geometry, 3857)), +(783, 'SRID=4326;POINT(-3.044468 35.702635)'::geometry, ST_Transform('SRID=4326;POINT(-3.044468 35.702635)'::geometry, 3857)), +(784, 'SRID=4326;POINT(-3.044076 35.702746)'::geometry, ST_Transform('SRID=4326;POINT(-3.044076 35.702746)'::geometry, 3857)), +(785, 'SRID=4326;POINT(-3.043738 35.702675)'::geometry, ST_Transform('SRID=4326;POINT(-3.043738 35.702675)'::geometry, 3857)), +(786, 'SRID=4326;POINT(-3.043795 35.702232)'::geometry, ST_Transform('SRID=4326;POINT(-3.043795 35.702232)'::geometry, 3857)), +(787, 'SRID=4326;POINT(-3.044209 35.702984)'::geometry, ST_Transform('SRID=4326;POINT(-3.044209 35.702984)'::geometry, 3857)), +(788, 'SRID=4326;POINT(-7.790389 34.460937)'::geometry, ST_Transform('SRID=4326;POINT(-7.790389 34.460937)'::geometry, 3857)), +(789, 'SRID=4326;POINT(-7.789629 34.460861)'::geometry, ST_Transform('SRID=4326;POINT(-7.789629 34.460861)'::geometry, 3857)), +(790, 'SRID=4326;POINT(-7.78971 34.460351)'::geometry, ST_Transform('SRID=4326;POINT(-7.78971 34.460351)'::geometry, 3857)), +(791, 'SRID=4326;POINT(-3.638793 31.769061)'::geometry, ST_Transform('SRID=4326;POINT(-3.638793 31.769061)'::geometry, 3857)), +(792, 'SRID=4326;POINT(-3.638466 31.768737)'::geometry, ST_Transform('SRID=4326;POINT(-3.638466 31.768737)'::geometry, 3857)), +(793, 'SRID=4326;POINT(-3.63824 31.768573)'::geometry, ST_Transform('SRID=4326;POINT(-3.63824 31.768573)'::geometry, 3857)), +(794, 'SRID=4326;POINT(-3.638398 31.768979)'::geometry, ST_Transform('SRID=4326;POINT(-3.638398 31.768979)'::geometry, 3857)), +(795, 'SRID=4326;POINT(-3.63876 31.768587)'::geometry, ST_Transform('SRID=4326;POINT(-3.63876 31.768587)'::geometry, 3857)), +(796, 'SRID=4326;POINT(-3.638016 31.769415)'::geometry, ST_Transform('SRID=4326;POINT(-3.638016 31.769415)'::geometry, 3857)), +(797, 'SRID=4326;POINT(-3.638079 31.768865)'::geometry, ST_Transform('SRID=4326;POINT(-3.638079 31.768865)'::geometry, 3857)), +(798, 'SRID=4326;POINT(-3.638309 31.768567)'::geometry, ST_Transform('SRID=4326;POINT(-3.638309 31.768567)'::geometry, 3857)), +(799, 'SRID=4326;POINT(-3.638519 31.76941)'::geometry, ST_Transform('SRID=4326;POINT(-3.638519 31.76941)'::geometry, 3857)), +(800, 'SRID=4326;POINT(-3.638692 31.768971)'::geometry, ST_Transform('SRID=4326;POINT(-3.638692 31.768971)'::geometry, 3857)), +(801, 'SRID=4326;POINT(-3.6379 31.768873)'::geometry, ST_Transform('SRID=4326;POINT(-3.6379 31.768873)'::geometry, 3857)), +(802, 'SRID=4326;POINT(-3.638416 31.768977)'::geometry, ST_Transform('SRID=4326;POINT(-3.638416 31.768977)'::geometry, 3857)), +(803, 'SRID=4326;POINT(3.482375 34.823772)'::geometry, ST_Transform('SRID=4326;POINT(3.482375 34.823772)'::geometry, 3857)), +(804, 'SRID=4326;POINT(3.482611 34.823862)'::geometry, ST_Transform('SRID=4326;POINT(3.482611 34.823862)'::geometry, 3857)), +(805, 'SRID=4326;POINT(3.482458 34.823835)'::geometry, ST_Transform('SRID=4326;POINT(3.482458 34.823835)'::geometry, 3857)), +(806, 'SRID=4326;POINT(3.482499 34.823217)'::geometry, ST_Transform('SRID=4326;POINT(3.482499 34.823217)'::geometry, 3857)), +(807, 'SRID=4326;POINT(3.481979 34.824033)'::geometry, ST_Transform('SRID=4326;POINT(3.481979 34.824033)'::geometry, 3857)), +(808, 'SRID=4326;POINT(-2.509218 34.847743)'::geometry, ST_Transform('SRID=4326;POINT(-2.509218 34.847743)'::geometry, 3857)), +(809, 'SRID=4326;POINT(-2.508889 34.847727)'::geometry, ST_Transform('SRID=4326;POINT(-2.508889 34.847727)'::geometry, 3857)), +(810, 'SRID=4326;POINT(-2.50892 34.846884)'::geometry, ST_Transform('SRID=4326;POINT(-2.50892 34.846884)'::geometry, 3857)), +(811, 'SRID=4326;POINT(-2.508925 34.847728)'::geometry, ST_Transform('SRID=4326;POINT(-2.508925 34.847728)'::geometry, 3857)), +(812, 'SRID=4326;POINT(-2.509686 34.847259)'::geometry, ST_Transform('SRID=4326;POINT(-2.509686 34.847259)'::geometry, 3857)), +(813, 'SRID=4326;POINT(-2.509642 34.847683)'::geometry, ST_Transform('SRID=4326;POINT(-2.509642 34.847683)'::geometry, 3857)), +(814, 'SRID=4326;POINT(-2.509494 34.847088)'::geometry, ST_Transform('SRID=4326;POINT(-2.509494 34.847088)'::geometry, 3857)), +(815, 'SRID=4326;POINT(-2.508858 34.847826)'::geometry, ST_Transform('SRID=4326;POINT(-2.508858 34.847826)'::geometry, 3857)), +(816, 'SRID=4326;POINT(-2.508911 34.84779)'::geometry, ST_Transform('SRID=4326;POINT(-2.508911 34.84779)'::geometry, 3857)), +(817, 'SRID=4326;POINT(-2.509036 34.847235)'::geometry, ST_Transform('SRID=4326;POINT(-2.509036 34.847235)'::geometry, 3857)), +(818, 'SRID=4326;POINT(-2.508977 34.847441)'::geometry, ST_Transform('SRID=4326;POINT(-2.508977 34.847441)'::geometry, 3857)), +(819, 'SRID=4326;POINT(-2.509094 34.847048)'::geometry, ST_Transform('SRID=4326;POINT(-2.509094 34.847048)'::geometry, 3857)), +(820, 'SRID=4326;POINT(-2.509022 34.847189)'::geometry, ST_Transform('SRID=4326;POINT(-2.509022 34.847189)'::geometry, 3857)), +(821, 'SRID=4326;POINT(-2.509208 34.847051)'::geometry, ST_Transform('SRID=4326;POINT(-2.509208 34.847051)'::geometry, 3857)), +(822, 'SRID=4326;POINT(-2.509642 34.847293)'::geometry, ST_Transform('SRID=4326;POINT(-2.509642 34.847293)'::geometry, 3857)), +(823, 'SRID=4326;POINT(0.326508 39.66647)'::geometry, ST_Transform('SRID=4326;POINT(0.326508 39.66647)'::geometry, 3857)), +(824, 'SRID=4326;POINT(0.325896 39.666548)'::geometry, ST_Transform('SRID=4326;POINT(0.325896 39.666548)'::geometry, 3857)), +(825, 'SRID=4326;POINT(0.326264 39.66692)'::geometry, ST_Transform('SRID=4326;POINT(0.326264 39.66692)'::geometry, 3857)), +(826, 'SRID=4326;POINT(0.326113 39.666649)'::geometry, ST_Transform('SRID=4326;POINT(0.326113 39.666649)'::geometry, 3857)), +(827, 'SRID=4326;POINT(0.326511 39.666485)'::geometry, ST_Transform('SRID=4326;POINT(0.326511 39.666485)'::geometry, 3857)), +(828, 'SRID=4326;POINT(0.326479 39.667199)'::geometry, ST_Transform('SRID=4326;POINT(0.326479 39.667199)'::geometry, 3857)), +(829, 'SRID=4326;POINT(0.325908 39.667345)'::geometry, ST_Transform('SRID=4326;POINT(0.325908 39.667345)'::geometry, 3857)), +(830, 'SRID=4326;POINT(0.326475 39.666531)'::geometry, ST_Transform('SRID=4326;POINT(0.326475 39.666531)'::geometry, 3857)), +(831, 'SRID=4326;POINT(0.325636 39.666852)'::geometry, ST_Transform('SRID=4326;POINT(0.325636 39.666852)'::geometry, 3857)), +(832, 'SRID=4326;POINT(0.326265 39.666438)'::geometry, ST_Transform('SRID=4326;POINT(0.326265 39.666438)'::geometry, 3857)), +(833, 'SRID=4326;POINT(9.174032 33.398054)'::geometry, ST_Transform('SRID=4326;POINT(9.174032 33.398054)'::geometry, 3857)), +(834, 'SRID=4326;POINT(9.174151 33.397592)'::geometry, ST_Transform('SRID=4326;POINT(9.174151 33.397592)'::geometry, 3857)), +(835, 'SRID=4326;POINT(9.173741 33.397925)'::geometry, ST_Transform('SRID=4326;POINT(9.173741 33.397925)'::geometry, 3857)), +(836, 'SRID=4326;POINT(9.173967 33.397743)'::geometry, ST_Transform('SRID=4326;POINT(9.173967 33.397743)'::geometry, 3857)), +(837, 'SRID=4326;POINT(9.173591 33.397683)'::geometry, ST_Transform('SRID=4326;POINT(9.173591 33.397683)'::geometry, 3857)), +(838, 'SRID=4326;POINT(9.17437 33.398353)'::geometry, ST_Transform('SRID=4326;POINT(9.17437 33.398353)'::geometry, 3857)), +(839, 'SRID=4326;POINT(1.83634 38.816707)'::geometry, ST_Transform('SRID=4326;POINT(1.83634 38.816707)'::geometry, 3857)), +(840, 'SRID=4326;POINT(1.836636 38.815905)'::geometry, ST_Transform('SRID=4326;POINT(1.836636 38.815905)'::geometry, 3857)), +(841, 'SRID=4326;POINT(1.836376 38.81682)'::geometry, ST_Transform('SRID=4326;POINT(1.836376 38.81682)'::geometry, 3857)), +(842, 'SRID=4326;POINT(1.836335 38.816239)'::geometry, ST_Transform('SRID=4326;POINT(1.836335 38.816239)'::geometry, 3857)), +(843, 'SRID=4326;POINT(1.83687 38.816413)'::geometry, ST_Transform('SRID=4326;POINT(1.83687 38.816413)'::geometry, 3857)), +(844, 'SRID=4326;POINT(1.837073 38.81631)'::geometry, ST_Transform('SRID=4326;POINT(1.837073 38.81631)'::geometry, 3857)), +(845, 'SRID=4326;POINT(1.836343 38.816733)'::geometry, ST_Transform('SRID=4326;POINT(1.836343 38.816733)'::geometry, 3857)), +(846, 'SRID=4326;POINT(1.836489 38.816262)'::geometry, ST_Transform('SRID=4326;POINT(1.836489 38.816262)'::geometry, 3857)), +(847, 'SRID=4326;POINT(1.83676 38.816723)'::geometry, ST_Transform('SRID=4326;POINT(1.83676 38.816723)'::geometry, 3857)), +(848, 'SRID=4326;POINT(-6.101184 30.891359)'::geometry, ST_Transform('SRID=4326;POINT(-6.101184 30.891359)'::geometry, 3857)), +(849, 'SRID=4326;POINT(-6.101891 30.891475)'::geometry, ST_Transform('SRID=4326;POINT(-6.101891 30.891475)'::geometry, 3857)), +(850, 'SRID=4326;POINT(-6.101454 30.890926)'::geometry, ST_Transform('SRID=4326;POINT(-6.101454 30.890926)'::geometry, 3857)), +(851, 'SRID=4326;POINT(-6.101107 30.891705)'::geometry, ST_Transform('SRID=4326;POINT(-6.101107 30.891705)'::geometry, 3857)), +(852, 'SRID=4326;POINT(-6.102024 30.891119)'::geometry, ST_Transform('SRID=4326;POINT(-6.102024 30.891119)'::geometry, 3857)), +(853, 'SRID=4326;POINT(-6.101783 30.891325)'::geometry, ST_Transform('SRID=4326;POINT(-6.101783 30.891325)'::geometry, 3857)), +(854, 'SRID=4326;POINT(-6.101777 30.891247)'::geometry, ST_Transform('SRID=4326;POINT(-6.101777 30.891247)'::geometry, 3857)), +(855, 'SRID=4326;POINT(-6.101719 30.891249)'::geometry, ST_Transform('SRID=4326;POINT(-6.101719 30.891249)'::geometry, 3857)), +(856, 'SRID=4326;POINT(-6.101544 30.891609)'::geometry, ST_Transform('SRID=4326;POINT(-6.101544 30.891609)'::geometry, 3857)), +(857, 'SRID=4326;POINT(-6.101199 30.891006)'::geometry, ST_Transform('SRID=4326;POINT(-6.101199 30.891006)'::geometry, 3857)), +(858, 'SRID=4326;POINT(-6.101879 30.891786)'::geometry, ST_Transform('SRID=4326;POINT(-6.101879 30.891786)'::geometry, 3857)), +(859, 'SRID=4326;POINT(0.467665 33.036704)'::geometry, ST_Transform('SRID=4326;POINT(0.467665 33.036704)'::geometry, 3857)), +(860, 'SRID=4326;POINT(0.46855 33.036736)'::geometry, ST_Transform('SRID=4326;POINT(0.46855 33.036736)'::geometry, 3857)), +(861, 'SRID=4326;POINT(0.467955 33.036171)'::geometry, ST_Transform('SRID=4326;POINT(0.467955 33.036171)'::geometry, 3857)), +(862, 'SRID=4326;POINT(0.46803 33.036307)'::geometry, ST_Transform('SRID=4326;POINT(0.46803 33.036307)'::geometry, 3857)), +(863, 'SRID=4326;POINT(0.467935 33.036645)'::geometry, ST_Transform('SRID=4326;POINT(0.467935 33.036645)'::geometry, 3857)), +(864, 'SRID=4326;POINT(0.468476 33.036343)'::geometry, ST_Transform('SRID=4326;POINT(0.468476 33.036343)'::geometry, 3857)), +(865, 'SRID=4326;POINT(-4.397995 38.108926)'::geometry, ST_Transform('SRID=4326;POINT(-4.397995 38.108926)'::geometry, 3857)), +(866, 'SRID=4326;POINT(-4.397981 38.10856)'::geometry, ST_Transform('SRID=4326;POINT(-4.397981 38.10856)'::geometry, 3857)), +(867, 'SRID=4326;POINT(-4.398207 38.107988)'::geometry, ST_Transform('SRID=4326;POINT(-4.398207 38.107988)'::geometry, 3857)), +(868, 'SRID=4326;POINT(9.353839 32.862791)'::geometry, ST_Transform('SRID=4326;POINT(9.353839 32.862791)'::geometry, 3857)), +(869, 'SRID=4326;POINT(4.939926 35.255665)'::geometry, ST_Transform('SRID=4326;POINT(4.939926 35.255665)'::geometry, 3857)), +(870, 'SRID=4326;POINT(4.940045 35.255507)'::geometry, ST_Transform('SRID=4326;POINT(4.940045 35.255507)'::geometry, 3857)), +(871, 'SRID=4326;POINT(4.94067 35.255616)'::geometry, ST_Transform('SRID=4326;POINT(4.94067 35.255616)'::geometry, 3857)), +(872, 'SRID=4326;POINT(4.940524 35.255542)'::geometry, ST_Transform('SRID=4326;POINT(4.940524 35.255542)'::geometry, 3857)), +(873, 'SRID=4326;POINT(4.940745 35.254987)'::geometry, ST_Transform('SRID=4326;POINT(4.940745 35.254987)'::geometry, 3857)), +(874, 'SRID=4326;POINT(4.939899 35.255589)'::geometry, ST_Transform('SRID=4326;POINT(4.939899 35.255589)'::geometry, 3857)), +(875, 'SRID=4326;POINT(4.940335 35.25572)'::geometry, ST_Transform('SRID=4326;POINT(4.940335 35.25572)'::geometry, 3857)), +(876, 'SRID=4326;POINT(4.93996 35.255052)'::geometry, ST_Transform('SRID=4326;POINT(4.93996 35.255052)'::geometry, 3857)), +(877, 'SRID=4326;POINT(4.940408 35.255539)'::geometry, ST_Transform('SRID=4326;POINT(4.940408 35.255539)'::geometry, 3857)), +(878, 'SRID=4326;POINT(4.940393 35.25571)'::geometry, ST_Transform('SRID=4326;POINT(4.940393 35.25571)'::geometry, 3857)), +(879, 'SRID=4326;POINT(4.940594 35.255653)'::geometry, ST_Transform('SRID=4326;POINT(4.940594 35.255653)'::geometry, 3857)), +(880, 'SRID=4326;POINT(4.940249 35.255422)'::geometry, ST_Transform('SRID=4326;POINT(4.940249 35.255422)'::geometry, 3857)), +(881, 'SRID=4326;POINT(4.940547 35.255623)'::geometry, ST_Transform('SRID=4326;POINT(4.940547 35.255623)'::geometry, 3857)), +(882, 'SRID=4326;POINT(4.940604 35.255766)'::geometry, ST_Transform('SRID=4326;POINT(4.940604 35.255766)'::geometry, 3857)), +(883, 'SRID=4326;POINT(-4.361161 35.792722)'::geometry, ST_Transform('SRID=4326;POINT(-4.361161 35.792722)'::geometry, 3857)), +(884, 'SRID=4326;POINT(-4.361616 35.792782)'::geometry, ST_Transform('SRID=4326;POINT(-4.361616 35.792782)'::geometry, 3857)), +(885, 'SRID=4326;POINT(-4.361326 35.793018)'::geometry, ST_Transform('SRID=4326;POINT(-4.361326 35.793018)'::geometry, 3857)), +(886, 'SRID=4326;POINT(-4.361662 35.793089)'::geometry, ST_Transform('SRID=4326;POINT(-4.361662 35.793089)'::geometry, 3857)), +(887, 'SRID=4326;POINT(-4.360844 35.793344)'::geometry, ST_Transform('SRID=4326;POINT(-4.360844 35.793344)'::geometry, 3857)), +(888, 'SRID=4326;POINT(-4.360797 35.792963)'::geometry, ST_Transform('SRID=4326;POINT(-4.360797 35.792963)'::geometry, 3857)), +(889, 'SRID=4326;POINT(-4.361643 35.792646)'::geometry, ST_Transform('SRID=4326;POINT(-4.361643 35.792646)'::geometry, 3857)), +(890, 'SRID=4326;POINT(-4.361294 35.792786)'::geometry, ST_Transform('SRID=4326;POINT(-4.361294 35.792786)'::geometry, 3857)), +(891, 'SRID=4326;POINT(-4.361255 35.792726)'::geometry, ST_Transform('SRID=4326;POINT(-4.361255 35.792726)'::geometry, 3857)), +(892, 'SRID=4326;POINT(-4.361299 35.793037)'::geometry, ST_Transform('SRID=4326;POINT(-4.361299 35.793037)'::geometry, 3857)), +(893, 'SRID=4326;POINT(-4.360759 35.793348)'::geometry, ST_Transform('SRID=4326;POINT(-4.360759 35.793348)'::geometry, 3857)), +(894, 'SRID=4326;POINT(-4.361492 35.792563)'::geometry, ST_Transform('SRID=4326;POINT(-4.361492 35.792563)'::geometry, 3857)), +(895, 'SRID=4326;POINT(-4.361138 35.792639)'::geometry, ST_Transform('SRID=4326;POINT(-4.361138 35.792639)'::geometry, 3857)), +(896, 'SRID=4326;POINT(-4.361626 35.793258)'::geometry, ST_Transform('SRID=4326;POINT(-4.361626 35.793258)'::geometry, 3857)), +(897, 'SRID=4326;POINT(-4.361442 35.792772)'::geometry, ST_Transform('SRID=4326;POINT(-4.361442 35.792772)'::geometry, 3857)), +(898, 'SRID=4326;POINT(9.523596 36.520863)'::geometry, ST_Transform('SRID=4326;POINT(9.523596 36.520863)'::geometry, 3857)), +(899, 'SRID=4326;POINT(9.524498 36.520605)'::geometry, ST_Transform('SRID=4326;POINT(9.524498 36.520605)'::geometry, 3857)), +(900, 'SRID=4326;POINT(9.524193 36.520504)'::geometry, ST_Transform('SRID=4326;POINT(9.524193 36.520504)'::geometry, 3857)), +(901, 'SRID=4326;POINT(9.523808 36.520676)'::geometry, ST_Transform('SRID=4326;POINT(9.523808 36.520676)'::geometry, 3857)), +(902, 'SRID=4326;POINT(9.523765 36.520077)'::geometry, ST_Transform('SRID=4326;POINT(9.523765 36.520077)'::geometry, 3857)), +(903, 'SRID=4326;POINT(9.524111 36.52008)'::geometry, ST_Transform('SRID=4326;POINT(9.524111 36.52008)'::geometry, 3857)), +(904, 'SRID=4326;POINT(9.523609 36.520475)'::geometry, ST_Transform('SRID=4326;POINT(9.523609 36.520475)'::geometry, 3857)), +(905, 'SRID=4326;POINT(9.523761 36.520034)'::geometry, ST_Transform('SRID=4326;POINT(9.523761 36.520034)'::geometry, 3857)), +(906, 'SRID=4326;POINT(2.691972 39.13515)'::geometry, ST_Transform('SRID=4326;POINT(2.691972 39.13515)'::geometry, 3857)), +(907, 'SRID=4326;POINT(2.692015 39.135473)'::geometry, ST_Transform('SRID=4326;POINT(2.692015 39.135473)'::geometry, 3857)), +(908, 'SRID=4326;POINT(2.691972 39.135047)'::geometry, ST_Transform('SRID=4326;POINT(2.691972 39.135047)'::geometry, 3857)), +(909, 'SRID=4326;POINT(2.692026 39.135081)'::geometry, ST_Transform('SRID=4326;POINT(2.692026 39.135081)'::geometry, 3857)), +(910, 'SRID=4326;POINT(0.008581 37.840553)'::geometry, ST_Transform('SRID=4326;POINT(0.008581 37.840553)'::geometry, 3857)), +(911, 'SRID=4326;POINT(0.008625 37.840396)'::geometry, ST_Transform('SRID=4326;POINT(0.008625 37.840396)'::geometry, 3857)), +(912, 'SRID=4326;POINT(0.00866 37.840515)'::geometry, ST_Transform('SRID=4326;POINT(0.00866 37.840515)'::geometry, 3857)), +(913, 'SRID=4326;POINT(0.008149 37.840567)'::geometry, ST_Transform('SRID=4326;POINT(0.008149 37.840567)'::geometry, 3857)), +(914, 'SRID=4326;POINT(0.008371 37.840179)'::geometry, ST_Transform('SRID=4326;POINT(0.008371 37.840179)'::geometry, 3857)), +(915, 'SRID=4326;POINT(0.008235 37.840314)'::geometry, ST_Transform('SRID=4326;POINT(0.008235 37.840314)'::geometry, 3857)), +(916, 'SRID=4326;POINT(0.008591 37.840371)'::geometry, ST_Transform('SRID=4326;POINT(0.008591 37.840371)'::geometry, 3857)), +(917, 'SRID=4326;POINT(0.007883 37.840346)'::geometry, ST_Transform('SRID=4326;POINT(0.007883 37.840346)'::geometry, 3857)), +(918, 'SRID=4326;POINT(0.007834 37.841039)'::geometry, ST_Transform('SRID=4326;POINT(0.007834 37.841039)'::geometry, 3857)), +(919, 'SRID=4326;POINT(-3.502093 32.72715)'::geometry, ST_Transform('SRID=4326;POINT(-3.502093 32.72715)'::geometry, 3857)), +(920, 'SRID=4326;POINT(-3.502619 32.726865)'::geometry, ST_Transform('SRID=4326;POINT(-3.502619 32.726865)'::geometry, 3857)), +(921, 'SRID=4326;POINT(-3.501994 32.726925)'::geometry, ST_Transform('SRID=4326;POINT(-3.501994 32.726925)'::geometry, 3857)), +(922, 'SRID=4326;POINT(-3.502067 32.726896)'::geometry, ST_Transform('SRID=4326;POINT(-3.502067 32.726896)'::geometry, 3857)), +(923, 'SRID=4326;POINT(-3.501996 32.727402)'::geometry, ST_Transform('SRID=4326;POINT(-3.501996 32.727402)'::geometry, 3857)), +(924, 'SRID=4326;POINT(-3.502351 32.727182)'::geometry, ST_Transform('SRID=4326;POINT(-3.502351 32.727182)'::geometry, 3857)), +(925, 'SRID=4326;POINT(-3.502569 32.727488)'::geometry, ST_Transform('SRID=4326;POINT(-3.502569 32.727488)'::geometry, 3857)), +(926, 'SRID=4326;POINT(-3.502554 32.727055)'::geometry, ST_Transform('SRID=4326;POINT(-3.502554 32.727055)'::geometry, 3857)), +(927, 'SRID=4326;POINT(-3.501757 32.726911)'::geometry, ST_Transform('SRID=4326;POINT(-3.501757 32.726911)'::geometry, 3857)), +(928, 'SRID=4326;POINT(-3.501867 32.7268)'::geometry, ST_Transform('SRID=4326;POINT(-3.501867 32.7268)'::geometry, 3857)), +(929, 'SRID=4326;POINT(-4.517406 37.456378)'::geometry, ST_Transform('SRID=4326;POINT(-4.517406 37.456378)'::geometry, 3857)), +(930, 'SRID=4326;POINT(-4.516774 37.456898)'::geometry, ST_Transform('SRID=4326;POINT(-4.516774 37.456898)'::geometry, 3857)), +(931, 'SRID=4326;POINT(-4.517543 37.456407)'::geometry, ST_Transform('SRID=4326;POINT(-4.517543 37.456407)'::geometry, 3857)), +(932, 'SRID=4326;POINT(-4.517597 37.456574)'::geometry, ST_Transform('SRID=4326;POINT(-4.517597 37.456574)'::geometry, 3857)), +(933, 'SRID=4326;POINT(-4.516927 37.456282)'::geometry, ST_Transform('SRID=4326;POINT(-4.516927 37.456282)'::geometry, 3857)), +(934, 'SRID=4326;POINT(-4.517612 37.456792)'::geometry, ST_Transform('SRID=4326;POINT(-4.517612 37.456792)'::geometry, 3857)), +(935, 'SRID=4326;POINT(-4.516852 37.456605)'::geometry, ST_Transform('SRID=4326;POINT(-4.516852 37.456605)'::geometry, 3857)), +(936, 'SRID=4326;POINT(-4.51704 37.456707)'::geometry, ST_Transform('SRID=4326;POINT(-4.51704 37.456707)'::geometry, 3857)), +(937, 'SRID=4326;POINT(-4.517468 37.456538)'::geometry, ST_Transform('SRID=4326;POINT(-4.517468 37.456538)'::geometry, 3857)), +(938, 'SRID=4326;POINT(-4.51699 37.456715)'::geometry, ST_Transform('SRID=4326;POINT(-4.51699 37.456715)'::geometry, 3857)), +(939, 'SRID=4326;POINT(-4.51686 37.45712)'::geometry, ST_Transform('SRID=4326;POINT(-4.51686 37.45712)'::geometry, 3857)), +(940, 'SRID=4326;POINT(-4.516981 37.456901)'::geometry, ST_Transform('SRID=4326;POINT(-4.516981 37.456901)'::geometry, 3857)), +(941, 'SRID=4326;POINT(-4.517565 37.45646)'::geometry, ST_Transform('SRID=4326;POINT(-4.517565 37.45646)'::geometry, 3857)), +(942, 'SRID=4326;POINT(-4.516979 37.456419)'::geometry, ST_Transform('SRID=4326;POINT(-4.516979 37.456419)'::geometry, 3857)), +(943, 'SRID=4326;POINT(-5.25281 39.208222)'::geometry, ST_Transform('SRID=4326;POINT(-5.25281 39.208222)'::geometry, 3857)), +(944, 'SRID=4326;POINT(-5.252193 39.208342)'::geometry, ST_Transform('SRID=4326;POINT(-5.252193 39.208342)'::geometry, 3857)), +(945, 'SRID=4326;POINT(-5.252944 39.208113)'::geometry, ST_Transform('SRID=4326;POINT(-5.252944 39.208113)'::geometry, 3857)), +(946, 'SRID=4326;POINT(-3.392779 38.996535)'::geometry, ST_Transform('SRID=4326;POINT(-3.392779 38.996535)'::geometry, 3857)), +(947, 'SRID=4326;POINT(-3.392354 38.996052)'::geometry, ST_Transform('SRID=4326;POINT(-3.392354 38.996052)'::geometry, 3857)), +(948, 'SRID=4326;POINT(-3.392873 38.996805)'::geometry, ST_Transform('SRID=4326;POINT(-3.392873 38.996805)'::geometry, 3857)), +(949, 'SRID=4326;POINT(7.450684 31.45342)'::geometry, ST_Transform('SRID=4326;POINT(7.450684 31.45342)'::geometry, 3857)), +(950, 'SRID=4326;POINT(7.451103 31.453188)'::geometry, ST_Transform('SRID=4326;POINT(7.451103 31.453188)'::geometry, 3857)), +(951, 'SRID=4326;POINT(7.451097 31.453074)'::geometry, ST_Transform('SRID=4326;POINT(7.451097 31.453074)'::geometry, 3857)), +(952, 'SRID=4326;POINT(7.451434 31.453789)'::geometry, ST_Transform('SRID=4326;POINT(7.451434 31.453789)'::geometry, 3857)), +(953, 'SRID=4326;POINT(7.451138 31.453362)'::geometry, ST_Transform('SRID=4326;POINT(7.451138 31.453362)'::geometry, 3857)), +(954, 'SRID=4326;POINT(7.450761 31.453573)'::geometry, ST_Transform('SRID=4326;POINT(7.450761 31.453573)'::geometry, 3857)), +(955, 'SRID=4326;POINT(7.451598 31.453288)'::geometry, ST_Transform('SRID=4326;POINT(7.451598 31.453288)'::geometry, 3857)), +(956, 'SRID=4326;POINT(7.450992 31.453536)'::geometry, ST_Transform('SRID=4326;POINT(7.450992 31.453536)'::geometry, 3857)), +(957, 'SRID=4326;POINT(7.450987 31.453982)'::geometry, ST_Transform('SRID=4326;POINT(7.450987 31.453982)'::geometry, 3857)), +(958, 'SRID=4326;POINT(7.45092 31.453151)'::geometry, ST_Transform('SRID=4326;POINT(7.45092 31.453151)'::geometry, 3857)), +(959, 'SRID=4326;POINT(-5.166299 39.804795)'::geometry, ST_Transform('SRID=4326;POINT(-5.166299 39.804795)'::geometry, 3857)), +(960, 'SRID=4326;POINT(-5.166162 39.804953)'::geometry, ST_Transform('SRID=4326;POINT(-5.166162 39.804953)'::geometry, 3857)), +(961, 'SRID=4326;POINT(-5.166126 39.804703)'::geometry, ST_Transform('SRID=4326;POINT(-5.166126 39.804703)'::geometry, 3857)), +(962, 'SRID=4326;POINT(-5.166944 39.80527)'::geometry, ST_Transform('SRID=4326;POINT(-5.166944 39.80527)'::geometry, 3857)), +(963, 'SRID=4326;POINT(-5.166758 39.805624)'::geometry, ST_Transform('SRID=4326;POINT(-5.166758 39.805624)'::geometry, 3857)), +(964, 'SRID=4326;POINT(-5.166371 39.805331)'::geometry, ST_Transform('SRID=4326;POINT(-5.166371 39.805331)'::geometry, 3857)), +(965, 'SRID=4326;POINT(-5.166318 39.805433)'::geometry, ST_Transform('SRID=4326;POINT(-5.166318 39.805433)'::geometry, 3857)), +(966, 'SRID=4326;POINT(-5.166562 39.804734)'::geometry, ST_Transform('SRID=4326;POINT(-5.166562 39.804734)'::geometry, 3857)), +(967, 'SRID=4326;POINT(-5.167058 39.805388)'::geometry, ST_Transform('SRID=4326;POINT(-5.167058 39.805388)'::geometry, 3857)), +(968, 'SRID=4326;POINT(-5.166405 39.805063)'::geometry, ST_Transform('SRID=4326;POINT(-5.166405 39.805063)'::geometry, 3857)), +(969, 'SRID=4326;POINT(-5.167102 39.805551)'::geometry, ST_Transform('SRID=4326;POINT(-5.167102 39.805551)'::geometry, 3857)), +(970, 'SRID=4326;POINT(5.52788 37.61853)'::geometry, ST_Transform('SRID=4326;POINT(5.52788 37.61853)'::geometry, 3857)), +(971, 'SRID=4326;POINT(5.527105 37.618486)'::geometry, ST_Transform('SRID=4326;POINT(5.527105 37.618486)'::geometry, 3857)), +(972, 'SRID=4326;POINT(5.527643 37.618122)'::geometry, ST_Transform('SRID=4326;POINT(5.527643 37.618122)'::geometry, 3857)), +(973, 'SRID=4326;POINT(6.030142 31.306772)'::geometry, ST_Transform('SRID=4326;POINT(6.030142 31.306772)'::geometry, 3857)), +(974, 'SRID=4326;POINT(6.030499 31.306908)'::geometry, ST_Transform('SRID=4326;POINT(6.030499 31.306908)'::geometry, 3857)), +(975, 'SRID=4326;POINT(6.030614 31.307568)'::geometry, ST_Transform('SRID=4326;POINT(6.030614 31.307568)'::geometry, 3857)), +(976, 'SRID=4326;POINT(6.030637 31.306666)'::geometry, ST_Transform('SRID=4326;POINT(6.030637 31.306666)'::geometry, 3857)), +(977, 'SRID=4326;POINT(6.030282 31.307541)'::geometry, ST_Transform('SRID=4326;POINT(6.030282 31.307541)'::geometry, 3857)), +(978, 'SRID=4326;POINT(6.030282 31.306832)'::geometry, ST_Transform('SRID=4326;POINT(6.030282 31.306832)'::geometry, 3857)), +(979, 'SRID=4326;POINT(6.03011 31.306838)'::geometry, ST_Transform('SRID=4326;POINT(6.03011 31.306838)'::geometry, 3857)), +(980, 'SRID=4326;POINT(1.829057 34.422718)'::geometry, ST_Transform('SRID=4326;POINT(1.829057 34.422718)'::geometry, 3857)), +(981, 'SRID=4326;POINT(8.782734 33.24252)'::geometry, ST_Transform('SRID=4326;POINT(8.782734 33.24252)'::geometry, 3857)), +(982, 'SRID=4326;POINT(8.782245 33.24248)'::geometry, ST_Transform('SRID=4326;POINT(8.782245 33.24248)'::geometry, 3857)), +(983, 'SRID=4326;POINT(8.78309 33.242807)'::geometry, ST_Transform('SRID=4326;POINT(8.78309 33.242807)'::geometry, 3857)), +(984, 'SRID=4326;POINT(8.783052 33.24202)'::geometry, ST_Transform('SRID=4326;POINT(8.783052 33.24202)'::geometry, 3857)), +(985, 'SRID=4326;POINT(8.782844 33.24273)'::geometry, ST_Transform('SRID=4326;POINT(8.782844 33.24273)'::geometry, 3857)), +(986, 'SRID=4326;POINT(8.782231 33.242443)'::geometry, ST_Transform('SRID=4326;POINT(8.782231 33.242443)'::geometry, 3857)), +(987, 'SRID=4326;POINT(8.782856 33.24207)'::geometry, ST_Transform('SRID=4326;POINT(8.782856 33.24207)'::geometry, 3857)), +(988, 'SRID=4326;POINT(8.783088 33.242078)'::geometry, ST_Transform('SRID=4326;POINT(8.783088 33.242078)'::geometry, 3857)), +(989, 'SRID=4326;POINT(8.782783 33.24224)'::geometry, ST_Transform('SRID=4326;POINT(8.782783 33.24224)'::geometry, 3857)), +(990, 'SRID=4326;POINT(8.783071 33.242071)'::geometry, ST_Transform('SRID=4326;POINT(8.783071 33.242071)'::geometry, 3857)), +(991, 'SRID=4326;POINT(8.783033 33.242419)'::geometry, ST_Transform('SRID=4326;POINT(8.783033 33.242419)'::geometry, 3857)), +(992, 'SRID=4326;POINT(8.782311 33.242637)'::geometry, ST_Transform('SRID=4326;POINT(8.782311 33.242637)'::geometry, 3857)), +(993, 'SRID=4326;POINT(4.39674 36.892468)'::geometry, ST_Transform('SRID=4326;POINT(4.39674 36.892468)'::geometry, 3857)), +(994, 'SRID=4326;POINT(4.396783 36.891769)'::geometry, ST_Transform('SRID=4326;POINT(4.396783 36.891769)'::geometry, 3857)), +(995, 'SRID=4326;POINT(4.396202 36.891833)'::geometry, ST_Transform('SRID=4326;POINT(4.396202 36.891833)'::geometry, 3857)), +(996, 'SRID=4326;POINT(4.396442 36.892369)'::geometry, ST_Transform('SRID=4326;POINT(4.396442 36.892369)'::geometry, 3857)), +(997, 'SRID=4326;POINT(4.396019 36.892199)'::geometry, ST_Transform('SRID=4326;POINT(4.396019 36.892199)'::geometry, 3857)), +(998, 'SRID=4326;POINT(4.396474 36.892466)'::geometry, ST_Transform('SRID=4326;POINT(4.396474 36.892466)'::geometry, 3857)), +(999, 'SRID=4326;POINT(4.396306 36.891886)'::geometry, ST_Transform('SRID=4326;POINT(4.396306 36.891886)'::geometry, 3857)), +(1000, 'SRID=4326;POINT(4.396362 36.89161)'::geometry, ST_Transform('SRID=4326;POINT(4.396362 36.89161)'::geometry, 3857)), +(1001, 'SRID=4326;POINT(-3.025791 39.730985)'::geometry, ST_Transform('SRID=4326;POINT(-3.025791 39.730985)'::geometry, 3857)), +(1002, 'SRID=4326;POINT(-3.025076 39.731156)'::geometry, ST_Transform('SRID=4326;POINT(-3.025076 39.731156)'::geometry, 3857)), +(1003, 'SRID=4326;POINT(-3.025444 39.731737)'::geometry, ST_Transform('SRID=4326;POINT(-3.025444 39.731737)'::geometry, 3857)), +(1004, 'SRID=4326;POINT(-3.025222 39.731439)'::geometry, ST_Transform('SRID=4326;POINT(-3.025222 39.731439)'::geometry, 3857)), +(1005, 'SRID=4326;POINT(-3.025759 39.731847)'::geometry, ST_Transform('SRID=4326;POINT(-3.025759 39.731847)'::geometry, 3857)), +(1006, 'SRID=4326;POINT(-3.025799 39.731368)'::geometry, ST_Transform('SRID=4326;POINT(-3.025799 39.731368)'::geometry, 3857)), +(1007, 'SRID=4326;POINT(3.297084 30.775964)'::geometry, ST_Transform('SRID=4326;POINT(3.297084 30.775964)'::geometry, 3857)), +(1008, 'SRID=4326;POINT(3.297041 30.775622)'::geometry, ST_Transform('SRID=4326;POINT(3.297041 30.775622)'::geometry, 3857)), +(1009, 'SRID=4326;POINT(3.297415 30.775269)'::geometry, ST_Transform('SRID=4326;POINT(3.297415 30.775269)'::geometry, 3857)), +(1010, 'SRID=4326;POINT(3.296819 30.775614)'::geometry, ST_Transform('SRID=4326;POINT(3.296819 30.775614)'::geometry, 3857)), +(1011, 'SRID=4326;POINT(1.946867 38.568477)'::geometry, ST_Transform('SRID=4326;POINT(1.946867 38.568477)'::geometry, 3857)), +(1012, 'SRID=4326;POINT(1.94724 38.568368)'::geometry, ST_Transform('SRID=4326;POINT(1.94724 38.568368)'::geometry, 3857)), +(1013, 'SRID=4326;POINT(1.946641 38.568434)'::geometry, ST_Transform('SRID=4326;POINT(1.946641 38.568434)'::geometry, 3857)), +(1014, 'SRID=4326;POINT(1.946387 38.568415)'::geometry, ST_Transform('SRID=4326;POINT(1.946387 38.568415)'::geometry, 3857)), +(1015, 'SRID=4326;POINT(1.947139 38.568329)'::geometry, ST_Transform('SRID=4326;POINT(1.947139 38.568329)'::geometry, 3857)), +(1016, 'SRID=4326;POINT(1.947311 38.568084)'::geometry, ST_Transform('SRID=4326;POINT(1.947311 38.568084)'::geometry, 3857)), +(1017, 'SRID=4326;POINT(1.946555 38.5683)'::geometry, ST_Transform('SRID=4326;POINT(1.946555 38.5683)'::geometry, 3857)), +(1018, 'SRID=4326;POINT(1.946498 38.568167)'::geometry, ST_Transform('SRID=4326;POINT(1.946498 38.568167)'::geometry, 3857)), +(1019, 'SRID=4326;POINT(3.078254 39.32079)'::geometry, ST_Transform('SRID=4326;POINT(3.078254 39.32079)'::geometry, 3857)), +(1020, 'SRID=4326;POINT(3.07886 39.321409)'::geometry, ST_Transform('SRID=4326;POINT(3.07886 39.321409)'::geometry, 3857)), +(1021, 'SRID=4326;POINT(3.078319 39.32066)'::geometry, ST_Transform('SRID=4326;POINT(3.078319 39.32066)'::geometry, 3857)), +(1022, 'SRID=4326;POINT(3.078967 39.321233)'::geometry, ST_Transform('SRID=4326;POINT(3.078967 39.321233)'::geometry, 3857)), +(1023, 'SRID=4326;POINT(3.079088 39.321035)'::geometry, ST_Transform('SRID=4326;POINT(3.079088 39.321035)'::geometry, 3857)), +(1024, 'SRID=4326;POINT(3.078989 39.32099)'::geometry, ST_Transform('SRID=4326;POINT(3.078989 39.32099)'::geometry, 3857)), +(1025, 'SRID=4326;POINT(-4.467508 33.62169)'::geometry, ST_Transform('SRID=4326;POINT(-4.467508 33.62169)'::geometry, 3857)), +(1026, 'SRID=4326;POINT(-4.467668 33.621298)'::geometry, ST_Transform('SRID=4326;POINT(-4.467668 33.621298)'::geometry, 3857)), +(1027, 'SRID=4326;POINT(-4.467722 33.621318)'::geometry, ST_Transform('SRID=4326;POINT(-4.467722 33.621318)'::geometry, 3857)), +(1028, 'SRID=4326;POINT(-4.467164 33.621939)'::geometry, ST_Transform('SRID=4326;POINT(-4.467164 33.621939)'::geometry, 3857)), +(1029, 'SRID=4326;POINT(-4.467144 33.621807)'::geometry, ST_Transform('SRID=4326;POINT(-4.467144 33.621807)'::geometry, 3857)), +(1030, 'SRID=4326;POINT(-4.467366 33.621429)'::geometry, ST_Transform('SRID=4326;POINT(-4.467366 33.621429)'::geometry, 3857)), +(1031, 'SRID=4326;POINT(-4.467878 33.622214)'::geometry, ST_Transform('SRID=4326;POINT(-4.467878 33.622214)'::geometry, 3857)), +(1032, 'SRID=4326;POINT(-4.467818 33.621395)'::geometry, ST_Transform('SRID=4326;POINT(-4.467818 33.621395)'::geometry, 3857)), +(1033, 'SRID=4326;POINT(-4.467505 33.621982)'::geometry, ST_Transform('SRID=4326;POINT(-4.467505 33.621982)'::geometry, 3857)), +(1034, 'SRID=4326;POINT(-4.467095 33.622136)'::geometry, ST_Transform('SRID=4326;POINT(-4.467095 33.622136)'::geometry, 3857)), +(1035, 'SRID=4326;POINT(-4.467018 33.62219)'::geometry, ST_Transform('SRID=4326;POINT(-4.467018 33.62219)'::geometry, 3857)), +(1036, 'SRID=4326;POINT(-9.386335 38.537964)'::geometry, ST_Transform('SRID=4326;POINT(-9.386335 38.537964)'::geometry, 3857)), +(1037, 'SRID=4326;POINT(-9.387058 38.537527)'::geometry, ST_Transform('SRID=4326;POINT(-9.387058 38.537527)'::geometry, 3857)), +(1038, 'SRID=4326;POINT(-9.386532 38.538384)'::geometry, ST_Transform('SRID=4326;POINT(-9.386532 38.538384)'::geometry, 3857)), +(1039, 'SRID=4326;POINT(-9.386851 38.538101)'::geometry, ST_Transform('SRID=4326;POINT(-9.386851 38.538101)'::geometry, 3857)), +(1040, 'SRID=4326;POINT(-9.38632 38.538314)'::geometry, ST_Transform('SRID=4326;POINT(-9.38632 38.538314)'::geometry, 3857)), +(1041, 'SRID=4326;POINT(1.724469 36.566868)'::geometry, ST_Transform('SRID=4326;POINT(1.724469 36.566868)'::geometry, 3857)), +(1042, 'SRID=4326;POINT(1.724216 36.567273)'::geometry, ST_Transform('SRID=4326;POINT(1.724216 36.567273)'::geometry, 3857)), +(1043, 'SRID=4326;POINT(1.725133 36.56699)'::geometry, ST_Transform('SRID=4326;POINT(1.725133 36.56699)'::geometry, 3857)), +(1044, 'SRID=4326;POINT(1.72427 36.566541)'::geometry, ST_Transform('SRID=4326;POINT(1.72427 36.566541)'::geometry, 3857)), +(1045, 'SRID=4326;POINT(1.724579 36.566727)'::geometry, ST_Transform('SRID=4326;POINT(1.724579 36.566727)'::geometry, 3857)), +(1046, 'SRID=4326;POINT(1.724377 36.566944)'::geometry, ST_Transform('SRID=4326;POINT(1.724377 36.566944)'::geometry, 3857)), +(1047, 'SRID=4326;POINT(1.724544 36.566997)'::geometry, ST_Transform('SRID=4326;POINT(1.724544 36.566997)'::geometry, 3857)), +(1048, 'SRID=4326;POINT(1.725159 36.567219)'::geometry, ST_Transform('SRID=4326;POINT(1.725159 36.567219)'::geometry, 3857)), +(1049, 'SRID=4326;POINT(1.724639 36.567126)'::geometry, ST_Transform('SRID=4326;POINT(1.724639 36.567126)'::geometry, 3857)), +(1050, 'SRID=4326;POINT(1.724887 36.566844)'::geometry, ST_Transform('SRID=4326;POINT(1.724887 36.566844)'::geometry, 3857)), +(1051, 'SRID=4326;POINT(1.7245 36.566783)'::geometry, ST_Transform('SRID=4326;POINT(1.7245 36.566783)'::geometry, 3857)), +(1052, 'SRID=4326;POINT(1.725173 36.566542)'::geometry, ST_Transform('SRID=4326;POINT(1.725173 36.566542)'::geometry, 3857)), +(1053, 'SRID=4326;POINT(-1.215975 32.547197)'::geometry, ST_Transform('SRID=4326;POINT(-1.215975 32.547197)'::geometry, 3857)), +(1054, 'SRID=4326;POINT(-1.215926 32.547507)'::geometry, ST_Transform('SRID=4326;POINT(-1.215926 32.547507)'::geometry, 3857)), +(1055, 'SRID=4326;POINT(-1.216752 32.546703)'::geometry, ST_Transform('SRID=4326;POINT(-1.216752 32.546703)'::geometry, 3857)), +(1056, 'SRID=4326;POINT(-1.216613 32.54718)'::geometry, ST_Transform('SRID=4326;POINT(-1.216613 32.54718)'::geometry, 3857)), +(1057, 'SRID=4326;POINT(-7.993157 37.187857)'::geometry, ST_Transform('SRID=4326;POINT(-7.993157 37.187857)'::geometry, 3857)), +(1058, 'SRID=4326;POINT(-7.992873 37.187745)'::geometry, ST_Transform('SRID=4326;POINT(-7.992873 37.187745)'::geometry, 3857)), +(1059, 'SRID=4326;POINT(-7.993091 37.18814)'::geometry, ST_Transform('SRID=4326;POINT(-7.993091 37.18814)'::geometry, 3857)), +(1060, 'SRID=4326;POINT(-7.992773 37.187507)'::geometry, ST_Transform('SRID=4326;POINT(-7.992773 37.187507)'::geometry, 3857)), +(1061, 'SRID=4326;POINT(-7.99343 37.18819)'::geometry, ST_Transform('SRID=4326;POINT(-7.99343 37.18819)'::geometry, 3857)), +(1062, 'SRID=4326;POINT(-7.992727 37.187234)'::geometry, ST_Transform('SRID=4326;POINT(-7.992727 37.187234)'::geometry, 3857)), +(1063, 'SRID=4326;POINT(-7.992672 37.188057)'::geometry, ST_Transform('SRID=4326;POINT(-7.992672 37.188057)'::geometry, 3857)), +(1064, 'SRID=4326;POINT(-7.99318 37.18763)'::geometry, ST_Transform('SRID=4326;POINT(-7.99318 37.18763)'::geometry, 3857)), +(1065, 'SRID=4326;POINT(8.900398 32.262535)'::geometry, ST_Transform('SRID=4326;POINT(8.900398 32.262535)'::geometry, 3857)), +(1066, 'SRID=4326;POINT(8.900427 32.262327)'::geometry, ST_Transform('SRID=4326;POINT(8.900427 32.262327)'::geometry, 3857)), +(1067, 'SRID=4326;POINT(8.899843 32.262289)'::geometry, ST_Transform('SRID=4326;POINT(8.899843 32.262289)'::geometry, 3857)), +(1068, 'SRID=4326;POINT(8.900334 32.261977)'::geometry, ST_Transform('SRID=4326;POINT(8.900334 32.261977)'::geometry, 3857)), +(1069, 'SRID=4326;POINT(8.900136 32.262758)'::geometry, ST_Transform('SRID=4326;POINT(8.900136 32.262758)'::geometry, 3857)), +(1070, 'SRID=4326;POINT(8.90022 32.262509)'::geometry, ST_Transform('SRID=4326;POINT(8.90022 32.262509)'::geometry, 3857)), +(1071, 'SRID=4326;POINT(8.899751 32.262215)'::geometry, ST_Transform('SRID=4326;POINT(8.899751 32.262215)'::geometry, 3857)), +(1072, 'SRID=4326;POINT(8.900191 32.262102)'::geometry, ST_Transform('SRID=4326;POINT(8.900191 32.262102)'::geometry, 3857)), +(1073, 'SRID=4326;POINT(8.899721 32.262195)'::geometry, ST_Transform('SRID=4326;POINT(8.899721 32.262195)'::geometry, 3857)), +(1074, 'SRID=4326;POINT(8.899932 32.262497)'::geometry, ST_Transform('SRID=4326;POINT(8.899932 32.262497)'::geometry, 3857)), +(1075, 'SRID=4326;POINT(8.899968 32.262464)'::geometry, ST_Transform('SRID=4326;POINT(8.899968 32.262464)'::geometry, 3857)), +(1076, 'SRID=4326;POINT(8.899792 32.262717)'::geometry, ST_Transform('SRID=4326;POINT(8.899792 32.262717)'::geometry, 3857)), +(1077, 'SRID=4326;POINT(8.899919 32.262467)'::geometry, ST_Transform('SRID=4326;POINT(8.899919 32.262467)'::geometry, 3857)), +(1078, 'SRID=4326;POINT(8.9004 32.262731)'::geometry, ST_Transform('SRID=4326;POINT(8.9004 32.262731)'::geometry, 3857)), +(1079, 'SRID=4326;POINT(8.900461 32.262179)'::geometry, ST_Transform('SRID=4326;POINT(8.900461 32.262179)'::geometry, 3857)), +(1080, 'SRID=4326;POINT(8.900539 32.262052)'::geometry, ST_Transform('SRID=4326;POINT(8.900539 32.262052)'::geometry, 3857)), +(1081, 'SRID=4326;POINT(4.408361 39.427357)'::geometry, ST_Transform('SRID=4326;POINT(4.408361 39.427357)'::geometry, 3857)), +(1082, 'SRID=4326;POINT(4.409058 39.42786)'::geometry, ST_Transform('SRID=4326;POINT(4.409058 39.42786)'::geometry, 3857)), +(1083, 'SRID=4326;POINT(4.4091 39.427155)'::geometry, ST_Transform('SRID=4326;POINT(4.4091 39.427155)'::geometry, 3857)), +(1084, 'SRID=4326;POINT(4.408596 39.427209)'::geometry, ST_Transform('SRID=4326;POINT(4.408596 39.427209)'::geometry, 3857)), +(1085, 'SRID=4326;POINT(4.40852 39.427486)'::geometry, ST_Transform('SRID=4326;POINT(4.40852 39.427486)'::geometry, 3857)), +(1086, 'SRID=4326;POINT(4.408387 39.427188)'::geometry, ST_Transform('SRID=4326;POINT(4.408387 39.427188)'::geometry, 3857)), +(1087, 'SRID=4326;POINT(4.408612 39.427674)'::geometry, ST_Transform('SRID=4326;POINT(4.408612 39.427674)'::geometry, 3857)), +(1088, 'SRID=4326;POINT(4.408695 39.427922)'::geometry, ST_Transform('SRID=4326;POINT(4.408695 39.427922)'::geometry, 3857)), +(1089, 'SRID=4326;POINT(4.408693 39.427178)'::geometry, ST_Transform('SRID=4326;POINT(4.408693 39.427178)'::geometry, 3857)), +(1090, 'SRID=4326;POINT(4.408216 39.427706)'::geometry, ST_Transform('SRID=4326;POINT(4.408216 39.427706)'::geometry, 3857)), +(1091, 'SRID=4326;POINT(4.408435 39.427732)'::geometry, ST_Transform('SRID=4326;POINT(4.408435 39.427732)'::geometry, 3857)), +(1092, 'SRID=4326;POINT(4.408737 39.42783)'::geometry, ST_Transform('SRID=4326;POINT(4.408737 39.42783)'::geometry, 3857)), +(1093, 'SRID=4326;POINT(4.408624 39.427073)'::geometry, ST_Transform('SRID=4326;POINT(4.408624 39.427073)'::geometry, 3857)), +(1094, 'SRID=4326;POINT(4.408561 39.427638)'::geometry, ST_Transform('SRID=4326;POINT(4.408561 39.427638)'::geometry, 3857)), +(1095, 'SRID=4326;POINT(4.408244 39.427218)'::geometry, ST_Transform('SRID=4326;POINT(4.408244 39.427218)'::geometry, 3857)), +(1096, 'SRID=4326;POINT(4.408828 39.427396)'::geometry, ST_Transform('SRID=4326;POINT(4.408828 39.427396)'::geometry, 3857)), +(1097, 'SRID=4326;POINT(3.576089 38.267499)'::geometry, ST_Transform('SRID=4326;POINT(3.576089 38.267499)'::geometry, 3857)), +(1098, 'SRID=4326;POINT(3.575583 38.267731)'::geometry, ST_Transform('SRID=4326;POINT(3.575583 38.267731)'::geometry, 3857)), +(1099, 'SRID=4326;POINT(3.576442 38.267889)'::geometry, ST_Transform('SRID=4326;POINT(3.576442 38.267889)'::geometry, 3857)), +(1100, 'SRID=4326;POINT(3.576552 38.267045)'::geometry, ST_Transform('SRID=4326;POINT(3.576552 38.267045)'::geometry, 3857)), +(1101, 'SRID=4326;POINT(3.576473 38.267962)'::geometry, ST_Transform('SRID=4326;POINT(3.576473 38.267962)'::geometry, 3857)), +(1102, 'SRID=4326;POINT(3.576205 38.267778)'::geometry, ST_Transform('SRID=4326;POINT(3.576205 38.267778)'::geometry, 3857)), +(1103, 'SRID=4326;POINT(3.575928 38.267777)'::geometry, ST_Transform('SRID=4326;POINT(3.575928 38.267777)'::geometry, 3857)), +(1104, 'SRID=4326;POINT(3.575696 38.267961)'::geometry, ST_Transform('SRID=4326;POINT(3.575696 38.267961)'::geometry, 3857)), +(1105, 'SRID=4326;POINT(3.57577 38.267063)'::geometry, ST_Transform('SRID=4326;POINT(3.57577 38.267063)'::geometry, 3857)), +(1106, 'SRID=4326;POINT(5.456027 39.062911)'::geometry, ST_Transform('SRID=4326;POINT(5.456027 39.062911)'::geometry, 3857)), +(1107, 'SRID=4326;POINT(5.456313 39.063416)'::geometry, ST_Transform('SRID=4326;POINT(5.456313 39.063416)'::geometry, 3857)), +(1108, 'SRID=4326;POINT(5.455901 39.063434)'::geometry, ST_Transform('SRID=4326;POINT(5.455901 39.063434)'::geometry, 3857)), +(1109, 'SRID=4326;POINT(5.455573 39.06381)'::geometry, ST_Transform('SRID=4326;POINT(5.455573 39.06381)'::geometry, 3857)), +(1110, 'SRID=4326;POINT(5.45574 39.063318)'::geometry, ST_Transform('SRID=4326;POINT(5.45574 39.063318)'::geometry, 3857)), +(1111, 'SRID=4326;POINT(-1.544808 33.33398)'::geometry, ST_Transform('SRID=4326;POINT(-1.544808 33.33398)'::geometry, 3857)), +(1112, 'SRID=4326;POINT(-1.544993 33.333714)'::geometry, ST_Transform('SRID=4326;POINT(-1.544993 33.333714)'::geometry, 3857)), +(1113, 'SRID=4326;POINT(-1.544859 33.333711)'::geometry, ST_Transform('SRID=4326;POINT(-1.544859 33.333711)'::geometry, 3857)), +(1114, 'SRID=4326;POINT(-1.544863 33.334479)'::geometry, ST_Transform('SRID=4326;POINT(-1.544863 33.334479)'::geometry, 3857)); diff --git a/test/overviews/gen_points.rb b/test/overviews/gen_points.rb new file mode 100644 index 0000000..85cf622 --- /dev/null +++ b/test/overviews/gen_points.rb @@ -0,0 +1,43 @@ +# Ruby script to generate test/overviews/fixtures.sql for testing overviews +# Generated tables: +# * base_bare_t -- points without attributes (only PK, geometries) + +NUM_CLUSTERS = 128 +MAX_PER_CLUSTER = 16 +CLUSTER_RADIUS = 1E-3 +MIN_X = -10.0 +MAX_X = 10.0 +MIN_Y = 30.0 +MAX_Y = 40.0 +ATTRIBUTES = "number double precision, int_number integer, name text, start date" + +id = 0 +POINTS = (0...NUM_CLUSTERS).map{ + x = MIN_X + rand()*(MAX_X - MIN_X) + y = MIN_Y + rand()*(MAX_Y - MIN_Y) + (0..rand(MAX_PER_CLUSTER)).map{ + id += 1 + { + id: id, + x: (x + rand()*CLUSTER_RADIUS).round(6), + y: (y + rand()*CLUSTER_RADIUS).round(6) + } + } +}.flatten + +values = POINTS.map{ |point| + "#{point[:id]}, 'SRID=4326;POINT(#{point[:x]} #{point[:y]})'::geometry, ST_Transform('SRID=4326;POINT(#{point[:x]} #{point[:y]})'::geometry, 3857)" +} + +File.open('fixtures.sql', 'w') do |sql| + + sql.puts "-- bare table with no attribute columns" + sql.puts "CREATE TABLE base_bare_t (cartodb_id integer, the_geom geometry, the_geom_webmercator geometry);" + sql.puts "INSERT INTO base_bare_t VALUES" + sql.puts values.map{|v| "(#{v})"}.join(",\n") + ";" + + sql.puts "-- table with attributes" + sql.puts "CREATE TABLE base_t (cartodb_id integer, the_geom geometry, the_geom_webmercator geometry, #{ATTRIBUTES});" + sql.puts "INSERT INTO base_t VALUES" + sql.puts values.map{|v| "(#{v})"}.join(",\n") + ";" +end From 4afc427008dbe06fd342a1c2d69e37aff01f8174 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Mon, 28 Dec 2015 17:47:57 +0100 Subject: [PATCH 21/52] Rename Ref. Z strategy function It's not that *dummy* anymore, so choose a more descriptive name --- scripts-available/CDB_Overviews.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index d89382c..f293a2e 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -113,7 +113,7 @@ $$ LANGUAGE PLPGSQL STABLE; -- Parameters: -- reloid: oid of the input table. It must be a cartodbfy'ed table. -- Return value: Z level as an integer -CREATE OR REPLACE FUNCTION _CDB_Dummy_Ref_Z_Strategy(reloid REGCLASS) +CREATE OR REPLACE FUNCTION _CDB_Feature_Density_Ref_Z_Strategy(reloid REGCLASS) RETURNS INTEGER AS $$ DECLARE @@ -389,7 +389,7 @@ $$ LANGUAGE PLPGSQL; -- Return value: Array with the names of the generated overview tables CREATE OR REPLACE FUNCTION CDB_CreateOverviews( reloid REGCLASS, - refscale_strategy regproc DEFAULT '_CDB_Dummy_Ref_Z_Strategy'::regproc, + refscale_strategy regproc DEFAULT '_CDB_Feature_Density_Ref_Z_Strategy'::regproc, reduce_strategy regproc DEFAULT '_CDB_Dummy_Reduce_Strategy'::regproc ) RETURNS text[] From 07326626b709892ff1b78f421123970202b53e76 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Mon, 28 Dec 2015 19:28:20 +0100 Subject: [PATCH 22/52] More efficient sampling strategy It is also renamed properly. --- scripts-available/CDB_Overviews.sql | 32 ++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index f293a2e..30f0408 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -163,28 +163,46 @@ AS $$ END $$ LANGUAGE PLPGSQL IMMUTABLE; --- Experimental simplistic reduction method for point datasets to be used as a default. +-- Sampling reduction method. +-- Valid for any kind of geometry. -- Scope: private. -- reloid original table (can be the base table of the dataset or an existing -- overview) from which the overview is being generated. -- ref_z Z level assigned to the original table -- overview_z Z level of the overview to be generated, must be smaller than ref_z -- Return value: Name of the generated overview table -CREATE OR REPLACE FUNCTION _CDB_Dummy_Reduce_Strategy(reloid REGCLASS, ref_z INTEGER, overview_z INTEGER) +CREATE OR REPLACE FUNCTION _CDB_Sampling_Reduce_Strategy(reloid REGCLASS, ref_z INTEGER, overview_z INTEGER) RETURNS REGCLASS AS $$ DECLARE overview_rel TEXT; reduction FLOAT8; base_name TEXT; + num_rows FLOAT8; + num_samples INTEGER; BEGIN overview_rel := _CDB_Overview_Name(reloid, ref_z, overview_z); - -- TODO: implement a proper sampling strategy; - -- Here we're just inefficiently sampling the data to mantain - -- the approximate visual density of the reference level. reduction := power(2, 2*(overview_z - ref_z)); + + -- We'll avoid requiring a full sequential iteration on the table + -- by using ... + EXECUTE Format('DROP TABLE IF EXISTS %s CASCADE;', overview_rel); - EXECUTE Format('CREATE TABLE %s AS SELECT * FROM %s WHERE random() < %s;', overview_rel, reloid, reduction); + + -- Estimate number of rows + SELECT reltuples FROM pg_class INTO STRICT num_rows + WHERE oid = reloid::oid; + + num_samples := ceil(num_rows*reduction); + + EXECUTE Format(' + CREATE TABLE %1$s AS SELECT * FROM %2$s + WHERE ctid = ANY ( + ARRAY[ + (SELECT CDB_RandomTids(''%2$s'', %3$s)) + ] + ); + ', overview_rel, reloid, num_samples); RETURN overview_rel; END; $$ LANGUAGE PLPGSQL; @@ -390,7 +408,7 @@ $$ LANGUAGE PLPGSQL; CREATE OR REPLACE FUNCTION CDB_CreateOverviews( reloid REGCLASS, refscale_strategy regproc DEFAULT '_CDB_Feature_Density_Ref_Z_Strategy'::regproc, - reduce_strategy regproc DEFAULT '_CDB_Dummy_Reduce_Strategy'::regproc + reduce_strategy regproc DEFAULT '_CDB_Sampling_Reduce_Strategy'::regproc ) RETURNS text[] AS $$ From 2ff686de27b8ab1e897f2e033fdaf7faba55eb0a Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Mon, 28 Dec 2015 19:30:20 +0100 Subject: [PATCH 23/52] Clean up: remove spurious comment --- scripts-available/CDB_Overviews.sql | 3 --- 1 file changed, 3 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 30f0408..07d8a56 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -184,9 +184,6 @@ AS $$ overview_rel := _CDB_Overview_Name(reloid, ref_z, overview_z); reduction := power(2, 2*(overview_z - ref_z)); - -- We'll avoid requiring a full sequential iteration on the table - -- by using ... - EXECUTE Format('DROP TABLE IF EXISTS %s CASCADE;', overview_rel); -- Estimate number of rows From 6a6a5bc96a077ac27b4aebfdfe9ce0a535208234 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Mon, 28 Dec 2015 19:41:14 +0100 Subject: [PATCH 24/52] Fix Sampling reduction to avoid RandomTids problems The fixed cases will not be common but do occur in tests. This is an interim fix which should be reverted if CDB_randomTids changes. --- scripts-available/CDB_Overviews.sql | 34 +++++++++++++++++------------ 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 07d8a56..bccfdea 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -176,30 +176,36 @@ RETURNS REGCLASS AS $$ DECLARE overview_rel TEXT; - reduction FLOAT8; + fraction FLOAT8; base_name TEXT; - num_rows FLOAT8; + class_info RECORD; num_samples INTEGER; BEGIN overview_rel := _CDB_Overview_Name(reloid, ref_z, overview_z); - reduction := power(2, 2*(overview_z - ref_z)); + fraction := power(2, 2*(overview_z - ref_z)); EXECUTE Format('DROP TABLE IF EXISTS %s CASCADE;', overview_rel); -- Estimate number of rows - SELECT reltuples FROM pg_class INTO STRICT num_rows + SELECT reltuples, relpages FROM pg_class INTO STRICT class_info WHERE oid = reloid::oid; - num_samples := ceil(num_rows*reduction); - - EXECUTE Format(' - CREATE TABLE %1$s AS SELECT * FROM %2$s - WHERE ctid = ANY ( - ARRAY[ - (SELECT CDB_RandomTids(''%2$s'', %3$s)) - ] - ); - ', overview_rel, reloid, num_samples); + IF class_info.relpages < 2 OR fraction > 0.5 THEN + -- We'll avoid possible CDB_RandomTids problems + EXECUTE Format(' + CREATE TABLE %s AS SELECT * FROM %s WHERE random() < %s; + ', overview_rel, reloid, fraction); + ELSE + num_samples := ceil(class_info.reltuples*fraction); + EXECUTE Format(' + CREATE TABLE %1$s AS SELECT * FROM %2$s + WHERE ctid = ANY ( + ARRAY[ + (SELECT CDB_RandomTids(''%2$s'', %3$s)) + ] + ); + ', overview_rel, reloid, num_samples); + END IF; RETURN overview_rel; END; $$ LANGUAGE PLPGSQL; From 8ba9e74c4a29efc3cadb9228ed2362717ddc2a31 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Tue, 29 Dec 2015 13:38:07 +0100 Subject: [PATCH 25/52] Order columns of aggregated overlays as in the base table --- scripts-available/CDB_Overviews.sql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index bccfdea..6dfb548 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -361,7 +361,7 @@ AS $$ attributes := _CDB_Aggregable_Attributes_Expression(reloid); aggr_attributes := _CDB_Aggregated_Attributes_Expression(reloid); IF attributes <> '' THEN - attributes := attributes || ', '; + attributes := ', ' || attributes; END IF; IF aggr_attributes <> '' THEN aggr_attributes := aggr_attributes || ', '; @@ -388,10 +388,10 @@ AS $$ GROUP BY gx, gy ) SELECT - %4$s cartodb_id, - ST_SetSRID(ST_MakePoint(sx/n, sy/n), 3857) AS the_geom_webmercator, - ST_Transform(ST_SetSRID(ST_MakePoint(sx/n, sy/n), 3857), 4326) AS the_geom + ST_Transform(ST_SetSRID(ST_MakePoint(sx/n, sy/n), 3857), 4326) AS the_geom, + ST_SetSRID(ST_MakePoint(sx/n, sy/n), 3857) AS the_geom_webmercator + %4$s FROM clusters ', reloid::text, grid_m, overview_rel, attributes, aggr_attributes); From b34a752172e5026408058543b095aefc101ba498 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Tue, 29 Dec 2015 14:56:04 +0100 Subject: [PATCH 26/52] Generate overviews for all Z levels Skipping levels produces visually inferior results --- scripts-available/CDB_Overviews.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 6dfb548..d3c12ca 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -422,6 +422,7 @@ DECLARE base_rel REGCLASS; overview_z integer; overview_tables REGCLASS[]; + overviews_step integer := 1; BEGIN -- TODO: adjust statement_timeout here based on input table size? @@ -433,7 +434,7 @@ BEGIN overview_z := ref_z - 1; WHILE overview_z >= 0 LOOP SELECT array_append(overviews_z, overview_z) INTO overviews_z; - overview_z := overview_z - 2; + overview_z := overview_z - overviews_step; END LOOP; -- Create overlay tables From cecba655ebc0f6f6a32b44590a27f8104f7b5f9d Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Tue, 29 Dec 2015 14:56:47 +0100 Subject: [PATCH 27/52] Preserve aggregated attributes of singleton groups --- scripts-available/CDB_Overviews.sql | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index d3c12ca..43e2040 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -304,8 +304,9 @@ BEGIN -- 'A', 'B', 'A', 'C', 'D' => 'A/B/C/...' -- Other ideas: if value is unique then use it, otherwise use something -- like '*' or '(varies)' or '(multiple values)', or NULL - RETURN '''''::' || column_type; - ELSE RETURN 'NULL::' || column_type; + RETURN 'CASE count(*) WHEN 1 THEN string_agg(' || qualified_column || ',''/'') ELSE ''*''' || ' END::' || column_type; + ELSE + RETURN 'CASE count(*) WHEN 1 THEN MIN(' || qualified_column || ') ELSE NULL END::' || column_type; END CASE; END $$ LANGUAGE PLPGSQL IMMUTABLE; From 08828b8b7db4519737785f90095afbf3ab63364c Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Tue, 29 Dec 2015 15:22:12 +0100 Subject: [PATCH 28/52] Set owner of overlays to the owner of the base table --- scripts-available/CDB_Overviews.sql | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 43e2040..15b1aa1 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -221,12 +221,14 @@ RETURNS VOID AS $$ DECLARE sql TEXT; + table_owner TEXT; BEGIN - IF current_user != session_user THEN - sql := Format('ALTER TABLE IF EXISTS %s OWNER TO %s', overview_table::text, session_user); - EXECUTE sql; - END IF; - + -- preserve the owner of the base table + SELECT u.usename + FROM pg_catalog.pg_class c JOIN pg_catalog.pg_user u ON (c.relowner=u.usesysid) + WHERE c.relname = dataset::text + INTO table_owner; + EXECUTE Format('ALTER TABLE IF EXISTS %s OWNER TO %I', overview_table::text, table_owner); PERFORM _CDB_Add_Indexes(overview_table); -- TODO: we'll need to store metadata somewhere to define From 4580c9cd5c2a99eba3122fc76eef7ce5fdce82cb Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Mon, 4 Jan 2016 10:33:39 +0100 Subject: [PATCH 29/52] Change the cartodb_ids of aggregated overviews Instead of arbitrary ids, the id of one of the aggregated records is used, so that if it is used in the UI to query point the information of one of the records grouped at the point will be retrieved. --- scripts-available/CDB_Overviews.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 15b1aa1..aaadf45 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -386,7 +386,7 @@ AS $$ SUM(ST_Y(f.the_geom_webmercator)) AS sy, Floor(ST_X(f.the_geom_webmercator)/%2$s)::int AS gx, Floor(ST_Y(f.the_geom_webmercator)/%2$s)::int AS gy, - row_number() OVER () AS cartodb_id + MIN(cartodb_id) AS cartodb_id FROM %1$s f GROUP BY gx, gy ) From 496f079b1c8d2f3d355a8140e204fb6bbba3e940 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Mon, 4 Jan 2016 18:06:56 +0100 Subject: [PATCH 30/52] Copy dataset privileges to overview tables --- scripts-available/CDB_Overviews.sql | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index aaadf45..650a73c 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -228,7 +228,15 @@ AS $$ FROM pg_catalog.pg_class c JOIN pg_catalog.pg_user u ON (c.relowner=u.usesysid) WHERE c.relname = dataset::text INTO table_owner; - EXECUTE Format('ALTER TABLE IF EXISTS %s OWNER TO %I', overview_table::text, table_owner); + EXECUTE Format('ALTER TABLE IF EXISTS %s OWNER TO %I;', overview_table::text, table_owner); + + -- preserve the table privileges + UPDATE pg_class c_to + SET relacl = c_from.relacl + FROM pg_class c_from + WHERE c_from.oid = dataset + AND c_to.oid = overview_table; + PERFORM _CDB_Add_Indexes(overview_table); -- TODO: we'll need to store metadata somewhere to define From 6ea63af974bbda24dab67218eeea4b92d6079c64 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Mon, 11 Jan 2016 14:50:10 +0100 Subject: [PATCH 31/52] Add function to obtain existing overviews of a table --- doc/CDB_Overviews.md | 31 +++++++++++++++++++++++++++++ scripts-available/CDB_Overviews.sql | 17 ++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/doc/CDB_Overviews.md b/doc/CDB_Overviews.md index e934b30..99c1026 100644 --- a/doc/CDB_Overviews.md +++ b/doc/CDB_Overviews.md @@ -1,3 +1,19 @@ +Overviews are tables that represent a *reduced* version of a dataset intended +for efficient rendering at certain zoom levels while preserving the +general visual appearance of the complete dataset. + +The *reduction* consists in a fewer number of records +(while each overview record may represent an aggregation of multiple records) +and/or simplified record geometries. + +Overviews are created through the `CDB_CreateOverviews`. + +The `CDB_Overviews` function can be used determine what overview tables +exist for a given dataset table and which zoom levels correspond tt + + +### CDB_CreateOverviews + Create overviews for vector dataset. #### Using the function @@ -26,3 +42,18 @@ CDB_CreateOverviews(table_name, ref_z_strategy, reduction_strategy) - **base_table_name** regclass, base table to be reduced. - **base_z** integer, base Z level assigned to the base table. - **overview_z** integer, Z level for which to generate the overview. + +### CDB_Overviews + +Obtain overview metadata for a given table (existing overviews) + +```sql +SELECT CDB_Overviews('table_name'); +--- Return existing overview Z levels and corresponding tables +``` + +#### Arguments + +CDB_Overviews(table_name) + +* **table_name** regclass, table for which overviews will be generated diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 650a73c..dfc1624 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -1,3 +1,20 @@ +-- Return existing overviews (if any) for a given dataset table +-- Scope: public +-- Parameters +-- reloid: oid of the input table. +-- Return relation of overviews for the table with +-- z level of the overview and overview table, ordered by z. +CREATE OR REPLACE FUNCTION CDB_Overviews(reloid REGCLASS) +RETURNS TABLE(z integer, overview_table REGCLASS) +AS $$ + SELECT + substring(cdb_usertables from '\d+$')::integer as z, + cdb_usertables::regclass as overview_table + FROM CDB_UserTables() + WHERE cdb_usertables SIMILAR TO reloid::text || '_ov[0-9]+' + ORDER BY z; +$$ LANGUAGE SQL; + -- Calculate the estimated extent of a cartodbfy'ed table. -- Scope: private. -- Parameters From fd7a8cff7159ec57bf79eff52db2c3786259fde5 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Mon, 11 Jan 2016 15:27:05 +0100 Subject: [PATCH 32/52] Change regular expression for consistency --- scripts-available/CDB_Overviews.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index dfc1624..7453a66 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -11,7 +11,7 @@ AS $$ substring(cdb_usertables from '\d+$')::integer as z, cdb_usertables::regclass as overview_table FROM CDB_UserTables() - WHERE cdb_usertables SIMILAR TO reloid::text || '_ov[0-9]+' + WHERE cdb_usertables SIMILAR TO reloid::text || '_ov[\d]+' ORDER BY z; $$ LANGUAGE SQL; From ef7e613d4165f41bc71870ba041b90551f1fd526 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Mon, 11 Jan 2016 15:28:27 +0100 Subject: [PATCH 33/52] Change CDB_ColumnNames to order columns names as in table --- scripts-available/CDB_ColumnNames.sql | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts-available/CDB_ColumnNames.sql b/scripts-available/CDB_ColumnNames.sql index ebaf0b7..ce74216 100644 --- a/scripts-available/CDB_ColumnNames.sql +++ b/scripts-available/CDB_ColumnNames.sql @@ -8,8 +8,9 @@ AS $$ WHERE table_name = _tn.relname AND table_schema = _sn.nspname AND _tn.oid = $1::oid - AND _sn.oid = _tn.relnamespace; - + AND _sn.oid = _tn.relnamespace + ORDER BY ordinal_position; + $$ LANGUAGE SQL; -- This is to migrate from pre-0.2.0 version From 913640e2dc86a7b13629cd1cd06f6896a9586a27 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Mon, 11 Jan 2016 15:34:10 +0100 Subject: [PATCH 34/52] Preserve the column ordering of the base table in overviews --- scripts-available/CDB_Overviews.sql | 42 ++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 7453a66..9246abf 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -223,6 +223,7 @@ AS $$ ); ', overview_rel, reloid, num_samples); END IF; + RETURN overview_rel; END; $$ LANGUAGE PLPGSQL; @@ -272,7 +273,7 @@ $$ LANGUAGE PLPGSQL; CREATE OR REPLACE FUNCTION _CDB_Aggregable_Attributes(reloid REGCLASS) RETURNS SETOF information_schema.sql_identifier AS $$ - SELECT c FROM cartodb.CDB_ColumnNames(reloid) c, _CDB_Columns() cdb + SELECT c FROM CDB_ColumnNames(reloid) c, _CDB_Columns() cdb WHERE c NOT IN ( cdb.pkey, cdb.geomcol, cdb.mercgeomcol ) @@ -319,7 +320,7 @@ BEGIN qualified_column := Format('%I', column_name); END IF; - column_type := cartodb.CDB_ColumnType(reloid, column_name); + column_type := CDB_ColumnType(reloid, column_name); CASE column_type WHEN 'double precision', 'real', 'integer', 'bigint' THEN @@ -380,6 +381,7 @@ AS $$ grid_m FLOAT8; aggr_attributes TEXT; attributes TEXT; + columns TEXT; BEGIN overview_rel := _CDB_Overview_Name(reloid, ref_z, overview_z); @@ -395,6 +397,29 @@ AS $$ aggr_attributes := aggr_attributes || ', '; END IF; + -- compute the resulting columns in the same order as in the base table + -- cartodb_id, + -- ST_Transform(ST_SetSRID(ST_MakePoint(sx/n, sy/n), 3857), 4326) AS the_geom, + -- ST_SetSRID(ST_MakePoint(sx/n, sy/n), 3857) AS the_geom_webmercator + -- %4$s + WITH cols AS ( + SELECT + CASE c + WHEN 'cartodb_id' THEN 'cartodb_id' + WHEN 'the_geom' THEN + 'ST_Transform(ST_SetSRID(ST_MakePoint(sx/n, sy/n), 3857), 4326) AS the_geom' + WHEN 'the_geom_webmercator' THEN + 'ST_SetSRID(ST_MakePoint(sx/n, sy/n), 3857) AS the_geom_webmercator' + ELSE c + END AS column + FROM CDB_ColumnNames(reloid) c + ) + SELECT string_agg(s.column, ',') FROM ( + SELECT * FROM cols + ) AS s INTO columns; + RAISE NOTICE 'COLUMNS: %s', columns; + + EXECUTE Format('DROP TABLE IF EXISTS %s CASCADE;', overview_rel); -- Now we cluster the data using a grid of size grid_m @@ -415,13 +440,8 @@ AS $$ FROM %1$s f GROUP BY gx, gy ) - SELECT - cartodb_id, - ST_Transform(ST_SetSRID(ST_MakePoint(sx/n, sy/n), 3857), 4326) AS the_geom, - ST_SetSRID(ST_MakePoint(sx/n, sy/n), 3857) AS the_geom_webmercator - %4$s - FROM clusters - ', reloid::text, grid_m, overview_rel, attributes, aggr_attributes); + SELECT %6$s FROM clusters + ', reloid::text, grid_m, overview_rel, attributes, aggr_attributes, columns); RETURN overview_rel; END; @@ -434,7 +454,9 @@ $$ LANGUAGE PLPGSQL; -- vector features. -- refscale_strategy: function that computes the reference Z of the dataset -- reduce_strategy: function that generates overviews from a base table --- or higher level overview +-- or higher level overview. The overview tables +-- created by the strategy must have the same columns +-- as the base table and in the same order. -- Return value: Array with the names of the generated overview tables CREATE OR REPLACE FUNCTION CDB_CreateOverviews( reloid REGCLASS, From 0a066e0126be78c239fa59d121d0f5c5c2580b7f Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Mon, 11 Jan 2016 15:35:04 +0100 Subject: [PATCH 35/52] Change the default overview reduction strategy to GridCluster --- scripts-available/CDB_Overviews.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 9246abf..2540c4e 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -461,7 +461,7 @@ $$ LANGUAGE PLPGSQL; CREATE OR REPLACE FUNCTION CDB_CreateOverviews( reloid REGCLASS, refscale_strategy regproc DEFAULT '_CDB_Feature_Density_Ref_Z_Strategy'::regproc, - reduce_strategy regproc DEFAULT '_CDB_Sampling_Reduce_Strategy'::regproc + reduce_strategy regproc DEFAULT 'CDB_GridCluster_Reduce_Strategy'::regproc ) RETURNS text[] AS $$ From a7c70fe49750f7710149bd381db522cc6c076853 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Tue, 12 Jan 2016 11:46:47 +0100 Subject: [PATCH 36/52] Fix: CDB_ZoomFromScale deviation for lowest zoom levels --- scripts-available/CDB_ZoomFromScale.sql | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/scripts-available/CDB_ZoomFromScale.sql b/scripts-available/CDB_ZoomFromScale.sql index 4043bcf..6ded82e 100644 --- a/scripts-available/CDB_ZoomFromScale.sql +++ b/scripts-available/CDB_ZoomFromScale.sql @@ -1,10 +1,9 @@ CREATE OR REPLACE FUNCTION cartodb.CDB_ZoomFromScale(scaleDenominator numeric) RETURNS int AS $$ BEGIN CASE - WHEN scaleDenominator > 1000000000 THEN RETURN 0; - WHEN scaleDenominator <= 1000000000 AND scaleDenominator > 500000000 THEN RETURN 1; - WHEN scaleDenominator <= 500000000 AND scaleDenominator > 200000000 THEN RETURN 2; - WHEN scaleDenominator <= 200000000 AND scaleDenominator > 100000000 THEN RETURN 3; + WHEN scaleDenominator > 500000000 THEN RETURN 0; + WHEN scaleDenominator <= 500000000 AND scaleDenominator > 200000000 THEN RETURN 1; + WHEN scaleDenominator <= 200000000 AND scaleDenominator > 100000000 THEN RETURN 2; WHEN scaleDenominator <= 100000000 AND scaleDenominator > 50000000 THEN RETURN 3; WHEN scaleDenominator <= 50000000 AND scaleDenominator > 25000000 THEN RETURN 4; WHEN scaleDenominator <= 25000000 AND scaleDenominator > 12500000 THEN RETURN 5; From 02f386be33379131297b396d8aff77cbd67ec587 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Tue, 12 Jan 2016 11:59:42 +0100 Subject: [PATCH 37/52] Regard the GridCluster reduction strategy as private The *strategy* parameteriation will be considered an implementation detail for the time being. --- scripts-available/CDB_Overviews.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 2540c4e..987f6c5 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -363,14 +363,14 @@ $$ LANGUAGE PLPGSQL STABLE; -- Experimental Overview reduction method for point datasets. -- It clusters the points using a grid, then aggregates the point in each -- cluster into a point at the centroid of the clustered records. --- Scope: public. +-- Scope: private. -- Parameters: -- reloid original table (can be the base table of the dataset or an existing -- overview) from which the overview is being generated. -- ref_z Z level assigned to the original table -- overview_z Z level of the overview to be generated, must be smaller than ref_z -- Return value: Name of the generated overview table -CREATE OR REPLACE FUNCTION CDB_GridCluster_Reduce_Strategy(reloid REGCLASS, ref_z INTEGER, overview_z INTEGER) +CREATE OR REPLACE FUNCTION _CDB_GridCluster_Reduce_Strategy(reloid REGCLASS, ref_z INTEGER, overview_z INTEGER) RETURNS REGCLASS AS $$ DECLARE @@ -461,7 +461,7 @@ $$ LANGUAGE PLPGSQL; CREATE OR REPLACE FUNCTION CDB_CreateOverviews( reloid REGCLASS, refscale_strategy regproc DEFAULT '_CDB_Feature_Density_Ref_Z_Strategy'::regproc, - reduce_strategy regproc DEFAULT 'CDB_GridCluster_Reduce_Strategy'::regproc + reduce_strategy regproc DEFAULT '_CDB_GridCluster_Reduce_Strategy'::regproc ) RETURNS text[] AS $$ From a2f6cb4c0409f2699e005810d9278dd07bc0f10a Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Tue, 12 Jan 2016 11:59:57 +0100 Subject: [PATCH 38/52] Fix documentation --- doc/CDB_Overviews.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/CDB_Overviews.md b/doc/CDB_Overviews.md index 99c1026..b463228 100644 --- a/doc/CDB_Overviews.md +++ b/doc/CDB_Overviews.md @@ -56,4 +56,4 @@ SELECT CDB_Overviews('table_name'); CDB_Overviews(table_name) -* **table_name** regclass, table for which overviews will be generated +* **table_name** regclass, table to obtain existing overviews for From ccdf8de59ec312e23b4b83f22e129b5f4137d6e3 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Tue, 12 Jan 2016 12:08:41 +0100 Subject: [PATCH 39/52] Enhance documentation, update comments --- doc/CDB_Overviews.md | 10 +++++++--- scripts-available/CDB_Overviews.sql | 8 ++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/CDB_Overviews.md b/doc/CDB_Overviews.md index b463228..019a856 100644 --- a/doc/CDB_Overviews.md +++ b/doc/CDB_Overviews.md @@ -7,6 +7,8 @@ The *reduction* consists in a fewer number of records and/or simplified record geometries. Overviews are created through the `CDB_CreateOverviews`. +The statement timeout may need to be adjusted before using this function, +as overview creation for large tables is a time-consuming operation. The `CDB_Overviews` function can be used determine what overview tables exist for a given dataset table and which zoom levels correspond tt @@ -31,12 +33,14 @@ SELECT CDB_CreateOverviews('table_name'); CDB_CreateOverviews(table_name, ref_z_strategy, reduction_strategy) * **table_name** regclass, table for which overviews will be generated -* **ref_z_strategy** regproc, function that provides the Z-scale strategy. +* **ref_z_strategy** regproc, optional function that provides + the Z-scale strategy. It returns the base Z level for the dataset. It should have these arguments: - **table_name** regclass, table to compute the reference Z scale for -* **reduction_strategy** regproc, function that provides the reduction strategy - to generate an overview table from a table for a smaller scale (higher Z number). +* **reduction_strategy** regproc, optional function that provides + the reduction strategy to generate an overview table from a table + for a smaller scale (higher Z number). It returns the name of the generated table. It should have these arguments: - **base_table_name** regclass, base table to be reduced. diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 987f6c5..83e29ea 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -257,9 +257,8 @@ AS $$ PERFORM _CDB_Add_Indexes(overview_table); - -- TODO: we'll need to store metadata somewhere to define - -- which overlay levels are available. Here we should add this metadata - -- (or replace existing metadata) + -- TODO: If metadata about existing overviews is to be stored + -- it should be done here (CDB_Overviews would consume such metadata) END $$ LANGUAGE PLPGSQL; @@ -417,7 +416,6 @@ AS $$ SELECT string_agg(s.column, ',') FROM ( SELECT * FROM cols ) AS s INTO columns; - RAISE NOTICE 'COLUMNS: %s', columns; EXECUTE Format('DROP TABLE IF EXISTS %s CASCADE;', overview_rel); @@ -474,8 +472,6 @@ DECLARE overview_tables REGCLASS[]; overviews_step integer := 1; BEGIN - -- TODO: adjust statement_timeout here based on input table size? - -- Determine the referece zoom level EXECUTE 'SELECT ' || quote_ident(refscale_strategy::text) || Format('(''%s'');', reloid) INTO ref_z; From 5b47c512210fd38554edb8d3d36603f823bb26fc Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Tue, 12 Jan 2016 15:35:50 +0100 Subject: [PATCH 40/52] Add function to drop overviews --- scripts-available/CDB_Overviews.sql | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 83e29ea..e25875b 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -1,3 +1,18 @@ +CREATE OR REPLACE FUNCTION CDB_DropOverviews(reloid REGCLASS) +RETURNS void +AS $$ +DECLARE + row record; +BEGIN + FOR row IN + SELECT * FROM CDB_Overviews(reloid) + LOOP + EXECUTE Format('DROP TABLE %I;', row.overview_table); + RAISE NOTICE 'Dropped overview for level %: %', row.z, row.overview_table; + END LOOP; +END; +$$ LANGUAGE PLPGSQL VOLATILE; + -- Return existing overviews (if any) for a given dataset table -- Scope: public -- Parameters From d352e1c46390cd105a25c5ebd53d9225f4f148b6 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Tue, 12 Jan 2016 15:36:07 +0100 Subject: [PATCH 41/52] Update Overviews tests --- test/CDB_OverviewsTest.sql | 8 ++++++++ test/CDB_OverviewsTest_expect | 15 +++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/test/CDB_OverviewsTest.sql b/test/CDB_OverviewsTest.sql index 49aadae..2ef99ae 100644 --- a/test/CDB_OverviewsTest.sql +++ b/test/CDB_OverviewsTest.sql @@ -8,12 +8,20 @@ SELECT _CDB_Aggregated_Attributes_Expression('base_bare_t'::regclass); SELECT _CDB_Aggregated_Attributes_Expression('base_bare_t'::regclass, 'tab'); SELECT CDB_CreateOverviews('base_bare_t'::regclass); +SELECT count(*) FROM base_bare_t_ov5; + SELECT _CDB_Aggregable_Attributes_Expression('base_t'::regclass); SELECT _CDB_Aggregated_Attributes_Expression('base_t'::regclass); SELECT _CDB_Aggregated_Attributes_Expression('base_t'::regclass, 'tab'); SELECT CDB_CreateOverviews('base_t'::regclass); +SELECT count(*) FROM base_t_ov5; + + +SELECT CDB_DropOverviews('base_bare_t'::regclass); +SELECT CDB_DropOverviews('base_t'::regclass); +SELECT count(*) FROM base_t_ov5; DROP TABLE base_bare_t; DROP TABLE base_t; diff --git a/test/CDB_OverviewsTest_expect b/test/CDB_OverviewsTest_expect index d18d82d..29d79a7 100644 --- a/test/CDB_OverviewsTest_expect +++ b/test/CDB_OverviewsTest_expect @@ -6,10 +6,17 @@ INSERT 0 1114 -{base_bare_t_ov5,base_bare_t_ov3,base_bare_t_ov1} +{base_bare_t_ov5,base_bare_t_ov4,base_bare_t_ov3,base_bare_t_ov2,base_bare_t_ov1,base_bare_t_ov0} +125 number,int_number,name,start -AVG(number)::double precision AS number,AVG(int_number)::integer AS int_number,''::text AS name,NULL::date AS start -AVG(tab.number)::double precision AS number,AVG(tab.int_number)::integer AS int_number,''::text AS name,NULL::date AS start -{base_t_ov5,base_t_ov3,base_t_ov1} +AVG(number)::double precision AS number,AVG(int_number)::integer AS int_number,CASE count(*) WHEN 1 THEN string_agg(name,'/') ELSE '*' END::text AS name,CASE count(*) WHEN 1 THEN MIN(start) ELSE NULL END::date AS start +AVG(tab.number)::double precision AS number,AVG(tab.int_number)::integer AS int_number,CASE count(*) WHEN 1 THEN string_agg(tab.name,'/') ELSE '*' END::text AS name,CASE count(*) WHEN 1 THEN MIN(tab.start) ELSE NULL END::date AS start +{base_t_ov5,base_t_ov4,base_t_ov3,base_t_ov2,base_t_ov1,base_t_ov0} +125 + + +ERROR: relation "base_t_ov5" does not exist +LINE 1: SELECT count(*) FROM base_t_ov5; + ^ DROP TABLE DROP TABLE From a9e2d199189c885acca1d97a04a0fd36a675f3c6 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Tue, 12 Jan 2016 16:20:11 +0100 Subject: [PATCH 42/52] Document CDB_DropOverviews --- doc/CDB_Overviews.md | 20 ++++++++++++++++++-- scripts-available/CDB_Overviews.sql | 4 ++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/doc/CDB_Overviews.md b/doc/CDB_Overviews.md index 019a856..2f2a006 100644 --- a/doc/CDB_Overviews.md +++ b/doc/CDB_Overviews.md @@ -11,8 +11,9 @@ The statement timeout may need to be adjusted before using this function, as overview creation for large tables is a time-consuming operation. The `CDB_Overviews` function can be used determine what overview tables -exist for a given dataset table and which zoom levels correspond tt +exist for a given dataset table and which zoom levels correspond to it. +The `CDB_DropOverviews` remove a dataset's existing overviews. ### CDB_CreateOverviews @@ -49,7 +50,8 @@ CDB_CreateOverviews(table_name, ref_z_strategy, reduction_strategy) ### CDB_Overviews -Obtain overview metadata for a given table (existing overviews) +Obtain overview metadata for a given table (existing overviews). +The returned relation will be empty if the table has no overviews. ```sql SELECT CDB_Overviews('table_name'); @@ -61,3 +63,17 @@ SELECT CDB_Overviews('table_name'); CDB_Overviews(table_name) * **table_name** regclass, table to obtain existing overviews for + +### CDB_DropOverviews + +Remove the overviews of a table, if present. + +```sql +SELECT CDB_DropOverviews('table_name'); +``` + +#### Arguments + +CDB_Overviews(table_name) + +* **table_name** regclass, table for which to drop existing overviews. diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index e25875b..2776f53 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -1,3 +1,7 @@ +-- Remove a dataset's existing overview tables. +-- Scope: public +-- Parameters: +-- reloid: oid of the table. CREATE OR REPLACE FUNCTION CDB_DropOverviews(reloid REGCLASS) RETURNS void AS $$ From 46bc774d38c080613b93a392ebc3878875395521 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Wed, 13 Jan 2016 18:24:06 +0100 Subject: [PATCH 43/52] Fix CDB_Overviews for the case that the table name requires quoting --- scripts-available/CDB_Overviews.sql | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 2776f53..d150507 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -26,11 +26,15 @@ $$ LANGUAGE PLPGSQL VOLATILE; CREATE OR REPLACE FUNCTION CDB_Overviews(reloid REGCLASS) RETURNS TABLE(z integer, overview_table REGCLASS) AS $$ + -- FIXME: this will fail if the overview tables + -- require a explicit schema name + -- possible solutions: return table names as text instead of regclass + -- or add schema of reloid before casting to regclass SELECT substring(cdb_usertables from '\d+$')::integer as z, cdb_usertables::regclass as overview_table FROM CDB_UserTables() - WHERE cdb_usertables SIMILAR TO reloid::text || '_ov[\d]+' + WHERE cdb_usertables SIMILAR TO (SELECT relname FROM pg_class WHERE oid=reloid) || '_ov[\d]+' ORDER BY z; $$ LANGUAGE SQL; From 7033a8d9ac6b7c668883f5058afa02b81c12e65b Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Wed, 13 Jan 2016 18:49:27 +0100 Subject: [PATCH 44/52] Fixes for table names that require quotes or which include a schema name Some cases left unsolved, with FIXME comments --- scripts-available/CDB_Overviews.sql | 44 ++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index d150507..06ed19b 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -11,7 +11,7 @@ BEGIN FOR row IN SELECT * FROM CDB_Overviews(reloid) LOOP - EXECUTE Format('DROP TABLE %I;', row.overview_table); + EXECUTE Format('DROP TABLE %s;', row.overview_table); RAISE NOTICE 'Dropped overview for level %: %', row.z, row.overview_table; END LOOP; END; @@ -38,6 +38,22 @@ AS $$ ORDER BY z; $$ LANGUAGE SQL; +-- Schema and relation names of a table given its reloid +-- Scope: private. +-- Parameters +-- reloid: oid of the table. +-- Return (schema_name, table_name) +-- note that returned names will be quoted if necessary +CREATE OR REPLACE FUNCTION _cdb_split_table_name(reloid REGCLASS, OUT schema_name TEXT, OUT table_name TEXT) +AS $$ + BEGIN + SELECT n.nspname, c.relname + INTO STRICT schema_name, table_name + FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid + WHERE c.oid = reloid; + END +$$ LANGUAGE PLPGSQL IMMUTABLE; + -- Calculate the estimated extent of a cartodbfy'ed table. -- Scope: private. -- Parameters @@ -183,23 +199,24 @@ $$ LANGUAGE PLPGSQL STABLE; -- overview) from which the overview is being generated. -- ref_z Z level of the reference table -- overview_z Z level of the overview to be named, must be smaller than ref_z --- Return value: the name to be used for the overview +-- Return value: the name to be used for the overview. The name is always +-- unqualified (does not include a schema name). CREATE OR REPLACE FUNCTION _CDB_Overview_Name(ref REGCLASS, ref_z INTEGER, overview_z INTEGER) RETURNS TEXT AS $$ DECLARE + schema_name TEXT; base TEXT; suffix TEXT; is_overview BOOLEAN; BEGIN + SELECT * FROM _cdb_split_table_name(ref) INTO schema_name, base; suffix := Format('_ov%s', ref_z); - SELECT ref::text LIKE Format('%%%s', suffix) INTO is_overview; + SELECT base LIKE Format('%%%s', suffix) INTO is_overview; IF is_overview THEN - SELECT substring(ref::text FROM 1 FOR length(ref::text)-length(suffix)) INTO base; - ELSE - base := ref; + SELECT substring(base FROM 1 FOR length(base)-length(suffix)) INTO base; END IF; - RETURN Format('%s_ov%s', base::text, overview_z); + RETURN Format('%s_ov%s', base, overview_z); END $$ LANGUAGE PLPGSQL IMMUTABLE; @@ -224,7 +241,8 @@ AS $$ overview_rel := _CDB_Overview_Name(reloid, ref_z, overview_z); fraction := power(2, 2*(overview_z - ref_z)); - EXECUTE Format('DROP TABLE IF EXISTS %s CASCADE;', overview_rel); + -- FIXME: handle schema name for overview_rel if reloid requires it + EXECUTE Format('DROP TABLE IF EXISTS %I CASCADE;', overview_rel); -- Estimate number of rows SELECT reltuples, relpages FROM pg_class INTO STRICT class_info @@ -233,12 +251,12 @@ AS $$ IF class_info.relpages < 2 OR fraction > 0.5 THEN -- We'll avoid possible CDB_RandomTids problems EXECUTE Format(' - CREATE TABLE %s AS SELECT * FROM %s WHERE random() < %s; + CREATE TABLE %I AS SELECT * FROM %s WHERE random() < %s; ', overview_rel, reloid, fraction); ELSE num_samples := ceil(class_info.reltuples*fraction); EXECUTE Format(' - CREATE TABLE %1$s AS SELECT * FROM %2$s + CREATE TABLE %1$I AS SELECT * FROM %2$s WHERE ctid = ANY ( ARRAY[ (SELECT CDB_RandomTids(''%2$s'', %3$s)) @@ -440,15 +458,15 @@ AS $$ SELECT * FROM cols ) AS s INTO columns; - - EXECUTE Format('DROP TABLE IF EXISTS %s CASCADE;', overview_rel); + -- FIXME: handle schema name for overview_rel if reloid requires it + EXECUTE Format('DROP TABLE IF EXISTS %I CASCADE;', overview_rel); -- Now we cluster the data using a grid of size grid_m -- and selecte the centroid (average coordinates) of each cluster. -- If we had a selected numeric attribute of interest we could use it -- as a weight for the average coordinates. EXECUTE Format(' - CREATE TABLE %3$s AS + CREATE TABLE %3$I AS WITH clusters AS ( SELECT %5$s From 1ebaeb76ac94b13214c07d7bb19b1819cbb89a04 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Tue, 26 Jan 2016 10:39:26 +0100 Subject: [PATCH 45/52] Overload CDB_Overviews to accept either a single table or an array The result of CDB_Overviews has been expandend with a base_table column --- doc/CDB_Overviews.md | 28 +++++++++++++++++++++++++++- scripts-available/CDB_Overviews.sql | 29 +++++++++++++++++++++++++++-- test/CDB_OverviewsTest.sql | 3 +++ test/CDB_OverviewsTest_expect | 18 ++++++++++++++++++ 4 files changed, 75 insertions(+), 3 deletions(-) diff --git a/doc/CDB_Overviews.md b/doc/CDB_Overviews.md index 2f2a006..3516b00 100644 --- a/doc/CDB_Overviews.md +++ b/doc/CDB_Overviews.md @@ -53,16 +53,42 @@ CDB_CreateOverviews(table_name, ref_z_strategy, reduction_strategy) Obtain overview metadata for a given table (existing overviews). The returned relation will be empty if the table has no overviews. +The function can be applied to a single table: + ```sql SELECT CDB_Overviews('table_name'); --- Return existing overview Z levels and corresponding tables ``` +Or to multiple tables passed as an array; this can be used +to obtain the overviews that can be applied to a query by +combining it with `CDB_QueryTablesText`: + +```sql +SELECT CDB_Overviews(CDB_QueryTablesText('SELECT * FROM table1, table2')); +--- Return existing overview Z levels and corresponding tables +``` + +The result of `CDB_Overviews` has three columns: + +| base_table | z | overview_table | +|------------+---+----------------| +| table1 | 1 | table1_ov1 | +| table1 | 2 | table1_ov2 | +| table1 | 4 | table1_ov4 | +| table2 | 1 | table1_ov1 | +| table2 | 2 | table1_ov2 | + #### Arguments CDB_Overviews(table_name) -* **table_name** regclass, table to obtain existing overviews for +* **table_name** regclass, oid of table to obtain existing overviews for + +CDB_Overviews(table_names) + +* **table_names** regclass[], array of table oids + ### CDB_DropOverviews diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 06ed19b..9824882 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -17,20 +17,24 @@ BEGIN END; $$ LANGUAGE PLPGSQL VOLATILE; + + -- Return existing overviews (if any) for a given dataset table -- Scope: public -- Parameters -- reloid: oid of the input table. -- Return relation of overviews for the table with --- z level of the overview and overview table, ordered by z. +-- the base table oid, +-- z level of the overview and overview table oid, ordered by z. CREATE OR REPLACE FUNCTION CDB_Overviews(reloid REGCLASS) -RETURNS TABLE(z integer, overview_table REGCLASS) +RETURNS TABLE(base_table REGCLASS, z integer, overview_table REGCLASS) AS $$ -- FIXME: this will fail if the overview tables -- require a explicit schema name -- possible solutions: return table names as text instead of regclass -- or add schema of reloid before casting to regclass SELECT + reloid as base_table, substring(cdb_usertables from '\d+$')::integer as z, cdb_usertables::regclass as overview_table FROM CDB_UserTables() @@ -38,6 +42,27 @@ AS $$ ORDER BY z; $$ LANGUAGE SQL; +-- Return existing overviews (if any) for multiple dataset tables. +-- Scope: public +-- Parameters +-- tables: Array of input tables oids +-- Return relation of overviews for the table with +-- the base table oid, +-- z level of the overview and overview table oid, ordered by z. +-- Note: CDB_Overviews can be applied to the result of CDB_QueryTablesText +-- to obtain the overviews applicable to a query. +CREATE OR REPLACE FUNCTION CDB_Overviews(tables regclass[]) +RETURNS TABLE(base_table REGCLASS, z integer, overview_table REGCLASS) +AS $$ + SELECT + base_table::regclass AS base_table, substring(cdb_usertables from '\d+$')::integer as z, + cdb_usertables::regclass as overview_table + FROM + CDB_UserTables(), unnest(tables) base_table + WHERE cdb_usertables SIMILAR TO (SELECT relname FROM pg_class WHERE oid=base_table) || '_ov[\d]+' + ORDER BY base_table, z; +$$ LANGUAGE SQL; + -- Schema and relation names of a table given its reloid -- Scope: private. -- Parameters diff --git a/test/CDB_OverviewsTest.sql b/test/CDB_OverviewsTest.sql index 2ef99ae..8cea584 100644 --- a/test/CDB_OverviewsTest.sql +++ b/test/CDB_OverviewsTest.sql @@ -18,6 +18,9 @@ SELECT _CDB_Aggregated_Attributes_Expression('base_t'::regclass, 'tab'); SELECT CDB_CreateOverviews('base_t'::regclass); SELECT count(*) FROM base_t_ov5; +SELECT CDB_Overviews('base_t'::regclass); +SELECT CDB_Overviews(ARRAY['base_t'::regclass, 'base_bare_t'::regclass]); + SELECT CDB_DropOverviews('base_bare_t'::regclass); SELECT CDB_DropOverviews('base_t'::regclass); diff --git a/test/CDB_OverviewsTest_expect b/test/CDB_OverviewsTest_expect index 29d79a7..468f05c 100644 --- a/test/CDB_OverviewsTest_expect +++ b/test/CDB_OverviewsTest_expect @@ -13,6 +13,24 @@ AVG(number)::double precision AS number,AVG(int_number)::integer AS int_number,C AVG(tab.number)::double precision AS number,AVG(tab.int_number)::integer AS int_number,CASE count(*) WHEN 1 THEN string_agg(tab.name,'/') ELSE '*' END::text AS name,CASE count(*) WHEN 1 THEN MIN(tab.start) ELSE NULL END::date AS start {base_t_ov5,base_t_ov4,base_t_ov3,base_t_ov2,base_t_ov1,base_t_ov0} 125 +(base_t,0,base_t_ov0) +(base_t,1,base_t_ov1) +(base_t,2,base_t_ov2) +(base_t,3,base_t_ov3) +(base_t,4,base_t_ov4) +(base_t,5,base_t_ov5) +(base_bare_t,0,base_bare_t_ov0) +(base_bare_t,1,base_bare_t_ov1) +(base_bare_t,2,base_bare_t_ov2) +(base_bare_t,3,base_bare_t_ov3) +(base_bare_t,4,base_bare_t_ov4) +(base_bare_t,5,base_bare_t_ov5) +(base_t,0,base_t_ov0) +(base_t,1,base_t_ov1) +(base_t,2,base_t_ov2) +(base_t,3,base_t_ov3) +(base_t,4,base_t_ov4) +(base_t,5,base_t_ov5) ERROR: relation "base_t_ov5" does not exist From 474de01757eaf73a8cca326d966b35462ffc091d Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Tue, 26 Jan 2016 13:20:28 +0100 Subject: [PATCH 46/52] Change the overview table naming scheme The scheme is changed from table_ovN to _vovw_N_table for lower collision probability. Also future naming changes will be easier by using the functions _CDB_OverviewTableDiscriminator, _CDB_OverviewTableName, _CDB_IsOverviewTableOf, etc. --- scripts-available/CDB_Overviews.sql | 92 +++++++++++++++++++++++++---- test/CDB_OverviewsTest.sql | 7 +-- test/CDB_OverviewsTest_expect | 44 +++++++------- 3 files changed, 104 insertions(+), 39 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 9824882..6a17574 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -1,3 +1,72 @@ +-- Pattern that can be used to detect overview tables and Extract +-- the intended zoom level from the table name. +-- Scope: private. +CREATE OR REPLACE FUNCTION _CDB_OverviewTableDiscriminator() +RETURNS TEXT +AS $$ + BEGIN + RETURN '\A_vovw_(\d+)_'; + END; +$$ LANGUAGE PLPGSQL IMMUTABLE; +-- substring(tablename from _CDB_OverviewTableDiscriminator()) + + +-- Pattern matched by the overview tables of a given base table name. +-- Scope: private. +CREATE OR REPLACE FUNCTION _CDB_OverviewTablePattern(base_table TEXT) +RETURNS TEXT +AS $$ + BEGIN + RETURN _CDB_OverviewTableDiscriminator() || base_table; + END; +$$ LANGUAGE PLPGSQL IMMUTABLE; +-- tablename SIMILAR TO _CDB_OverviewTablePattern(base_table) + +-- Name of an overview table, given the base table name and the Z level +-- Scope: private. +CREATE OR REPLACE FUNCTION _CDB_OverviewTableName(base_table TEXT, z INTEGER) +RETURNS TEXT +AS $$ + BEGIN + RETURN '_vovw_' || z::text || '_' || base_table; + END; +$$ LANGUAGE PLPGSQL IMMUTABLE; + +-- Condition to check if a tabla is an overview table of some base table +-- Scope: private. +CREATE OR REPLACE FUNCTION _CDB_IsOverviewTableOf(base_table TEXT, otable TEXT) +RETURNS BOOLEAN +AS $$ + BEGIN + RETURN otable SIMILAR TO _CDB_OverviewTablePattern(base_table); + END; +$$ LANGUAGE PLPGSQL IMMUTABLE; + +-- Extract the Z level from an overview table name +-- Scope: private. +CREATE OR REPLACE FUNCTION _CDB_OverviewTableZ(otable TEXT) +RETURNS INTEGER +AS $$ + BEGIN + RETURN substring(otable from _CDB_OverviewTableDiscriminator())::integer; + END; +$$ LANGUAGE PLPGSQL IMMUTABLE; + +-- Name of the base table corresponding to an overview table +-- Scope: private. +CREATE OR REPLACE FUNCTION _CDB_OverviewBaseTableName(overview_table TEXT) +RETURNS TEXT +AS $$ + BEGIN + IF _CDB_OverviewTableZ(overview_table) IS NULL THEN + RETURN overview_table; + ELSE + RETURN regexp_replace(overview_table, _CDB_OverviewTableDiscriminator(), ''); + END IF; + END; +$$ LANGUAGE PLPGSQL IMMUTABLE; + + -- Remove a dataset's existing overview tables. -- Scope: public -- Parameters: @@ -34,11 +103,11 @@ AS $$ -- possible solutions: return table names as text instead of regclass -- or add schema of reloid before casting to regclass SELECT - reloid as base_table, - substring(cdb_usertables from '\d+$')::integer as z, - cdb_usertables::regclass as overview_table + reloid AS base_table, + _CDB_OverviewTableZ(cdb_usertables) AS z, + cdb_usertables::regclass AS overview_table FROM CDB_UserTables() - WHERE cdb_usertables SIMILAR TO (SELECT relname FROM pg_class WHERE oid=reloid) || '_ov[\d]+' + WHERE _CDB_IsOverviewTableOf((SELECT relname FROM pg_class WHERE oid=reloid), cdb_usertables) ORDER BY z; $$ LANGUAGE SQL; @@ -55,11 +124,12 @@ CREATE OR REPLACE FUNCTION CDB_Overviews(tables regclass[]) RETURNS TABLE(base_table REGCLASS, z integer, overview_table REGCLASS) AS $$ SELECT - base_table::regclass AS base_table, substring(cdb_usertables from '\d+$')::integer as z, - cdb_usertables::regclass as overview_table + base_table::regclass AS base_table, + _CDB_OverviewTableZ(cdb_usertables) AS z, + cdb_usertables::regclass AS overview_table FROM CDB_UserTables(), unnest(tables) base_table - WHERE cdb_usertables SIMILAR TO (SELECT relname FROM pg_class WHERE oid=base_table) || '_ov[\d]+' + WHERE _CDB_IsOverviewTableOf((SELECT relname FROM pg_class WHERE oid=base_table), cdb_usertables) ORDER BY base_table, z; $$ LANGUAGE SQL; @@ -236,12 +306,8 @@ AS $$ is_overview BOOLEAN; BEGIN SELECT * FROM _cdb_split_table_name(ref) INTO schema_name, base; - suffix := Format('_ov%s', ref_z); - SELECT base LIKE Format('%%%s', suffix) INTO is_overview; - IF is_overview THEN - SELECT substring(base FROM 1 FOR length(base)-length(suffix)) INTO base; - END IF; - RETURN Format('%s_ov%s', base, overview_z); + SELECT _CDB_OverviewBaseTableName(base) INTO base; + RETURN _CDB_OverviewTableName(base, overview_z); END $$ LANGUAGE PLPGSQL IMMUTABLE; diff --git a/test/CDB_OverviewsTest.sql b/test/CDB_OverviewsTest.sql index 8cea584..ad8ded4 100644 --- a/test/CDB_OverviewsTest.sql +++ b/test/CDB_OverviewsTest.sql @@ -8,7 +8,7 @@ SELECT _CDB_Aggregated_Attributes_Expression('base_bare_t'::regclass); SELECT _CDB_Aggregated_Attributes_Expression('base_bare_t'::regclass, 'tab'); SELECT CDB_CreateOverviews('base_bare_t'::regclass); -SELECT count(*) FROM base_bare_t_ov5; +SELECT count(*) FROM _vovw_5_base_bare_t; SELECT _CDB_Aggregable_Attributes_Expression('base_t'::regclass); @@ -16,15 +16,14 @@ SELECT _CDB_Aggregated_Attributes_Expression('base_t'::regclass); SELECT _CDB_Aggregated_Attributes_Expression('base_t'::regclass, 'tab'); SELECT CDB_CreateOverviews('base_t'::regclass); -SELECT count(*) FROM base_t_ov5; +SELECT count(*) FROM _vovw_5_base_t; SELECT CDB_Overviews('base_t'::regclass); SELECT CDB_Overviews(ARRAY['base_t'::regclass, 'base_bare_t'::regclass]); - SELECT CDB_DropOverviews('base_bare_t'::regclass); SELECT CDB_DropOverviews('base_t'::regclass); -SELECT count(*) FROM base_t_ov5; +SELECT count(*) FROM _vovw_5_base_t; DROP TABLE base_bare_t; DROP TABLE base_t; diff --git a/test/CDB_OverviewsTest_expect b/test/CDB_OverviewsTest_expect index 468f05c..8673b7e 100644 --- a/test/CDB_OverviewsTest_expect +++ b/test/CDB_OverviewsTest_expect @@ -6,35 +6,35 @@ INSERT 0 1114 -{base_bare_t_ov5,base_bare_t_ov4,base_bare_t_ov3,base_bare_t_ov2,base_bare_t_ov1,base_bare_t_ov0} +{_vovw_5_base_bare_t,_vovw_4_base_bare_t,_vovw_3_base_bare_t,_vovw_2_base_bare_t,_vovw_1_base_bare_t,_vovw_0_base_bare_t} 125 number,int_number,name,start AVG(number)::double precision AS number,AVG(int_number)::integer AS int_number,CASE count(*) WHEN 1 THEN string_agg(name,'/') ELSE '*' END::text AS name,CASE count(*) WHEN 1 THEN MIN(start) ELSE NULL END::date AS start AVG(tab.number)::double precision AS number,AVG(tab.int_number)::integer AS int_number,CASE count(*) WHEN 1 THEN string_agg(tab.name,'/') ELSE '*' END::text AS name,CASE count(*) WHEN 1 THEN MIN(tab.start) ELSE NULL END::date AS start -{base_t_ov5,base_t_ov4,base_t_ov3,base_t_ov2,base_t_ov1,base_t_ov0} +{_vovw_5_base_t,_vovw_4_base_t,_vovw_3_base_t,_vovw_2_base_t,_vovw_1_base_t,_vovw_0_base_t} 125 -(base_t,0,base_t_ov0) -(base_t,1,base_t_ov1) -(base_t,2,base_t_ov2) -(base_t,3,base_t_ov3) -(base_t,4,base_t_ov4) -(base_t,5,base_t_ov5) -(base_bare_t,0,base_bare_t_ov0) -(base_bare_t,1,base_bare_t_ov1) -(base_bare_t,2,base_bare_t_ov2) -(base_bare_t,3,base_bare_t_ov3) -(base_bare_t,4,base_bare_t_ov4) -(base_bare_t,5,base_bare_t_ov5) -(base_t,0,base_t_ov0) -(base_t,1,base_t_ov1) -(base_t,2,base_t_ov2) -(base_t,3,base_t_ov3) -(base_t,4,base_t_ov4) -(base_t,5,base_t_ov5) +(base_t,0,_vovw_0_base_t) +(base_t,1,_vovw_1_base_t) +(base_t,2,_vovw_2_base_t) +(base_t,3,_vovw_3_base_t) +(base_t,4,_vovw_4_base_t) +(base_t,5,_vovw_5_base_t) +(base_bare_t,0,_vovw_0_base_bare_t) +(base_bare_t,1,_vovw_1_base_bare_t) +(base_bare_t,2,_vovw_2_base_bare_t) +(base_bare_t,3,_vovw_3_base_bare_t) +(base_bare_t,4,_vovw_4_base_bare_t) +(base_bare_t,5,_vovw_5_base_bare_t) +(base_t,0,_vovw_0_base_t) +(base_t,1,_vovw_1_base_t) +(base_t,2,_vovw_2_base_t) +(base_t,3,_vovw_3_base_t) +(base_t,4,_vovw_4_base_t) +(base_t,5,_vovw_5_base_t) -ERROR: relation "base_t_ov5" does not exist -LINE 1: SELECT count(*) FROM base_t_ov5; +ERROR: relation "_vovw_5_base_t" does not exist +LINE 1: SELECT count(*) FROM _vovw_5_base_t; ^ DROP TABLE DROP TABLE From b8d50204dd77075bc2f5afcc07a021a8a67a6a93 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Wed, 27 Jan 2016 15:24:04 +0100 Subject: [PATCH 47/52] Avoid aggregation which causes out-of-memory crashes in PostgreSQL The use of multiple string_agg functions, even if applied to groups of one single record causes out of memory crashes in PG 9.3.4 for some (large) tables. --- scripts-available/CDB_Overviews.sql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 6a17574..ab2e924 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -463,7 +463,9 @@ BEGIN -- 'A', 'B', 'A', 'C', 'D' => 'A/B/C/...' -- Other ideas: if value is unique then use it, otherwise use something -- like '*' or '(varies)' or '(multiple values)', or NULL - RETURN 'CASE count(*) WHEN 1 THEN string_agg(' || qualified_column || ',''/'') ELSE ''*''' || ' END::' || column_type; + -- Using 'string_agg(' || qualified_column || ',''/'')' + -- here causes + RETURN 'CASE count(*) WHEN 1 THEN MIN(' || qualified_column || ') ELSE NULL END::' || column_type; ELSE RETURN 'CASE count(*) WHEN 1 THEN MIN(' || qualified_column || ') ELSE NULL END::' || column_type; END CASE; From 6a5e4b0460c9831abdd3b48d0c608422e7ebdd12 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Wed, 27 Jan 2016 16:54:30 +0100 Subject: [PATCH 48/52] Fix overviews tests The aggregation method for strings has changed --- test/CDB_OverviewsTest_expect | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/CDB_OverviewsTest_expect b/test/CDB_OverviewsTest_expect index 8673b7e..ab94049 100644 --- a/test/CDB_OverviewsTest_expect +++ b/test/CDB_OverviewsTest_expect @@ -9,8 +9,8 @@ INSERT 0 1114 {_vovw_5_base_bare_t,_vovw_4_base_bare_t,_vovw_3_base_bare_t,_vovw_2_base_bare_t,_vovw_1_base_bare_t,_vovw_0_base_bare_t} 125 number,int_number,name,start -AVG(number)::double precision AS number,AVG(int_number)::integer AS int_number,CASE count(*) WHEN 1 THEN string_agg(name,'/') ELSE '*' END::text AS name,CASE count(*) WHEN 1 THEN MIN(start) ELSE NULL END::date AS start -AVG(tab.number)::double precision AS number,AVG(tab.int_number)::integer AS int_number,CASE count(*) WHEN 1 THEN string_agg(tab.name,'/') ELSE '*' END::text AS name,CASE count(*) WHEN 1 THEN MIN(tab.start) ELSE NULL END::date AS start +AVG(number)::double precision AS number,AVG(int_number)::integer AS int_number,CASE count(*) WHEN 1 THEN MIN(name) ELSE NULL END::text AS name,CASE count(*) WHEN 1 THEN MIN(start) ELSE NULL END::date AS start +AVG(tab.number)::double precision AS number,AVG(tab.int_number)::integer AS int_number,CASE count(*) WHEN 1 THEN MIN(tab.name) ELSE NULL END::text AS name,CASE count(*) WHEN 1 THEN MIN(tab.start) ELSE NULL END::date AS start {_vovw_5_base_t,_vovw_4_base_t,_vovw_3_base_t,_vovw_2_base_t,_vovw_1_base_t,_vovw_0_base_t} 125 (base_t,0,_vovw_0_base_t) From 66387c2d44c910d4085def94bf61e9af5060ba77 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Thu, 28 Jan 2016 16:32:40 +0100 Subject: [PATCH 49/52] Make CDB_CreateOverviews a SECURITY DEFINER function So that it can change the permissions of overview tables (by updating pg_class) even when executed by non-priviledeged users. --- scripts-available/CDB_Overviews.sql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index ab2e924..1d6571d 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -1,3 +1,5 @@ +-- security definer + -- Pattern that can be used to detect overview tables and Extract -- the intended zoom level from the table name. -- Scope: private. @@ -629,4 +631,4 @@ BEGIN RETURN overview_tables; END; -$$ LANGUAGE PLPGSQL; +$$ LANGUAGE PLPGSQL SECURITY DEFINER; From 93d4a6ead077654df3edb85aeedab255148f4715 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Thu, 28 Jan 2016 17:04:06 +0100 Subject: [PATCH 50/52] Restrict SECURITY DEFINER to overview registration And check it is applied only overview tables with valid names --- scripts-available/CDB_Overviews.sql | 52 +++++++++++++++++++---------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 1d6571d..f0c2931 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -368,33 +368,51 @@ $$ LANGUAGE PLPGSQL; -- dataset: oid of the input dataset table, It must be a cartodbfy'ed table. -- overview_table: oid of the overview table to be registered. -- overview_z: intended Z level for the overview table +-- This function is declared SECURITY DEFINER so it executes with the privileges +-- of the function creator to have a chance to alter the privileges of the +-- overview table to match those of the dataset. It will only perform any change +-- if the overview table belgons to the same scheme as the dataset and it +-- matches the scheme naming for overview tables. CREATE OR REPLACE FUNCTION _CDB_Register_Overview(dataset REGCLASS, overview_table REGCLASS, overview_z INTEGER) RETURNS VOID AS $$ DECLARE sql TEXT; table_owner TEXT; + dataset_scheme TEXT; + dataset_name TEXT; + overview_scheme TEXT; + overview_name TEXT; BEGIN - -- preserve the owner of the base table - SELECT u.usename - FROM pg_catalog.pg_class c JOIN pg_catalog.pg_user u ON (c.relowner=u.usesysid) - WHERE c.relname = dataset::text - INTO table_owner; - EXECUTE Format('ALTER TABLE IF EXISTS %s OWNER TO %I;', overview_table::text, table_owner); + -- This function will only register a table as an overview table if it matches + -- the overviews naming scheme for the dataset and z level and the table belongs + -- to the same scheme as the the dataset + SELECT * FROM _cdb_split_table_name(dataset) INTO dataset_scheme, dataset_name; + SELECT * FROM _cdb_split_table_name(overview_table) INTO overview_scheme, overview_name; + IF dataset_scheme = overview_scheme AND + overview_name = _CDB_OverviewTableName(dataset_name, overview_z) THEN - -- preserve the table privileges - UPDATE pg_class c_to - SET relacl = c_from.relacl - FROM pg_class c_from - WHERE c_from.oid = dataset - AND c_to.oid = overview_table; + -- preserve the owner of the base table + SELECT u.usename + FROM pg_catalog.pg_class c JOIN pg_catalog.pg_user u ON (c.relowner=u.usesysid) + WHERE c.relname = dataset::text + INTO table_owner; + EXECUTE Format('ALTER TABLE IF EXISTS %s OWNER TO %I;', overview_table::text, table_owner); - PERFORM _CDB_Add_Indexes(overview_table); + -- preserve the table privileges + UPDATE pg_class c_to + SET relacl = c_from.relacl + FROM pg_class c_from + WHERE c_from.oid = dataset + AND c_to.oid = overview_table; - -- TODO: If metadata about existing overviews is to be stored - -- it should be done here (CDB_Overviews would consume such metadata) + PERFORM _CDB_Add_Indexes(overview_table); + + -- TODO: If metadata about existing overviews is to be stored + -- it should be done here (CDB_Overviews would consume such metadata) + END IF; END -$$ LANGUAGE PLPGSQL; +$$ LANGUAGE PLPGSQL SECURITY DEFINER; -- Dataset attributes (column names other than the -- CartoDB primary key and geometry columns) which should be aggregated @@ -631,4 +649,4 @@ BEGIN RETURN overview_tables; END; -$$ LANGUAGE PLPGSQL SECURITY DEFINER; +$$ LANGUAGE PLPGSQL; From 00bd302f017506fc3c87f838e468b61851884107 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Fri, 29 Jan 2016 16:19:35 +0100 Subject: [PATCH 51/52] Avoid creating GridCluster overviews for non-point datasets --- scripts-available/CDB_Overviews.sql | 37 ++++++++++++++++++++++++++++- test/CDB_OverviewsTest.sql | 4 ++++ test/CDB_OverviewsTest_expect | 4 ++++ test/overviews/fixtures.sql | 8 +++++++ 4 files changed, 52 insertions(+), 1 deletion(-) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index f0c2931..0673045 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -513,6 +513,28 @@ BEGIN END $$ LANGUAGE PLPGSQL STABLE; +-- Array of geometry types detected in a cartodbfied table +-- For effciency only look at a limited number of rwos. +-- Parameters +-- reloid: oid of the input table. It must be a cartodbfy'ed table. +-- Return value: array of geometry type names +CREATE OR REPLACE FUNCTION _CDB_GeometryTypes(reloid REGCLASS) +RETURNS TEXT[] +AS $$ +DECLARE + gtypes TEXT[]; +BEGIN + EXECUTE Format(' + SELECT array_agg(DISTINCT ST_GeometryType(the_geom)) FROM ( + SELECT the_geom FROM %s + WHERE (the_geom is not null) LIMIT 10 + ) as geom_types + ', reloid) + INTO gtypes; + RETURN gtypes; +END +$$ LANGUAGE PLPGSQL STABLE; + -- Experimental Overview reduction method for point datasets. -- It clusters the points using a grid, then aggregates the point in each -- cluster into a point at the centroid of the clustered records. @@ -535,7 +557,17 @@ AS $$ aggr_attributes TEXT; attributes TEXT; columns TEXT; + gtypes TEXT[]; BEGIN + SELECT _CDB_GeometryTypes(reloid) INTO gtypes; + IF array_upper(gtypes, 1) <> 1 OR gtypes[1] <> 'ST_Point' THEN + -- This strategy only supports datasets with point geomety + RETURN NULL; + RETURN 'x'; + END IF; + + --TODO: check applicability: geometry type, minimum number of points... + overview_rel := _CDB_Overview_Name(reloid, ref_z, overview_z); -- compute grid cell size using the overview_z dimension... @@ -630,7 +662,7 @@ BEGIN EXECUTE 'SELECT ' || quote_ident(refscale_strategy::text) || Format('(''%s'');', reloid) INTO ref_z; -- Determine overlay zoom levels - -- TODO: should be handled by the refscale_stragegy? + -- TODO: should be handled by the refscale_strategy? overview_z := ref_z - 1; WHILE overview_z >= 0 LOOP SELECT array_append(overviews_z, overview_z) INTO overviews_z; @@ -642,6 +674,9 @@ BEGIN base_rel := reloid; FOREACH overview_z IN ARRAY overviews_z LOOP EXECUTE 'SELECT ' || quote_ident(reduce_strategy::text) || Format('(''%s'', %s, %s);', base_rel, base_z, overview_z) INTO base_rel; + IF base_rel IS NULL THEN + EXIT; + END IF; base_z := overview_z; PERFORM _CDB_Register_Overview(reloid, base_rel, base_z); SELECT array_append(overview_tables, base_rel) INTO overview_tables; diff --git a/test/CDB_OverviewsTest.sql b/test/CDB_OverviewsTest.sql index ad8ded4..670dfe8 100644 --- a/test/CDB_OverviewsTest.sql +++ b/test/CDB_OverviewsTest.sql @@ -18,8 +18,11 @@ SELECT _CDB_Aggregated_Attributes_Expression('base_t'::regclass, 'tab'); SELECT CDB_CreateOverviews('base_t'::regclass); SELECT count(*) FROM _vovw_5_base_t; +SELECT CDB_CreateOverviews('polyg_t'::regclass); + SELECT CDB_Overviews('base_t'::regclass); SELECT CDB_Overviews(ARRAY['base_t'::regclass, 'base_bare_t'::regclass]); +SELECT CDB_Overviews('polyg_t'::regclass); SELECT CDB_DropOverviews('base_bare_t'::regclass); SELECT CDB_DropOverviews('base_t'::regclass); @@ -27,3 +30,4 @@ SELECT count(*) FROM _vovw_5_base_t; DROP TABLE base_bare_t; DROP TABLE base_t; +DROP TABLE polyg_t; diff --git a/test/CDB_OverviewsTest_expect b/test/CDB_OverviewsTest_expect index ab94049..d770199 100644 --- a/test/CDB_OverviewsTest_expect +++ b/test/CDB_OverviewsTest_expect @@ -3,6 +3,8 @@ CREATE TABLE INSERT 0 1114 CREATE TABLE INSERT 0 1114 +CREATE TABLE +INSERT 0 5 @@ -13,6 +15,7 @@ AVG(number)::double precision AS number,AVG(int_number)::integer AS int_number,C AVG(tab.number)::double precision AS number,AVG(tab.int_number)::integer AS int_number,CASE count(*) WHEN 1 THEN MIN(tab.name) ELSE NULL END::text AS name,CASE count(*) WHEN 1 THEN MIN(tab.start) ELSE NULL END::date AS start {_vovw_5_base_t,_vovw_4_base_t,_vovw_3_base_t,_vovw_2_base_t,_vovw_1_base_t,_vovw_0_base_t} 125 + (base_t,0,_vovw_0_base_t) (base_t,1,_vovw_1_base_t) (base_t,2,_vovw_2_base_t) @@ -38,3 +41,4 @@ LINE 1: SELECT count(*) FROM _vovw_5_base_t; ^ DROP TABLE DROP TABLE +DROP TABLE diff --git a/test/overviews/fixtures.sql b/test/overviews/fixtures.sql index bfe1ae6..3dc1679 100644 --- a/test/overviews/fixtures.sql +++ b/test/overviews/fixtures.sql @@ -2232,3 +2232,11 @@ INSERT INTO base_t VALUES (1112, 'SRID=4326;POINT(-1.544993 33.333714)'::geometry, ST_Transform('SRID=4326;POINT(-1.544993 33.333714)'::geometry, 3857)), (1113, 'SRID=4326;POINT(-1.544859 33.333711)'::geometry, ST_Transform('SRID=4326;POINT(-1.544859 33.333711)'::geometry, 3857)), (1114, 'SRID=4326;POINT(-1.544863 33.334479)'::geometry, ST_Transform('SRID=4326;POINT(-1.544863 33.334479)'::geometry, 3857)); +-- polygons table +CREATE TABLE polyg_t (cartodb_id integer, name text, the_geom geometry, the_geom_webmercator geometry); +INSERT INTO polyg_t VALUES +(1, 'A', 'SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, ST_Transform('SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, 3857)), +(2, 'B', 'SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, ST_Transform('SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, 3857)), +(3, 'C', 'SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, ST_Transform('SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, 3857)), +(4, 'D', 'SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, ST_Transform('SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, 3857)), +(5, 'E', 'SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, ST_Transform('SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, 3857)); From 06dd31f4add64f49adf7bb10e20278f9d4f79299 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Fri, 29 Jan 2016 16:51:52 +0100 Subject: [PATCH 52/52] Fix: should be floating point divistion, not integer division --- scripts-available/CDB_XYZ.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts-available/CDB_XYZ.sql b/scripts-available/CDB_XYZ.sql index fa38171..58b1998 100644 --- a/scripts-available/CDB_XYZ.sql +++ b/scripts-available/CDB_XYZ.sql @@ -6,7 +6,7 @@ CREATE OR REPLACE FUNCTION CDB_XYZ_Resolution(z INTEGER) RETURNS FLOAT8 AS $$ -- circumference divided by 256 is z0 resolution, then divide by 2^z - SELECT 40075017 / 256 / power(2, z); + SELECT 40075017.0 / 256 / power(2, z); $$ LANGUAGE SQL IMMUTABLE STRICT; -- }