osmc:CM/SQL: mudanças entre as edições
mSem resumo de edição |
|||
Linha 2: | Linha 2: | ||
== Teste online == | == Teste online == | ||
A visualização Web é oferecida no site AFAcodes, por exemplo as células 8a, 8b e 9 são visualizadas por <code>https://afa.codes/CM+8b,8e,9</code>. São construídas pelo ''endpoint'' <code><nowiki>https://afa.codes/geo:osmcodes:CM+{codigos}.json</nowiki></code>. Por exemplo <code>https://afa.codes/geo:osmcodes:CM+8b,8e,9.json</code>. | A visualização Web é oferecida no site AFAcodes, por exemplo as células científicas "8a", "8b" e "9" são visualizadas por <code>https://afa.codes/CM+8b,8e,9</code>. São construídas pelo ''endpoint'' <code><nowiki>https://afa.codes/geo:osmcodes:CM+{codigos}.json</nowiki></code>. Por exemplo <code>https://afa.codes/geo:osmcodes:CM+8b,8e,9.json</code>. | ||
No NGINX o ''endpoint'' redireciona a solicitação para o PostgreSQL através do PostgREST, no SQL-schema <code>api</code>. No exemplo é utilizada a chamada <code>api.osmcode_decode_scientific_absolute('8b,8e,9','CM',16)</code>. Maiores detalhes sobre a API em [[osmc:Api]]. | No NGINX o ''endpoint'' redireciona a solicitação para o PostgreSQL através do PostgREST, no SQL-schema <code>api</code>. No exemplo é utilizada a chamada <code>api.osmcode_decode_scientific_absolute('8b,8e,9','CM',16)</code>. Maiores detalhes sobre a API em [[osmc:Api]]. | ||
Linha 19: | Linha 19: | ||
INCLUDING ALL | INCLUDING ALL | ||
); | ); | ||
INSERT INTO grid_cm.l0 | INSERT INTO grid_cm.l0 | ||
SELECT * | SELECT *, ST_Transform_resilient(geom,geom4326) as geom4326 | ||
FROM osmc.decode_scientific_absolute_geoms( | FROM osmc.decode_scientific_absolute_geoms( | ||
'1,2,3,4,5,6,7,8,9,a,b,c,d', | '1,2,3,4,5,6,7,8,9,a,b,c,d', | ||
Linha 28: | Linha 28: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
A lista de de geocódigos é conhecida, faz parte da configuração do país, fixada no [https://git.afa.codes/CM/blob/main/conf.yaml#L37 git oficial do país], como ''grid_l0_cell_sci_base''. | A lista de de geocódigos no argumento da função ''decode'' é conhecida, faz parte da configuração do país, fixada no [https://git.afa.codes/CM/blob/main/conf.yaml#L37 git oficial do país], como ''grid_l0_cell_sci_base''. | ||
A tabela gerada tem a seguinte estrutura: | A tabela gerada tem a seguinte estrutura: | ||
Linha 34: | Linha 34: | ||
Column | Type | Description | Column | Type | Description | ||
----------------+----------+------------------- | ----------------+----------+------------------- | ||
gid_vbit | varbit | PK. The complete geocode (with country prefix), expressed as hierarchical bit string. | |||
code_b16h | text | Geocode, withoutout the country prefix. | |||
is_border | text | flag indicating cell intersecting the country border. | |||
geom | geometry | Original geometri, in the native SRID projection. | geom | geometry | Original geometri, in the native SRID projection. | ||
geom4326 | geometry | | geom4326 | geometry | The geometry with no projection, and without by ST_Transform_resilient(). | ||
</pre> | </pre> | ||
Os recortes podem ser obtidos pela função de recortes por jurisdição, ''osmc.grid_jurisdiction_cutcells''(), que faz simplesmente o ST_Intersect da geometria da jurisdição com as células. | Os recortes podem ser obtidos pela função de recortes por jurisdição, ''osmc.grid_jurisdiction_cutcells''(), que faz simplesmente o ST_Intersect da geometria da jurisdição com as células. A redundância na geometria, com coluna geom4326, só é necessária nas células muito grandes. Faz uso da função ST_Transform_resilient() para resolver o https://gis.stackexchange.com/q/444441/7505 | ||
==Grade L1== | ==Grade L1== |
Edição das 15h08min de 5 de junho de 2024
Documentação do processo SQL de geração das grades em Camarões, detalhando o apresentado em osmc:Metodologia/Algoritmo SQL.
Teste online
A visualização Web é oferecida no site AFAcodes, por exemplo as células científicas "8a", "8b" e "9" são visualizadas por https://afa.codes/CM+8b,8e,9
. São construídas pelo endpoint https://afa.codes/geo:osmcodes:CM+{codigos}.json
. Por exemplo https://afa.codes/geo:osmcodes:CM+8b,8e,9.json
.
No NGINX o endpoint redireciona a solicitação para o PostgreSQL através do PostgREST, no SQL-schema api
. No exemplo é utilizada a chamada api.osmcode_decode_scientific_absolute('8b,8e,9','CM',16)
. Maiores detalhes sobre a API em osmc:Api.
As funções API trabalham apenas com JSON. A função equivalente porém retornando dados SQL seria osmc.decode_scientific_absolute_geoms('8b,8e,9','CM',16)
, que discutimos neste artigo Wiki.
A geração de céulas menores, da ordem de metros ou poucos quilômetros, dispensa a inclusão de pontos, osmc.decode_scientific_absolute_geoms('8b,8e,9','CM',16,true)
.
Grade L0
A grade L0 de células inteiras e respectivos rótulos, ilustrada ao lado, foi gerada por:
DROP TABLE IF EXISTS grid_cm.l0
;
CREATE TABLE grid_cm.l0 (
LIKE osmc.tflike_decode_scientific_absolute_geoms
INCLUDING ALL
);
INSERT INTO grid_cm.l0
SELECT *, ST_Transform_resilient(geom,geom4326) as geom4326
FROM osmc.decode_scientific_absolute_geoms(
'1,2,3,4,5,6,7,8,9,a,b,c,d',
'CM',
16
);
A lista de de geocódigos no argumento da função decode é conhecida, faz parte da configuração do país, fixada no git oficial do país, como grid_l0_cell_sci_base.
A tabela gerada tem a seguinte estrutura:
Column | Type | Description ----------------+----------+------------------- gid_vbit | varbit | PK. The complete geocode (with country prefix), expressed as hierarchical bit string. code_b16h | text | Geocode, withoutout the country prefix. is_border | text | flag indicating cell intersecting the country border. geom | geometry | Original geometri, in the native SRID projection. geom4326 | geometry | The geometry with no projection, and without by ST_Transform_resilient().
Os recortes podem ser obtidos pela função de recortes por jurisdição, osmc.grid_jurisdiction_cutcells(), que faz simplesmente o ST_Intersect da geometria da jurisdição com as células. A redundância na geometria, com coluna geom4326, só é necessária nas células muito grandes. Faz uso da função ST_Transform_resilient() para resolver o https://gis.stackexchange.com/q/444441/7505
Grade L1
rascunho A grade L1 de células inteiras e respectivos rótulos, ilustrada ao lado, foi gerada por:
-- geração da sequencia completa das demais coberturas candidatas:
select array_agg(i||j) from unnest('{1,2,3,4,5,6,7,8,9,a,b,c,d,e}'::text[]) t1(i), unnest('{h,m,r,v}'::text[]) t2(j);
DROP TABLE IF EXISTS grid_cm.l1
;
CREATE TABLE grid_cm.l1 (
LIKE osmc.tflike_decode_scientific_absolute_geoms
INCLUDING ALL
);
INSERT INTO grid_cm.l1 AS
select row_number() over() as gid, *
from (
SELECT 76::bit(10) || (natcod.baseh_to_vbit('0'||lower(code),16)) as cbits,
code as b16_label,
'0'||lower(code) as prefix, geom
FROM osmc.decode_scientific_absolute_geoms(
'1h,2h,3h,4h,5h,6h,7h,8h,9h,ah,bh,ch,dh,eh,1m,2m,3m,4m,5m,6m,7m,8m,9m,am,bm,cm,dm,em,1r,2r,3r,4r,5r,6r,7r,8r,9r,ar,br,cr,dr,er,1v,2v,3v,4v,5v,6v,7v,8v,9v,av,bv,cv,dv,ev'
,'CM',16)
where st_intersects(geom, st_transform((select geom from optim.jurisdiction_geom where isolabel_ext='BR'),952019) )
) t3
;