dg:Diversos: mudanças entre as edições
(Criou página com '== No rule to make target == Ao executar <code>make layer</code> ou <code>make all_layers</code>, caso encontre um erro do tipo <pre>make: *** No rule to make target '/var/www/dl.digital-guard.org/bae2054448855305db0fc855d2852cd5a7b369481cc03aeb809a0c3c162a2c04.zip', needed by 'parcel'. Stop.</pre> o arquivo especificado não está no diretório default <code>/var/www/dl.digital-guard.org</code>, informado na chave <code>orig</code> de uma jurisdição, por exemplo, e...') |
(Sem diferença)
|
Edição das 22h02min de 1 de maio de 2023
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:
Inicialmente se garante que SRID das geometrias será 4326.
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.
Em seguida, são selecionadas as geometrias onde a função ST_IsClosed é verdadeira ou forem linhas.
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].
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.À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.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 defeature_asis
e o representante é inserido, contendo:7.1.
is_agg
: flag para indicar que é umfeature_id
agregado;7.2.
properties_agg
: array contendoproperties
dosfeature_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.Geometrias que não atendam algum dos critérios acima possuem
error_mask
com algum bit diferente de zero. Essas geometrias ficam disponíveis emfeature_asis_discarded
, tabela idêntica àfeature_asis
, exceto por o jsonbproperties
possuir a chaveerror_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çãojsonb_mustache_prepare
caso não seja informado.buffer_type: 0
, sem buffer. Para utilizá-lo, deve-se informá-lo no make_conf.yamlbuffer_type: 2
, aplica um buffer de aproximadamente 5000 metros. Para utilizá-lo, deve-se informá-lo no respectivo layer do make_conf.yamlbuffer_type: 3
, aplica um buffer de aproximadamente 50 km. Para utilizá-lo, deve-se informá-lo no respectivo layer do make_conf.yamlbuffer_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 layersgeoaddress
;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:
Target
O target
change_parameters_<nome do layer>
altera os parâmetros emlineage
, executa a publicação (no respectivo repositório CutGeo) e, no final, executa otarget 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.)
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:
- incrementar
pkversion
; - insrir nova entrada no arquivo donatePack.csv;
- 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
- ↑
com a geometria da respectiva jurisdição, obtida do OpenStreetMap, com um
buffer_type
= 1 por default. - ↑
sendo utilizado
gridsize = 0.000001
, para precisão ~1m, conforme Decimal_degrees#Precision. - ↑
sendo utilizado
tolerance = 0.00000001
, com a intensão do algoritmo Douglas-Peucker remover apenas pontos colineares. - ↑
As medidas de similaridade são calculadas pela função
feature_asis_similarity
no schemaingest
. - ↑ Layer com
method
que utiliza o ogr2ogr via docker, ou targetme
, podem solicitar a senha do usuário.