geoapi-pt / main

GEO API PT - Provides information for Portugal on official divisional administrative regions, georeferencing, census and postal codes
https://geoapi.pt
GNU General Public License v3.0
18 stars 5 forks source link

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

Closed waldyrious closed 2 years ago

waldyrious commented 2 years ago

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?

jfoclpf commented 2 years ago

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 commented 2 years ago

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?

joao commented 2 years ago

@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.

waldyrious commented 2 years ago

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:

jfoclpf commented 2 years ago

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 commented 2 years ago

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 commented 2 years ago

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

jfoclpf commented 2 years ago

@waldyrious compara por exemplo o 7580 antes e depois

image

image

jfoclpf commented 2 years ago

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 commented 2 years ago

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

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

jfoclpf commented 2 years ago

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

joao commented 2 years ago

@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.

jfoclpf commented 2 years ago

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

waldyrious commented 2 years ago

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:

   > geoapi.pt@1.0.3 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:

   > geoapi.pt@1.0.3 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
jfoclpf commented 2 years ago

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 commented 2 years ago

@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 commented 2 years ago

@waldyrious resumindo, agora tens que fazer apenas

npm run generate-postalcodes -- --onlyCP4 1900 4400 --download-zip
npm start
joao commented 2 years ago

@jfoclpf, algum feedback como pedido:

geoapi_feedback

jfoclpf commented 2 years ago

Boas @joao , pela mesma ordem

jfoclpf commented 2 years ago

@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

joao commented 2 years ago

@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.

jfoclpf commented 2 years ago

@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?

joao commented 2 years ago

@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

> geoapi.pt@1.0.3 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
jfoclpf commented 2 years ago

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

joao commented 2 years ago

@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?

jfoclpf commented 2 years ago

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 commented 2 years ago

@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

joao commented 2 years ago

@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.

jfoclpf commented 2 years ago

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.

waldyrious commented 2 years ago

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.

jfoclpf commented 10 months ago

@joao apenas uma questão, lembras-te do ficheiro pt_addresses.csv.zip?

Tens actualizado esse ficheiro do openaddresses para o teu servidor?

jfoclpf commented 10 months ago

@joao reparei que são iguais

joao commented 10 months ago

@jfoclpf Não tenho actualizado. A última versão no servidor da OpenAddresses parece ser de 2022-11-11 e vejo que o website foi alterado, restringindo os downloads em CSV.

Precisas que actualize? Vou ver se coloco um script a actualizar mensalmente.

jfoclpf commented 10 months ago

@joao sim por favor actualiza mensalmente, pelo menos agora

joao commented 10 months ago

@jfoclpf Pelo o que estou a ver, tem agora um género de 'paywall'.
CSVs só disponíveis a quem efectuar donativos, embora tenha-se acesso a um GeoJSON.

Vou experimentar esta semana converter o GeoJSON para CSV, a ver se é possível, ou arranjar uma alternativa de ir buscar directamente ao INE, estando assim mais actualizados.

jfoclpf commented 10 months ago

muito obrigado @joao

se for preciso fazer algum donativo diz, deve dar por exemplo 10 euros, certo?