geoapi.pt icon indicating copy to clipboard operation
geoapi.pt copied to clipboard

Muitos pontos fora do polígono na visualização de CP4

Open waldyrious opened this issue 2 years ago • 25 comments

Em alguns casos o polígono à volta dos pontos de um código postal tem um ajuste bastante bom:

https://geoapi.pt/cp/1000 https://geoapi.pt/cp/4000
CP 1000 CP 4000

Há casos em que alguns pontos ficam fora do polígono, mas não de forma preocupante para uma aproximação:

https://geoapi.pt/cp/3000 https://geoapi.pt/cp/6000
CP 3000 CP 6000

No entanto, há casos em que a proporção de pontos fora do polígono é considerável, gerando áreas claramente incorretas como indicação da cobertura geográfica do código postal:

https://geoapi.pt/cp/2000 https://geoapi.pt/cp/5000
CP 2000 CP 5000

Não sei se esta situação corresponde ao https://github.com/jfoclpf/outliers2d/issues/1, mas achei melhor reportar de qualquer forma.

Já agora, será que ficaria melhor se o polígono não fosse suavizado? Ou isto é o resultado da remoção de outliers e não da suavização do polígono?

waldyrious avatar Sep 04 '22 16:09 waldyrious

Tens razão @waldyrious Neste momento a remoção de outliers não está a funcionar bem. Vou fazer uns testes com outro algoritmo que encontrei, chama-se DBSCAN e é muito popular para clustering.

Muito obrigado por evidenciares esses CP4, pois vou adicionar esses CP4 à minha lista de teste.

Vou dando notícias

jfoclpf avatar Sep 05 '22 17:09 jfoclpf

Boas @waldyrious , estava aqui a calibrar a remoção de outliers com o DBSCAN No teu entender qual é a distância entre dois pontos a partir da qual esses dois pontos passam a pertencer a cluster diferentes? Estou a testar clustering, na medida que o cluster principal é o que queremos aproveitar e os restantes clusters mais pequenos à volta são outliers? É apenas uma ideia de partida para dar ao algoritmo. 500 metros? 1km?

@joao tens ideia?

jfoclpf avatar Sep 06 '22 14:09 jfoclpf

@waldyrious, nos exemplos que partilhaste, consideras que todos tem algumas moradas com códigos-postais errados (outliers)?

Os que eu conheço, de onde vivo, tem poucos outliers (menos de uma dezena), que estavam a estragar o polígono do CP4 e motivou procurar identificar os outlier. Aliás, acho que eram apenas dois no caso do meu CP4: 188023823-b5f092e0-12d6-421a-b6d2-41f36b821620

@jfoclpf, penso que não haverá nenhuma distância correcta :/ Numa área urbana, acho que uma distancia de 250m basta, mas uma rural no interior, 2km ou mais ainda poderá ter o mesmo código postal.

Talvez a única forma de fazer isto direito seja limpar as moradas, contudo poderá ser complicado. Uma fórmula como: se numa rua houver uma morada com um CP4 diferente das outras moradas nessa rua, essa morada tem uma probabilidade de quase 100% de estar com um código-postal errado e não deve ser incluida no desenho do polígono CP4.

Também seria possível uma correcção automática, corrigindo o código postal para o mais 'dominante' na rua. Esta abordagem poderia funcionar numa área urbana, mas no interior rural, em que há ruas/estradas só com um ou duas moradas, não funcionaria.

@jfoclpf, é possível gerar estatísticas de quantas ruas tem múltiplos CP4? Seria útil para informar a estratégia a seguir, pois idenficaria os outliers errados.

joao avatar Sep 06 '22 14:09 joao

Ah, eu até agora estava a assumir que os CPs estavam essencialmente corretos, e que simplesmente se estava a fazer um polígono simplificado para aproximar o que seria uma área bastante irregular (mas correspondente à realidade). Algo semelhante aos distritos gerrymandered nos EUA.

No entanto, se estou a perceber bem, aqui o problema é mesmo haver pontos com CPs errados. A minha dúvida é se o erro estará na atribuição do CP, ou se poderá estar nas coordenadas geográficas das moradas. Por exemplo, aqui mencionei um caso em que seis moradas diferentes estão mapeadas no mesmo ponto... :thinking:

Eu não sei que abordagem poderia funcionar aqui. Mando algumas ideias para o ar:

  • A ideia de clustering é interessante, mas sendo variável a área que cada CP cobre, penso que o threshold também devia ser adaptativo.
  • Talvez considerar outliers os pontos cuja distância ao centro é maior que x% da distância média (ou se calhar mediana) de todos os pontos ao centro.
  • Ou então eliminar os pontos cuja distância ao ponto mais próximo seja maior que 2x a distância mediana entre pontos (embora isto exija calcular NxN distâncias...)
  • As sugestões do @joao também me parecem razoáveis. Em particular, a ideia de corrigir os CPs que se desviam muito dos outros, para adotarem o valor dominante da sua vizinhança, lembra-me os algoritmos de noise reduction/despeckling em processamento de imagem, como os filtros de mediana, que atribuem a cada ponto o valor mediano dos seus pontos vizinhos. Mas sim, isto provavelmente não iria dar grande resultado em locais com baixa densidade de CP :(

waldyrious avatar Sep 06 '22 23:09 waldyrious

Caros amigos @joao @waldyrious ando aqui às voltas com valores e é difícil calibrar os parâmetros, mas já consegui bastantes melhoramentos, mas vocês podiam dar uma ajuda preciosa a tentar achar esses parâmetros, é só correr na vossa máquina e testar para ver o que acham, basta terem o Git e o NodeJs, e

Instalar na vossa máquina

git clone https://github.com/jfoclpf/geoapi.pt.git
cd geoapi.pt
npm install

calibrar os valores aqui (basta editar aquelas constantes):

gerar todos os CP4 (se quiserem gerar apenas alguns para ser rápido, tirem o comentário aqui)

DEBUG=geoptapi:* npm run generate-postalcodes -- --onlyCP4

depois de gerados, basta correr o servidor localmente

npm start

e testar por exemplo em: http://localhost:8080/cp/6000

Acham que podem fazer isso, não estou a conseguir arranjar uma boa combinação de valores

muito obrigado (neste momento o meu CPU está a correr uma combinação de valores :)

jfoclpf avatar Sep 07 '22 09:09 jfoclpf

fiz agora um teste com

const alpha = 10 // minimum number of points for cluster NOT to be considered as outlier
const radius = 0.008 // distance between points to be considered in the same cluster
const neighbours = 3 // minimum number of neighbours around one point to be considered a cluster

e consegui melhores resultados

image

image

image

image

que vos parece?

jfoclpf avatar Sep 07 '22 13:09 jfoclpf

@joao interessante, nesse caso, se normalmente apenas 1 ou 2 são outliers por cluster, talvez deva baixar a constante alpha

jfoclpf avatar Sep 07 '22 13:09 jfoclpf

@waldyrious compara por exemplo o 7580 antes e depois

image

image

jfoclpf avatar Sep 07 '22 13:09 jfoclpf

Talvez a única forma de fazer isto direito seja limpar as moradas, contudo poderá ser complicado. Uma fórmula como: se numa rua houver uma morada com um CP4 diferente das outras moradas nessa rua, essa morada tem uma probabilidade de quase 100% de estar com um código-postal errado e não deve ser incluida no desenho do polígono CP4.

Bem visto @joao mas refereste-te a código CP4-CP3, certo? Os códigos CP3 são sempre da mesma rua, certo?

jfoclpf avatar Sep 07 '22 13:09 jfoclpf

@jfoclpf, é possível gerar estatísticas de quantas ruas tem múltiplos CP4?

@joao referes-te a CP4-CP3, certo?

jfoclpf avatar Sep 07 '22 13:09 jfoclpf

já actualizei e já está em produção, acho que agora está bem melhor

jfoclpf avatar Sep 07 '22 19:09 jfoclpf

@jfoclpf Vi a última versão e está melhor nos códigos CP4 que testei.

Quanto à questão de erros de localização errada de moradas, lendo o que o @waldyrious escreveu, ocorreu-me que eu estava a assumir erradamente que a questão das moradas mal localizadas fosse somente um CP4 inserido incorrectamente no preenchimento dos Censos 2011.

Não é possível assumir tal, pois pode ser outro tipo de erro: uma morada totalmente errada, até só o CP4/CP3/CP4-CP3 mal, ou a morada postal estar 100% correcta, mas com a latitude/longitude erradas. Vou tentar analisar, e encontrar, alguns casos a ver se há algum padrão nos erros.

Também irei testar o 'git clone' como pedido.

joao avatar Sep 08 '22 14:09 joao

Muito obrigado @joao @joao e @waldyrious se entretanto testarem, eu alterei ligeiramente o código para ser mais fácil testar

Instalar:

git clone https://github.com/jfoclpf/geoapi.pt.git
cd geoapi.pt
npm ci

Testar CP4 1900 e 4400:

npm run generate-postalcodes -- --onlyCP4 1900 4400 --download-zip
npm start

verificar no browser http://localhost:8080/cp/1900

jfoclpf avatar Sep 10 '22 11:09 jfoclpf

  1. Não sei se há algo que se possa fazer sobre isso, mas o repositório é enorme e demora imenso tempo a clonar
  2. $ npm run generate-postalcodes -- --onlyCP4 1900 4400 dá erro:
    > [email protected] generate-postalcodes
    > node --max-old-space-size=16384 js/routines/generatePostalCodes/generate.js "--onlyCP4" "1900" "4400"
    
    extracting /home/waldyrious/repos/geoapi.pt/res/postal-codes/pt_addresses.csv.zip
    Error: Error unziping file /home/waldyrious/repos/geoapi.pt/res/postal-codes/pt_addresses.csv.zip. ENOENT: no such file or directory, open '/home/waldyrious/repos/geoapi.pt/res/postal-codes/pt_addresses.csv.zip'
        at /home/waldyrious/repos/geoapi.pt/js/routines/generatePostalCodes/generate.js:155:14
    
  3. Depois de fazer cp res/postal-codes/CodigosPostais.zip res/postal-codes/pt_addresses.csv.zip, o comando acima dá um erro diferente:
    > [email protected] generate-postalcodes
    > node --max-old-space-size=16384 js/routines/generatePostalCodes/generate.js "--onlyCP4" "1900" "4400"
    
    extracting /home/waldyrious/repos/geoapi.pt/res/postal-codes/pt_addresses.csv.zip
    extraction complete to /home/waldyrious/repos/geoapi.pt/res/postal-codes/leiame.txt
    CSV file from OpenAddresses has 114 entries
    Parsing CSV file from OpenAddresses
    [=-------------------------------------------------------------------------------] 0%
    Extracted CSV data from /home/waldyrious/repos/geoapi.pt/res/postal-codes/leiame.txt
    Extracted CSF file deleted after being processed
    zip file extraction for /home/waldyrious/repos/geoapi.pt/res/postal-codes/CodigosPostais.zip complete
    Extracted CSV data from /home/waldyrious/repos/geoapi.pt/res/postal-codes/distritos.txt
    Extracted CSV data from /home/waldyrious/repos/geoapi.pt/res/postal-codes/concelhos.txt
    Extracted CSV data from /home/waldyrious/repos/geoapi.pt/res/postal-codes/todos_cp.txt
    Extracted files deleted
    Postal Codes prepared with success
    Found 192940 different CP4-CP3 postal codes in CTT file
    Found 861 different CP4 postal codes in CTT file
    Process and assemble CP4 Postal Codes data from both databases (OpenAddresses and CTT)
    only these CP4:  [ '1900', '4400' ]
    [================----------------------------------------------------------------] 20% Beginning
    Error on 1900. Cannot read properties of undefined (reading 'split'). TypeError: Cannot read properties of undefined (reading 'split')
        at splitCP (/home/waldyrious/repos/geoapi.pt/js/routines/generatePostalCodes/functions.js:300:18)
        at Object.createCP4jsonFile (/home/waldyrious/repos/geoapi.pt/js/routines/generatePostalCodes/functions.js:191:29)
        at /home/waldyrious/repos/geoapi.pt/js/routines/generatePostalCodes/generate.js:305:34
        at /home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:2588:44
        at eachOfArrayLike (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:506:13)
        at eachOf (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:626:16)
        at awaitable (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:211:32)
        at Object.eachLimit (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:2691:16)
        at Object.awaitable (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:211:32)
        at assembleCP4Data (/home/waldyrious/repos/geoapi.pt/js/routines/generatePostalCodes/generate.js:303:9)
        at /home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:3674:28
        at replenish (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:446:21)
        at iterateeCallback (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:430:21)
        at /home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:327:20
        at /home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:3679:17
        at /home/waldyrious/repos/geoapi.pt/js/routines/generatePostalCodes/generate.js:223:7
    
    pointsArr:  []
    [================================================--------------------------------] 60% 1900
    Error: Error: Error: TypeError: Cannot read properties of undefined (reading 'split')
        at /home/waldyrious/repos/geoapi.pt/js/routines/generatePostalCodes/generate.js:315:16
        at wrapper (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:271:20)
        at iteratorCallback (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:499:17)
        at /home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:327:20
        at /home/waldyrious/repos/geoapi.pt/js/routines/generatePostalCodes/generate.js:308:18
        at Object.createCP4jsonFile (/home/waldyrious/repos/geoapi.pt/js/routines/generatePostalCodes/functions.js:290:5)
        at /home/waldyrious/repos/geoapi.pt/js/routines/generatePostalCodes/generate.js:305:34
        at /home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:2588:44
        at eachOfArrayLike (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:506:13)
        at eachOf (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:626:16)
        at awaitable (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:211:32)
        at Object.eachLimit (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:2691:16)
        at Object.awaitable (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:211:32)
        at assembleCP4Data (/home/waldyrious/repos/geoapi.pt/js/routines/generatePostalCodes/generate.js:303:9)
        at /home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:3674:28
        at replenish (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:446:21)
    
    Error on 4400. Cannot read properties of undefined (reading 'split'). TypeError: Cannot read properties of undefined (reading 'split')
        at splitCP (/home/waldyrious/repos/geoapi.pt/js/routines/generatePostalCodes/functions.js:300:18)
        at Object.createCP4jsonFile (/home/waldyrious/repos/geoapi.pt/js/routines/generatePostalCodes/functions.js:191:29)
        at /home/waldyrious/repos/geoapi.pt/js/routines/generatePostalCodes/generate.js:305:34
        at /home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:2588:44
        at eachOfArrayLike (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:506:13)
        at eachOf (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:626:16)
        at awaitable (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:211:32)
        at Object.eachLimit (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:2691:16)
        at Object.awaitable (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:211:32)
        at assembleCP4Data (/home/waldyrious/repos/geoapi.pt/js/routines/generatePostalCodes/generate.js:303:9)
        at /home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:3674:28
        at replenish (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:446:21)
        at iterateeCallback (/home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:430:21)
        at /home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:327:20
        at /home/waldyrious/repos/geoapi.pt/node_modules/async/dist/async.js:3679:17
        at /home/waldyrious/repos/geoapi.pt/js/routines/generatePostalCodes/generate.js:223:7
    
    pointsArr:  []
    [================================================================================] 100% 4400
    

waldyrious avatar Sep 11 '22 22:09 waldyrious

Boas @waldyrious

  1. vou tentar resolver isso apagando alguns ficheiros do histórico, mas sim, o histórico do git tem quase 1G, e quando clonas descarregas não apenas os ficheiros da repo, mas todo o histórico do git
  2. esqueci-me de mencionar, mas na realidade na primeira vez tens que fazer npm run generate-postalcodes -- --onlyCP4 1900 4400 --download-zip. A opção --download-zip precisa de ser usada na primeira vez pois descarrega o ficheiro do OpenAddresses para o teu disco. Experimenta agora sff

jfoclpf avatar Sep 11 '22 23:09 jfoclpf

@waldyrious já resolvi o ponto 1, removi do histórico vários ficheiros grandes, agora a repo ocupa metade do tamanho. Em qualquer caso já tinhas descarregado tudo para a tua máquina. Qualquer dúvida com o ponto 2, diz, obrigado

jfoclpf avatar Sep 12 '22 21:09 jfoclpf

@waldyrious resumindo, agora tens que fazer apenas

npm run generate-postalcodes -- --onlyCP4 1900 4400 --download-zip
npm start

jfoclpf avatar Sep 12 '22 21:09 jfoclpf

@jfoclpf, algum feedback como pedido:

  • o repositório acaba por ser bastante grande, com 3.1GB (testado a 13/Setembro). Suponho a única solução seja apagar ainda mais histórico, mas talvez só à frente e quando estiver tudo mais testado.

  • o download do ficheiro do openadresses ainda está a ir ao website deles. Não queres colocar o endpoint do meu servidor? Já que eles tem na AWS e tem de pagar o trâfego e fica lento no final.
    Pode ser algum código como se der 404 no storage do meu lado, aí tenta o openaddresses.

  • o output no terminal, durante o processamento dos CP4 é estranho. Arrancou nos 60% e lá ficou parado.

geoapi_feedback

  • passados 30 minutos ainda está nesses 60&. O meu computador é antigo, também pode ser disso e demorar mais tempo. Vou deixar estar mais um bocado a ver se progride, mas talvez seja sinal de algum problema :/

joao avatar Sep 13 '22 15:09 joao

Boas @joao , pela mesma ordem

  • tens razão, é muito, é porque tentei apagar histórico mas mais não fez que adicionar ao histórico da repo no Github. Tenho que mudar as configurações da repo do GitHub para deixar mesmo apagar histórico, porque por questões de segurança normalmente não o deixa fazer por padrão. Mas estive a investigar é fácil resolver, basta usar a flag --depth=1 , ou seja git clone --depth=1 https://github.com/jfoclpf/geoapi.pt.git e só descarregas a última versão sem qualquer histórico.
  • sim, claro, recorda-me sff o URL do teu servidor onde está o ficheiro
  • sim, demora algum tempo, e perdi já imenso tempo a programar para otimizar os cores da CPU para que vários CP4 possam ser processados em paralelo (multithreading), porque o JS é single-thread por padrão. Espera mais um pouco, ele vai lá :)

jfoclpf avatar Sep 13 '22 15:09 jfoclpf

@joao reparei agora, mas em relação ao tamanho, não há muito que possamos fazer, pois se reparares é quase o tamanho da pasta res/ onde estão todos os recursos para a API funcionar. Fora o ficheiro do OpenAddresses

jfoclpf avatar Sep 13 '22 16:09 jfoclpf

@waldyrious aqui tens o endereço para download:
https://box.wolan.net/geoapi/pt_addresses.csv.zip

Farei uma Github Action para verificar semanalmente se é a última versão do ficheiro e actualizar. O download também será consideravelmente mais rápido.

joao avatar Sep 13 '22 16:09 joao

@joao, já implementei essa funcionalidade com d8721928424dc45076e10423106bf3ea01b784fe: primeiro descarrega do teu servidor e se tal não estiver disponível, então, vai ao servidor do OpenAddresses.

Sempre conseguiste gerar os JSON?

jfoclpf avatar Sep 15 '22 22:09 jfoclpf

@jfoclpf existe um problema com a nova versão do código, pois está a falhar o download quer do meu servidor quer do openaddresses. Quando estava só com openaddresses funcionava. Podes verificar por favor?

Error Log:

▲ geoapi.pt: npm run generate-postalcodes -- --onlyCP4 1900 4400 --download-zip

> [email protected] generate-postalcodes
> node --max-old-space-size=16384 js/routines/generatePostalCodes/generate.js --onlyCP4 1900 4400 --download-zip

Downloading file from https://box.wolan.net/geoapi/pt_addresses.csv.zip to /Users/joao/Desktop/geoapi.pt/res/postal-codes/pt_addresses.csv.zip
This may take a while, please wait...
  downloading [=                   ] 5401712/bps 4% 22.0sError: GotError [RequestError]: 4407582144:error:1408F119:SSL routines:ssl3_get_record:decryption failed or bad record mac:ssl/record/ssl3_record.c:677:

    at ClientRequest.<anonymous> (/Users/joao/Desktop/geoapi.pt/node_modules/download/node_modules/got/index.js:182:22)
    at Object.onceWrapper (node:events:628:26)
    at ClientRequest.emit (node:events:513:28)
    at TLSSocket.socketErrorListener (node:_http_client:494:9)
    at TLSSocket.emit (node:events:513:28)
    at TLSSocket._emitTLSError (node:_tls_wrap:908:10)
    at TLSWrap.onerror (node:_tls_wrap:439:11) {
  code: 'ERR_SSL_DECRYPTION_FAILED_OR_BAD_RECORD_MAC',
  host: 'box.wolan.net',
  hostname: 'box.wolan.net',
  method: 'GET',
  path: '/geoapi/pt_addresses.csv.zip',
  protocol: 'https:',
  url: 'https://box.wolan.net/geoapi/pt_addresses.csv.zip'
}
file not available, fetching directly from Open Addresses server
Fetching info from OpenAddresses PT JSON file https://raw.githubusercontent.com/openaddresses/openaddresses/master/sources/pt/countrywide.json
Error: GotError [RequestError]: 4407582144:error:1408F119:SSL routines:ssl3_get_record:decryption failed or bad record mac:ssl/record/ssl3_record.c:677:

    at ClientRequest.<anonymous> (/Users/joao/Desktop/geoapi.pt/node_modules/download/node_modules/got/index.js:182:22)
    at Object.onceWrapper (node:events:628:26)
    at ClientRequest.emit (node:events:513:28)
    at TLSSocket.socketErrorListener (node:_http_client:494:9)
    at TLSSocket.emit (node:events:513:28)
    at TLSSocket._emitTLSError (node:_tls_wrap:908:10)
    at TLSWrap.onerror (node:_tls_wrap:439:11) {
  code: 'ERR_SSL_DECRYPTION_FAILED_OR_BAD_RECORD_MAC',
  host: 'box.wolan.net',
  hostname: 'box.wolan.net',
  method: 'GET',
  path: '/geoapi/pt_addresses.csv.zip',
  protocol: 'https:',
  url: 'https://box.wolan.net/geoapi/pt_addresses.csv.zip'
}
file not available, fetching directly from Open Addresses server
Fetching info from OpenAddresses PT JSON file https://raw.githubusercontent.com/openaddresses/openaddresses/master/sources/pt/countrywide.json
Error: GotError [RequestError]: 4407582144:error:1408F119:SSL routines:ssl3_get_record:decryption failed or bad record mac:ssl/record/ssl3_record.c:677:

    at ClientRequest.<anonymous> (/Users/joao/Desktop/geoapi.pt/node_modules/download/node_modules/got/index.js:182:22)
    at Object.onceWrapper (node:events:628:26)
    at ClientRequest.emit (node:events:513:28)
    at TLSSocket.socketErrorListener (node:_http_client:494:9)
    at TLSSocket.emit (node:events:513:28)
    at TLSSocket._emitTLSError (node:_tls_wrap:908:10)
    at TLSWrap.onerror (node:_tls_wrap:439:11) {
  code: 'ERR_SSL_DECRYPTION_FAILED_OR_BAD_RECORD_MAC',
  host: 'box.wolan.net',
  hostname: 'box.wolan.net',
  method: 'GET',
  path: '/geoapi/pt_addresses.csv.zip',
  protocol: 'https:',
  url: 'https://box.wolan.net/geoapi/pt_addresses.csv.zip'
}
file not available, fetching directly from Open Addresses server
Fetching info from OpenAddresses PT JSON file https://raw.githubusercontent.com/openaddresses/openaddresses/master/sources/pt/countrywide.json
file not available, fetching directly from Open Addresses server
Fetching info from OpenAddresses PT JSON file https://raw.githubusercontent.com/openaddresses/openaddresses/master/sources/pt/countrywide.json
URL with OpenAddresses PT raw data: https://data.openaddresses.io/cache/uploads/sergiyprotsiv/fc77c5/pt_addresses.csv.zip
Downloading file from https://data.openaddresses.io/cache/uploads/sergiyprotsiv/fc77c5/pt_addresses.csv.zip to /Users/joao/Desktop/geoapi.pt/res/postal-codes/pt_addresses.csv.zip
This may take a while, please wait...
URL with OpenAddresses PT raw data: https://data.openaddresses.io/cache/uploads/sergiyprotsiv/fc77c5/pt_addresses.csv.zip
Downloading file from https://data.openaddresses.io/cache/uploads/sergiyprotsiv/fc77c5/pt_addresses.csv.zip to /Users/joao/Desktop/geoapi.pt/res/postal-codes/pt_addresses.csv.zip
This may take a while, please wait...
URL with OpenAddresses PT raw data: https://data.openaddresses.io/cache/uploads/sergiyprotsiv/fc77c5/pt_addresses.csv.zip
Downloading file from https://data.openaddresses.io/cache/uploads/sergiyprotsiv/fc77c5/pt_addresses.csv.zip to /Users/joao/Desktop/geoapi.pt/res/postal-codes/pt_addresses.csv.zip
This may take a while, please wait...
URL with OpenAddresses PT raw data: https://data.openaddresses.io/cache/uploads/sergiyprotsiv/fc77c5/pt_addresses.csv.zip
Downloading file from https://data.openaddresses.io/cache/uploads/sergiyprotsiv/fc77c5/pt_addresses.csv.zip to /Users/joao/Desktop/geoapi.pt/res/postal-codes/pt_addresses.csv.zip
This may take a while, please wait...
Error: Error: Error: HTTPError: Response code 429 (Too Many Requests)
    at /Users/joao/Desktop/geoapi.pt/js/routines/generatePostalCodes/generate.js:66:16
    at /Users/joao/Desktop/geoapi.pt/js/routines/generatePostalCodes/downloadZip.js:38:19
    at /Users/joao/Desktop/geoapi.pt/js/routines/generatePostalCodes/downloadZip.js:114:5
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
/Users/joao/Desktop/geoapi.pt/node_modules/async/dist/async.js:324
            if (fn === null) throw new Error("Callback was already called.");
                                   ^

Error: Callback was already called.
    at /Users/joao/Desktop/geoapi.pt/node_modules/async/dist/async.js:324:36
    at /Users/joao/Desktop/geoapi.pt/node_modules/async/dist/async.js:3679:17
    at /Users/joao/Desktop/geoapi.pt/js/routines/generatePostalCodes/generate.js:66:7
    at /Users/joao/Desktop/geoapi.pt/js/routines/generatePostalCodes/downloadZip.js:38:19
    at /Users/joao/Desktop/geoapi.pt/js/routines/generatePostalCodes/downloadZip.js:114:5
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

Node.js v18.9.0


joao avatar Sep 16 '22 15:09 joao

muito estranho @joao , do meu lado testei novamente e funciona, experimenta correr antes npm set strict-ssl false ou então atualiza o NPM npm install npm -g

jfoclpf avatar Sep 16 '22 17:09 jfoclpf

@jfoclpf Consegui com essa instrução no meu computador pessoal, mas também tentei num servidor e não foi necessário. Deve ter sido algum update ao node/npm no meu computador, obrigado pela ajuda.

O servidor também funciona bem, com todos os exemplos indicados no npm start operacionais. Só o endereço http://localhost:8080 é que não abre, pois efectua um redirect automático para o geoapi.pt. É intencional?

joao avatar Sep 16 '22 23:09 joao

Boas @joao , lamento a resposta tardia

fixe que tenhas conseguido resolver essa situação no teu computador e que o comando npm start funciona bem

Só o endereço http://localhost:8080 é que não abre, pois efectua um redirect automático para o geoapi.pt. É intencional?

É uma pergunta relevante. A página principal (index.html) está alojada e servida diretamente dos servidor do github (através do subdomínio www). Talvez não seja má ideia abdicar desse serviço e transferi-la para o servidor principal.

jfoclpf avatar Sep 21 '22 11:09 jfoclpf

@joao e @waldyrious chegaram a conseguir fazer alguns testes?

Caso contrário deixamos por enquanto estar assim, não está mau!

E já sabem, criem issues para novos melhoramentos que tenham em mente :) é fixe podermos avançar com este projeto open source

jfoclpf avatar Sep 21 '22 11:09 jfoclpf

@jfoclpf Não efectuei mais testes além dos anteriores.
Concordo contigo e será melhor ficar assim por agora, já que a origem dos problemas é nos dados e não há uma solução perfeita para tal.

joao avatar Sep 21 '22 12:09 joao

Fixe, sendo assim vou fechar o tópico

Se tiveres mais alguns melhoramentos para fazer à API, que te lembres, por favor diz, foram muito úteis as tuas dicas.

jfoclpf avatar Sep 21 '22 13:09 jfoclpf

Não tenho tido disponibilidade para explorar este tema em mais pormenor. Concordo que para já faz sentido fechar e ir ajustando se encontrarmos técnicas que possam melhorar o resultado atual.

waldyrious avatar Sep 21 '22 16:09 waldyrious