dg:Diversos

De Documentação

No rule to make target

Ao executar make layer ou make all_layers, caso encontre um erro do tipo

make: *** No rule to make target '/var/www/dl.digital-guard.org/bae2054448855305db0fc855d2852cd5a7b369481cc03aeb809a0c3c162a2c04.zip', needed by 'parcel'.  Stop.

o arquivo especificado não está no diretório default /var/www/dl.digital-guard.org, informado na chave orig de uma jurisdição, por exemplo, em commomFirst.yaml. Significando que o arquivo está armazenado em outro lugar. Isso está indicado na tabela de-para.

Nesse caso usar:

wget -P /diretorio/para/arquivo/baixado http://dl.digital-guard.org/bae2054448855305db0fc855d2852cd5a7b369481cc03aeb809a0c3c162a2c04.zip

make me pg_db=ingestXX

make parcel orig=/diretorio/para/arquivo/baixado pg_db=ingestXX

Se o download for realizado em /var/www/dl.digital-guard.org utilizar apenas

make parcel pg_db=ingestXX

uma vez que o valor default de orig é /var/www/dl.digital-guard.org.

Observação: atualmente, common002_layerHeader.mustache interage com o usuário solicitando a confirmação de download de dl.digital-guard.org ou o fornecimento do valor correto de orig. Caso o download seja realizado, o arquivo estará localizado na respectiva sandbox do layer. Notar que se nointeraction=y não haverá interação com o usuário e o download será feito.

Clean sandbox

O processo de ingestão utiliza subpastas no caminho informado em sandbox, cujo valor default é informado no commomFirst.yaml. Antes na execução da ingestão de cada layer, o target makedirs cria ou limpa a subpasta utilizada pelo layer. Após a execução, o target clean-sandbox remove a subpasta, evitando que arquivos não mais necessários permanecem no sistema de arquivos.

Resumo do tratamento aplicado às geometrias no processo de ingestão

Dado um conjunto de geometrias:

  1. Inicialmente se garante que SRID das geometrias será 4326.

  2. Então, são selecionadas apenas as geometrias onde a função ST_IsValid é verdadeira. Sobre a definição de simplicidade e validade de geometria do OGC, consultar OGC_Validity.

  3. Em seguida, são selecionadas as geometrias onde a função ST_IsClosed é verdadeira ou forem linhas.

  4. Para as geometrias onde ST_IsSimple, ST_IsValid e ST_Intersects [1] são verdadeiras, são aplicadas as funções ST_ReducePrecision [2] e, para geometrias diferentes de ponto, ST_SimplifyPreserveTopology [3].

  5. São ingeridas, em feature_asis, as geometrias que não são nulas (IS NOT NULL) e que não são vazias, utilizando ST_IsEmpty. Além disso, são ingeridos apenas polígonos com ST_Area >= 5 e linhas com ST_Length >= 2.

  6. Às geometrias ingeridas, independentemente do tipo, são aplicadas as funções ST_PointOnSurface e ST_Geohash com maxchars=9, para obter geohash com 9 caracteres.

  7. Geometrias com geohash iguais são consideradas iguais, sendo agrupadas e representadas pela geometria que possuir o menor feature_id. Isso significa que as repetidas são removidas de feature_asis e o representante é inserido, contendo:

    7.1. is_agg: flag para indicar que é um feature_id agregado;

    7.2. properties_agg: array contendo properties dos feature_id agregados;

    7.3. geom_cmp_equals: array contendo o resultado de ST_Equals entre o representante e os agregados;

    7.4. geom_cmp_frechet: array contendo o resultado de ST_FrechetDistance entre o representante e os agregados. Apenas para geometrias do tipo linha;

    7.5. geom_cmp_intersec: array contendo medida de similaridade [4] entre polígono represente e os agregados. Apenas para geometrias do tipo polígono.

  8. Geometrias que não atendam algum dos critérios acima possuem error_mask com algum bit diferente de zero. Essas geometrias ficam disponíveis em feature_asis_discarded, tabela idêntica à feature_asis, exceto por o jsonb properties possuir a chave error_mask indicando os critérios não atendidos. Às geometrias que não são válidas, não são fechadas ou não são linhas é aplicada a função ST_MakeValid, para possibilitar o uso da função ST_PointOnSurface antes da aplicação da ST_Geohash no momento em que o geohash é obtido.

Esse processo é realizado pela função any_load no schema ingest.

O processo de ingestão utiliza uma sequencia de 12 bits, em error_mask, para indicar erros encontrados.

No inicio do processo a sequencia de bits de um item é:

error_mask=0000000000000

Dá direita para esquerda, um bit igual a 1 representa:

  • Item não intersecta a geometria da jurisdição;
  • Item não tem geometria válida;
  • Item não tem geometria simples;
  • Item tem geometria vazia;
  • Item tem área ou comprimeto menor que 5 ou 2, respectivamente;
  • Item tem geometria nula;
  • Item tem geometria com tipo diferente do estabelecido para o layer em feature_type;
  • Item duplicado. Dois items são duplicados se seus geohash de tamanho 9 são iguais;
  • Item com geometria não fechada (em se tratando de polígonos);
  • Item com geometria muito grande. Atualmente, se área ou comprimento exceder 2147483647;
  • Os 2 bits mais à esquerda estão reservados para eventuais usos futuros e, por hora, são sempre zero.

Exemplo de saída produzida após a execução de uma ingestão:

------------------------------------------------------------------------
 From file_id=8 inserted type=geoaddress_full.                         +
                                                                       +
         Statistics:                                                   +
 .                                                                     +
         Before deduplication:                                         +
                                                                       +
         Originals: 474520 items.                                      +
                                                                       +
         Not Intersecs: 684 items.                                     +
                                                                       +
         Invalid: 0 items.                                             +
                                                                       +
         Not simple: 0 items.                                          +
                                                                       +
         Empty: 0 items.                                               +
                                                                       +
         Small: 0 items.                                               +
                                                                       +
         Null: 0 items.                                                +
                                                                       +
         Invalid geometry type: 0 items.                               +
                                                                       +
         Not closed: 0 items.                                          +
                                                                       +
         Large: 0 items.                                               +
                                                                       +
         Inserted in feature_asis: 473836 items.                       +
                                                                       +
         Inserted in feature_asis_discarded: 684 items.                +
                                                                       +
                                                                       +
         After deduplication:                                          +
                                                                       +
         Removed duplicates from feature_asis: 169477 items.           +
                                                                       +
         Inserted in feature_asis_discarded (duplicates): 169477 items.+
                                                                       +
         Inserted in feature_asis (aggregated duplicates): 79967 items.+
                                                                       +
         Resulting in feature_asis: 384326                             +
 
(1 row)

make layer sem interação com usuário:

Para rodar um target sem serem solicitadas confirmações do usuário, utilizar nointeraction=y.

Por exemplo, make block nointeraction=y faz a ingestão dos dados sem solicitar confirmações do usuário.[5]

Essa variável só produz efeito em target layer, publicating_geojsons_layer ou me. Para os demais, não.

Buffer em geometrias jurisdicionais:

Foi adotada a aplicação de um buffer, por default, nas geometrias de jurisdição. Atualmente essa valor é de 50 metros. Esse comportamento pode ser alterado utilizando a chave buffer_type em layer do make_conf. Os valores possíveis para essa chave são:

  • buffer_type: 1, valor default, aplica um buffer de aproximadamente 100 metros. Não é necessário informá-lo no make_conf.yaml. É inserido automaticamente pela função jsonb_mustache_prepare caso não seja informado.
  • buffer_type: 0, sem buffer. Para utilizá-lo, deve-se informá-lo no make_conf.yaml
  • buffer_type: 2, aplica um buffer de aproximadamente 5000 metros. Para utilizá-lo, deve-se informá-lo no respectivo layer do make_conf.yaml
  • buffer_type: 3, aplica um buffer de aproximadamente 50 km. Para utilizá-lo, deve-se informá-lo no respectivo layer do make_conf.yaml
  • buffer_type: 4, aplica um buffer de aproximadamente 500 km. Para utilizá-lo, deve-se informá-lo no respectivo layer do make_conf.yaml

Atualizar tabelas de optim (atualmente em dl05s_main):

Se donatedPack.csv ou donor.csv (em qualquer jurisdição) forem alterados ou um novo make_conf.yaml for criado (se não existia e passou a existir), é necessário atualizar as tabelas do schema optim. Para isso, utilizar:

pushd /var/gits/_dg/preserv/src
make load_optim_csv pg_datalake=dl05s_main

Notar que se as restrições das tabelas não forem respeitadas o carregamento ou atualização dos dados não acontece. Retornando erro.

Caso for alterado o sha256 em um make_conf.yaml já existente, ver preserv-BR/issues/68.

Especificações mosaico:

Propriedades presentes em todos os layers:

  • ghs_bytes: inteiro. soma da quantidade de bytes dos itens (SUM(length(St_asGeoJson(geom)))
  • ghs_area: duas casa decimais. area do ghs, em km2
  • ghs_len: inteiro. tamanho de ghs
  • ghs_items: inteiro. quantidade de itens em ghs
  • ghs_itemsDensity: duas casas decimais. densidade, ghs_items por ghs_area (itens por unidade de área).
  • ghsval_unit: nome da unidade utilizada como métrica da distribuição (tipicamente "ghs_bytes" ou "ghs_items".

Propriedade que variam conforme os layers:

  • size: duas casas decimais. tamanho total dos itens em ghs, (unidade para linhas:km. unidade para polígonos: km2. não utilizada para pontos.)
  • size_unit:
    • dim0 = pontos = não precisa de soma de métrica
    • dim1= linhas = tem soma de métrica km
    • dim2 = polígonos = tem soma de km2, e densidade_km2
  • size_unitDensity

Relatórios

optim.vw01report

Exemplo:

dl05s_main=# select * from optim.vw01report;
 isolabel_ext  |            legalname            |         vat_id          | ID de pack_componente |     ftname      | ftid | step | data_feito |    n_items     |  size   
---------------+---------------------------------+-------------------------+-----------------------+-----------------+------+------+------------+----------------+---------
 BR-RJ-Niteroi | Prefeitura Municipal de Niterói | cnpj:28.521.748/0001-59 | br0016.01.3.01        | nsvia_ext       |   72 |    6 | 2020-05-22 | 65 polygons    | 133 km2
 BR-RJ-Niteroi | Prefeitura Municipal de Niterói | cnpj:28.521.748/0001-59 | br0016.01.2.01        | via_full        |   31 |    6 | 2020-05-22 | 2538 segments  | 759 km
 BR-RJ-Niteroi | Prefeitura Municipal de Niterói | cnpj:28.521.748/0001-59 | br0016.01.1.01        | parcel_ext      |   62 |    6 | 2020-04-20 | 74804 polygons | 62 km2
 BR-SP-Santos  | Prefeitura Municipal de Santos  | cnpj:58.200.015/0001-83 | br0029.01.1.01        | geoaddress_full |   21 |    6 | 2018-09-18 | 43161 points   | 
(4 rows)

optim.vw02report_simple

Exemplo:

dl05s_main=# select * from optim.vw02report_simple;
 isolabel_ext  |     ftname
---------------+-----------------
 BR-RJ-Niteroi | nsvia_ext
 BR-RJ-Niteroi | via_full
 BR-RJ-Niteroi | parcel_ext
 BR-SP-Santos  | geoaddress_full
(4 rows)

vw01report_median

A view optim.vw01report_median (em dl05s_main) retorna a quantidade de arquivos, sua a mediana, média, mínimo e máximo em kibibytes. Exemplo:

dl05s_main=# select * from optim.vw01report_median ;
 isolabel_ext  | pack_number | class_ftname | n  | mdn_n | avg_n | min_n | max_n
---------------+-------------+--------------+----+-------+-------+-------+-------
 BR-RJ-Niteroi | 0016.01     | nsvia        |  2 |   154 |   272 |   154 |   390
 BR-RJ-Niteroi | 0016.01     | parcel       | 36 |   327 |   682 |   261 |  2765
 BR-RJ-Niteroi | 0016.01     | via          |  6 |   199 |   232 |   154 |   331
 BR-SP-Santos  | 0029.01     | geoaddress   | 33 |   149 |   166 |   101 |   469
(4 rows)

Parâmetros de publicação

A opção pretty_opt=3 aplicada por default no target publicating_geojsons_<nome_do_layer> gera um mosaico sem espaços e quebra de linha, ver função jsonb_pretty_lines.

Tabela de parâmetros

Bytes passaram a ser utilizados para balanceamento. hcode_parameters.csv fornece a lista de parametros.

  • id_profile_params: 1: valor default para layers geoaddress;
  • id_profile_params: 5: valor default para os demais layers.

Busca de parâmetros

Se for necessário, para buscar novos parametros para hcode_distribution_parameters para distribuição, após a ingestão do layer, duas opções:

  1. Target

    O target change_parameters_<nome do layer> altera os parâmetros em lineage, executa a publicação (no respectivo repositório CutGeo) e, no final, executa o target audit-geojsons_<nome do layer>

    Exemplos de uso (é obrigatório informar as variáveis threshold_sum):

   make change_parameters_block threshold_sum=3000000 pg_db=ingest99 (`pg_db` é opcional, se estiver usando abase de dados default da respectiva jurisdição.)
  1. Manual:

    Para configurar os parâmetros, utilizar, por exemplo:

   UPDATE ingest.donated_packcomponent
   SET lineage = jsonb_set(lineage, '{hcode_distribution_parameters}', '{"p_threshold_sum": 13500}', TRUE)
WHERE id = 11;

O valor de id pode ser obtido por meio de SELECT * FROM ingest.donated_packcomponent;.

Após o UPDATE executar novamente o target de publicação.

Registrar parâmetros encontrados

Depois de encontrar os parâmetros, registrá-los em hcode_parameters.csv e informar no layer, como no exemplo:

  parcel:
        subtype: full
        ...
        id_profile_params: 3

Após registrar os novos parâmetros em hcode_parameters.csv deve-se atualizar o banco de dados com:

pushd /var/gits/_dg/preserv/src
make load_hcode_parameters
popd

Alterações de sha256 em make_conf.yaml

Ao alterações no sha256 de arquivos make_conf.yaml:

  1. incrementar pkversion;
  2. insrir nova entrada no arquivo donatePack.csv;
  3. excecutar https://github.com/digital-guard/preserv/blob/main/docs/pt/man-diversos.md#atualizar-tabelas-de-optim-atualmente-em-dl05s_main

Load arquivos do CutGeo a partir de um diretório

tmux

pushd /var/gits/_dg/preservCutGeo-BR2021
git pull
popd

DATA_BASE='ingestcutgeo'

pushd /var/gits/_dg/preserv/src
make ini_ingest pg_db=${DATA_BASE}

psql postgres://postgres@localhost/${DATA_BASE} < /var/gits/_dg/preserv/src/loadGeojson-step1.sql

find /var/gits/_dg/preservCutGeo-BR2021/data -maxdepth 5 -type d -iwholename "*_pk*\/*" -exec bash loadGeojson.bash {} ${DATA_BASE} \; &> /home/$USER/log_loadCutGeoData_${DATA_BASE}

popd

Inserir size no make_conf.yaml

Procedimento para inserir size em files de um make_conf:

pushd /var/gits/_dg/preserv-BR/src
make all
pushd /var/gits/_dg/preserv-BR/data/AC/RioBranco/_pk0042.01
make me
make wget_files orig=/tmp/pg_io/tmpfolder
make insert_size orig=/tmp/pg_io/tmpfolder
rm -rf /tmp/pg_io/tmpfolder
popd
popd

Passos gerais para adicionar/atualizar geometrias jurisdicionais

Texto vindo de: https://github.com/digital-guard/preserv/blob/main/docs/pt/man-updateJurisd.md

  1. Dump de dl05s_main, antes de qualquer alteração;
  2. Download dos dados do OpenStreetMap e criação do make_conf;
  3. Criar uma base ingest especifica;
  4. Processo de ingestão (make openstreetmap);
  5. Avaliar os dados já disponíveis em optim.jurisdiction e optim.jurisdiction_geom;
  6. Preparar os dados na ingest;
  7. Dump da ingest para dl05s_main;
  8. Insert/Update em optim.jurisdiction e optim.jurisdiction_geom;
  9. Realizar o update de info das geometrias atualizadas. Ver optim-step6-metrics;
  10. Drop do dump vindo da ingest.

Referências

  1. com a geometria da respectiva jurisdição, obtida do OpenStreetMap, com um buffer_type = 1 por default.

  2. sendo utilizado gridsize = 0.000001, para precisão ~1m, conforme Decimal_degrees#Precision.

  3. sendo utilizado tolerance = 0.00000001, com a intensão do algoritmo Douglas-Peucker remover apenas pontos colineares.

  4. As medidas de similaridade são calculadas pela função feature_asis_similarityno schema ingest.

  5. Layer com method que utiliza o ogr2ogr via docker, ou target me, podem solicitar a senha do usuário.