-
Notifications
You must be signed in to change notification settings - Fork 1
Problemas
A maioria dos usuários "de recreio" evita baixar a Grade IBGE original pois ela aparenta ser muito pesada, tanto para a visualização de dados como para a transferência e armazenamento. Resolver esse problema também faz parte da proposta deste git.
A grade IBGE original ocupa muito espaço no banco de dados e na sua distribuição. Depois de eliminadas todas as redundâncias no banco de dados, a informação mínima resultou num conjunto bem mais compacto:
- 194M
grade_ibge1km_pop2010.csv(~22 bytes/linha)
Comparando com os ~5645M de shapefiles abertos temos 3.5% em CSV. - 24M
grade_ibge1km_pop2010.zip(comparando com os ~850M dos zips originais são 24/850 = 2,8%)
Ou seja, tanto zipado como aberto o consumo cai para ~3% do original. A criação do arquivo foi realizada pelo comando SQL:
copy (select gx,gy, pop, pop_fem_perc, is_urban::int as is_urban from grade_ibge_1kmcenters)
to '/tmp/grade_ibge1km_pop2010.csv' CSV HEADER;
-- COPY 8860553Durante o desenvolvimento do script step4 tentamos mais de uma alternativa para a construção da geometria, para conferir o comportamento da progeção. A função ótima gera cada uma das coordenadas e garante o "encaixe perfeito".
CREATE FUNCTION ibge_grid_cell( cx int, cy int, d int DEFAULT 500) RETURNS geometry AS $f$
SELECT ST_GeomFromText( format(
'POLYGON((%s %s,%s %s,%s %s,%s %s,%s %s))',
cx-d,cy-d, cx-d,cy+d, cx+d,cy+d, cx+d,cy-d, cx-d,cy-d
), 952019) AS geom
$f$ LANGUAGE SQL IMMUTABLE;A função PostGIS nativa ST_Envelope supostamente geraria o mesmo resultado com base nos mesmos parâmetros,
CREATE FUNCTION ibge_grid_envelope( cx int, cy int, d int DEFAULT 500) RETURNS geometry AS $f$
SELECT ST_Envelope( ST_Transform( ST_Buffer(ST_SetSRID(ST_MakePoint(cx,cy),952019),d), 4326 ) )
$f$ LANGUAGE SQL IMMUTABLE;Mas algumas distorções ocorreram. ERRO: o envelope precisa ser produzido na projeção correta!
CREATE FUNCTION ibge_grid_envelope( cx int, cy int, d int DEFAULT 500) RETURNS geometry AS $f$
SELECT ST_Transform( ST_Envelope( ST_Buffer(ST_SetSRID(ST_MakePoint(cx,cy),952019),d) ), 4326 ) )
$f$ LANGUAGE SQL IMMUTABLE;PENDENTE: testar novamente com a função correta.