Giter Site home page Giter Site logo

geoapi-pt / main Goto Github PK

View Code? Open in Web Editor NEW
12.0 4.0 5.0 80.53 MB

GEO API PT - Provides information for Portugal on official divisional administrative regions, georeferencing, census and postal codes

Home Page: https://geoapi.pt

License: GNU General Public License v3.0

JavaScript 85.57% Handlebars 12.17% CSS 1.96% Shell 0.31%
geolocation portugal geolocation-api georeferencing administrative-units administrative-divisions api expressjs hacktoberfest nodejs

main's Introduction

logo

JSON API documentation Test API server CodeQL Security Check js-standard-style Request last hour Request last day

RESTful API which provides information on official divisional administrative regions of Portugal (based on "Carta Administrativa Oficial de Portugal, 2022", from here). It includes information on mainland Portugal, Azores and Madeira. It also provides information on Postal Codes and Census.

Uptime of this server.

It uses NodeJS (much faster than Python) to create a HTTP server allowing several GET requests. It pre-processes all the raw data for fast real-time delivery.

Docs and Routes

All the API documentation is at geoapi.pt/docs.

This API follows the OpenAPI Specification, thus you can see all the routes in the openapi.yaml file.

Directory structure of the main project

This is the main public repo of the geoapi.pt project

The directory structure of the main project should be like:

./               # geoapi-pt/root (private)
 ├── resources/  # geoapi-pt/resources (private)
 ├── main/       # this repo (public)

JSON or HTML

By default the server replies with text/html format. To receive JSON format, chose one of these:

  • add the query GET parameter json=1 to the URL (ex.: /municipio/évora?json=1);
  • set the HTTP request header Accept as JSON, that is, Accept: application/json; or
  • in case you're using the public API, use the host json.geoapi.pt (ex: json.geoapi.pt/cp/2495-300)

For pretty-printing JSON as HTML response, use in the query ?json=belo, for example /cp/2495-300?json=belo

main's People

Contributors

danibras avatar jfoclpf avatar joao avatar moser-ss avatar snyk-bot avatar waldyrious avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

main's Issues

Adicionar PDMs

Perguntei à DGT por PDMs e parece que eles têm essa informação

Têm dados abertos sobre o PDM dos municípios? Ou seja, polígonos para saber se o PDM contempla edificados rurais ou urbanos, por exemplo?

resposta:

Em https://www.dgterritorio.gov.pt/dados-abertos poderá encontrar a informação pretendida, pesquisando por “carta de Uso e Ocupação do Solo”, acedendo à mais recente, que é a de 2018.

image

mail dos municípios de Almeirim e Matosinhos

Confirmar os mails dos municípios de Almeirim e Matosinhos pois a validation API está a devolver

ALMEIRIM
{
  address: '[email protected]',
  status: 'invalid',
  sub_status: 'mailbox_not_found',
  free_email: false,
  did_you_mean: null,
  account: 'gap',
  domain: 'cm-almeirim.pt',
  domain_age_days: null,
  smtp_provider: '',
  mx_found: 'true',
  mx_record: 'www.almeirim.pt',
  firstname: null,
  lastname: null,
  gender: null,
  country: null,
  region: null,
  city: null,
  zipcode: null,
  processed_at: '2021-08-02 19:46:15.469'
}
MATOSINHOS
{
  address: '[email protected]',
  status: 'do_not_mail',
  sub_status: 'role_based',
  free_email: false,
  did_you_mean: null,
  account: 'mail',
  domain: 'cm-matosinhos.pt',
  domain_age_days: '9206',
  smtp_provider: 'microsoft',
  mx_found: 'true',
  mx_record: 'cmmatosinhos-pt0e.mail.protection.outlook.com',
  firstname: null,
  lastname: null,
  gender: null,
  country: null,
  region: null,
  city: null,
  zipcode: null,
  processed_at: '2021-08-02 19:50:59.296'
}

Emails inválidos de algumas freguesias

@danibras corri a tua atualização por um serviço de verificação de mails e deu este resultado. Podes apenas confirmar sff? Por vezes é simplesmente o facto do mail anunciado estar errado ou desatualizado.

Reverifica sff apenas aqueles que têm invalid

muito obrigado e um abraço

Pena Verde (AGUIAR DA BEIRA)
[email protected]
invalid
no_dns_entries 


Forninhos (AGUIAR DA BEIRA)
[email protected]
invalid
no_dns_entries 


Sequeiros e Gradiz (AGUIAR DA BEIRA)
[email protected]
invalid
mailbox_not_found 


Albergaria-a-Velha e Valmaior (ALBERGARIA-A-VELHA)
[email protected]
do_not_mail
role_based 


Santa Eugénia (ALIJÓ)
[email protected]
invalid
mailbox_not_found 


Vilarelhos (ALFÂNDEGA DA FÉ)
[email protected]
invalid
mailbox_not_found 


Pegarinhos (ALIJÓ)
[email protected]
invalid
mailbox_not_found 


Castedo e Cotas (ALIJÓ)
[email protected]
invalid
no_dns_entries 


Almeida (ALMEIDA)
[email protected]
do_not_mail
role_based 


São João de Negrilhos (ALJUSTREL)
[email protected]
invalid
mailbox_not_found 


Vilar Formoso (ALMEIDA)
[email protected]
do_not_mail
role_based 


Vale da Mula (ALMEIDA)
[email protected]
invalid
no_dns_entries 


Azinhal, Peva e Valverde (ALMEIDA)
[email protected]
invalid
mailbox_not_found 


Pelmá (ALVAIÁZERE)
[email protected]
invalid
mailbox_not_found 


Carrazedo (AMARES)
[email protected]
invalid
no_dns_entries 


Bouro (Santa Marta) (AMARES)
[email protected]
invalid
no_dns_entries 


Soajo (ARCOS DE VALDEVEZ)
[email protected]
invalid
no_dns_entries 


Aguiã (ARCOS DE VALDEVEZ)
[email protected]
invalid
mailbox_not_found 


Celavisa (ARGANIL)
[email protected]
invalid
no_dns_entries 


Aldeias (ARMAMAR)
[email protected]
do_not_mail
role_based 


Azambuja (AZAMBUJA)
[email protected]
invalid
no_dns_entries 


Viariz (BAIÃO)
[email protected]
invalid
mailbox_not_found 


Gestaçô (BAIÃO)
[email protected]
invalid
mailbox_not_found 


Abade de Neiva (BARCELOS)
[email protected]
invalid
mailbox_not_found 


Barqueiros (BARCELOS)
[email protected]
invalid
no_dns_entries 


Borba (Matriz) (BORBA)
[email protected]
invalid
mailbox_not_found 


Esporões (BRAGA)
[email protected]
do_not_mail
role_based_catch_all 


Palmeira (BRAGA)
[email protected]
invalid
no_dns_entries 


Ruilhe (BRAGA)
[email protected]
invalid
no_dns_entries 


Salsas (BRAGANÇA)
[email protected]
invalid
mailbox_not_found 


Vidais (CALDAS DA RAINHA)
[email protected]
invalid
mailbox_not_found 


Landal (CALDAS DA RAINHA)
[email protected]
invalid
no_dns_entries 


Seixas (CAMINHA)
[email protected]
invalid
mailbox_not_found 


Murtede (CANTANHEDE)
[email protected]
invalid
no_dns_entries 


Pereiros (CARRAZEDA DE ANSIÃES)
[email protected]
invalid
mailbox_not_found 


Pepim (CASTRO DAIRE)
[email protected]
invalid
mailbox_not_found 


Agilde (CELORICO DE BASTO)
[email protected]
invalid
mailbox_not_found 


Lajeosa do Mondego (CELORICO DA BEIRA)
[email protected]
invalid
mailbox_not_found 


Codeçoso (CELORICO DE BASTO)
[email protected]
invalid
no_dns_entries 


Vilarelho da Raia (CHAVES)
[email protected]
invalid
mailbox_not_found 


Eiras, São Julião de Montenegro e Cela (CHAVES)
[email protected]
invalid
mailbox_not_found 


Cinfães (CINFÃES)
[email protected]
invalid
mailbox_not_found 


Tortosendo (COVILHÃ)
[email protected]
do_not_mail
role_based_catch_all 


Verdelhos (COVILHÃ)
[email protected]
do_not_mail
role_based_catch_all 


Gemeses (ESPOSENDE)
[email protected]
invalid
no_dns_entries 


Arões (Santa Cristina) (FAFE)
[email protected]
invalid
mailbox_not_found 


Regadas (FAFE)
[email protected]
invalid
mailbox_not_found 


Lavos (FIGUEIRA DA FOZ)
[email protected]
invalid
mailbox_not_found 


Alhadas (FIGUEIRA DA FOZ)
[email protected]
do_not_mail
role_based 


Buarcos e São Julião (FIGUEIRA DA FOZ)
[email protected]
do_not_mail
role_based 


Colmeal e Vilar Torpim (FIGUEIRA DE CASTELO RODRIGO)
[email protected]
invalid
mailbox_not_found 


Almofala e Escarigo (FIGUEIRA DE CASTELO RODRIGO)
[email protected]
invalid
mailbox_not_found 


Poiares (FREIXO DE ESPADA À CINTA)
[email protected]
invalid
mailbox_not_found 


Alpedrinha (FUNDÃO)
[email protected]
invalid
mailbox_not_found 


Enxames (FUNDÃO)
[email protected]
do_not_mail
role_based 


Vila Franca da Serra (GOUVEIA)
[email protected]
invalid
mailbox_not_found 


Alvendre (GUARDA)
[email protected]
invalid
mailbox_not_found 


Vila Franca do Deão (GUARDA)
[email protected]
invalid
mailbox_not_found 


Barco (GUIMARÃES)
[email protected]
invalid
mailbox_not_found 


Porches (LAGOA (ALGARVE))
[email protected]
invalid
no_dns_entries 


Fajãzinha (LAJES DAS FLORES)
[email protected]
invalid
mailbox_not_found 


Várzea de Abrunhais (LAMEGO)
[email protected]
invalid
no_dns_entries 


Lumiar (LISBOA)
[email protected]
do_not_mail
role_based 


Marvila (LISBOA)
[email protected]
do_not_mail
role_based_catch_all 


Santo António (LISBOA)
[email protected]
do_not_mail
role_based 


Santa Iria de Azoia, São João da Talha e Bobadela (LOURES)
[email protected]
invalid
no_dns_entries 


Caniçal (MACHICO)
[email protected]
invalid
no_dns_entries 


Água de Pena (MACHICO)
[email protected]
invalid
no_dns_entries 


Bornes e Burga (MACEDO DE CAVALEIROS)
[email protected]
invalid
mailbox_not_found 


Porto da Cruz (MACHICO)
[email protected]
invalid
no_dns_entries 


Pedrouços (MAIA)
[email protected]
do_not_mail
role_based 


Longroiva (MÊDA)
[email protected]
invalid
mailbox_quota_exceeded 


Ranhados (MÊDA)
[email protected]
do_not_mail
role_based 


Vale Flor, Carvalhal e Pai Penela (MÊDA)
[email protected]
invalid
mailbox_not_found 


Vila Chã de Braciosa (MIRANDA DO DOURO)
[email protected]
invalid
mailbox_not_found 


Moreira (MAIA)
[email protected]
invalid
no_dns_entries 


Pêra Velha, Aldeia de Nacomba e Ariz (MOIMENTA DA BEIRA)
[email protected]
invalid
mailbox_not_found 


Leomil (MOIMENTA DA BEIRA)
[email protected]
invalid
mailbox_not_found 


Seixo de Gatões (MONTEMOR-O-VELHO)
[email protected]
invalid
mailbox_not_found 


Sarilhos Grandes (MONTIJO)
[email protected]
invalid
no_dns_entries 


Sobral (MORTÁGUA)
[email protected]
invalid
mailbox_not_found 


Póvoa de São Miguel (MOURA)
[email protected]
invalid
no_dns_entries 


Candedo (MURÇA)
[email protected]
invalid
no_dns_entries 


Noura e Palheiros (MURÇA)
[email protected]
invalid
mailbox_not_found 


São Teotónio (ODEMIRA)
[email protected]
invalid
mailbox_not_found 


Oeiras e S.Julião da Barra, Paço de Arcos e Caxias (OEIRAS)
[email protected]
invalid
no_dns_entries 


Nogueira do Cravo e Pindelo (OLIVEIRA DE AZEMÉIS)
[email protected]
do_not_mail
role_based 


Seroa (PAÇOS DE FERREIRA)
[email protected]
invalid
mailbox_not_found 


Palmela (PALMELA)
[email protected]
invalid
mailbox_not_found 


Gandra (PAREDES)
[email protected]
do_not_mail
role_based 


Paço de Sousa (PENAFIEL)
[email protected]
do_not_mail
role_based 


Valpedre (PENAFIEL)
[email protected]
invalid
no_dns_entries 


Pínzio (PINHEL)
[email protected]
invalid
mailbox_not_found 


Vascoveiro (PINHEL)
[email protected]
invalid
mailbox_not_found 


Atalaia e Safurdão (PINHEL)
[email protected]
invalid
mailbox_not_found 


Vale do Côa (PINHEL)
[email protected]
invalid
mailbox_not_found 


Vermoil (POMBAL)
[email protected]
do_not_mail
role_based 


Louriçal (POMBAL)
[email protected]
do_not_mail
role_based 


Feteiras (PONTA DELGADA)
[email protected]
invalid
no_dns_entries 


Relva (PONTA DELGADA)
[email protected]
do_not_mail
role_based_catch_all 


Boivães (PONTE DA BARCA)
[email protected]
invalid
mailbox_not_found 


Sampriz (PONTE DA BARCA)
[email protected]
invalid
mailbox_not_found 


Entre Ambos-os-Rios, Ermida e Germil (PONTE DA BARCA)
[email protected]
invalid
no_dns_entries 


Santa Cruz do Lima (PONTE DE LIMA)
[email protected]
invalid
mailbox_not_found 


Beiral do Lima (PONTE DE LIMA)
[email protected]
invalid
no_dns_entries 


São Bento (PORTO DE MÓS)
[email protected]
do_not_mail
role_based_catch_all 


Garfe (PÓVOA DE LANHOSO)
[email protected]
invalid
no_dns_entries 


Santo Emilião (PÓVOA DE LANHOSO)
[email protected]
invalid
no_dns_entries 


Monsul (PÓVOA DE LANHOSO)
[email protected]
invalid
no_dns_entries 


Geraz do Minho (PÓVOA DE LANHOSO)
[email protected]
do_not_mail
role_based_catch_all 


Águas Santas e Moure (PÓVOA DE LANHOSO)
[email protected]
invalid
mailbox_not_found 


Biscoitos (PRAIA DA VITÓRIA)
[email protected]
invalid
no_dns_entries 


Agualva (PRAIA DA VITÓRIA)
[email protected]
invalid
mailbox_not_found 


Montoito (REDONDO)
[email protected]
invalid
unroutable_ip_address 


Provesende, Gouvães Douro e S. Cristóvão Douro (SABROSA)
[email protected]
invalid
mailbox_not_found 


Bismula (SABUGAL)
[email protected]
do_not_mail
global_suppression 


Sabugal e Aldeia de Santo António (SABUGAL)
[email protected]
invalid
mailbox_not_found 


Vila do Touro (SABUGAL)
[email protected]
invalid
mailbox_not_found 


Alfaiates (SABUGAL)
[email protected]
invalid
mailbox_not_found 


Aves (SANTO TIRSO)
[email protected]
do_not_mail
role_based 


Ervedosa do Douro (SÃO JOÃO DA PESQUEIRA)
[email protected]
invalid
mailbox_quota_exceeded 


Valongo dos Azeites (SÃO JOÃO DA PESQUEIRA)
[email protected]
invalid
no_dns_entries 


Cabeçudo (SERTÃ)
[email protected]
invalid
mailbox_not_found 


Vila Nova de São Bento e Vale de Vargo (SERPA)
[email protected]
invalid
no_dns_entries 


Algoz e Tunes (SILVES)

invalid
failed_syntax_check 


Santo Quintino (SOBRAL DE MONTE AGRAÇO)
[email protected]
do_not_mail
role_based 


Casal de Cambra (SINTRA)
[email protected]
invalid
no_dns_entries 


Valença do Douro (TABUAÇO)
[email protected]
invalid
mailbox_not_found 


Sendim (TABUAÇO)
[email protected]
do_not_mail
role_based 


Desejosa (TABUAÇO)
[email protected]
invalid
mailbox_not_found 


Covide (TERRAS DE BOURO)
[email protected]
invalid
mailbox_not_found 


Cibões e Brufe (TERRAS DE BOURO)
[email protected]
invalid
failed_syntax_check 


Canas de Santa Maria (TONDELA)
[email protected]
invalid
mailbox_not_found 


Granja (TRANCOSO)
[email protected]
invalid
mailbox_not_found 


Canaveses (VALPAÇOS)
[email protected]
invalid
mailbox_not_found 


Parada de Bouro (VIEIRA DO MINHO)
[email protected]
invalid
mailbox_not_found 


Selmes (VIDIGUEIRA)
[email protected]
invalid
mailbox_quota_exceeded 


Anjos e Vilar do Chão (VIEIRA DO MINHO)
[email protected]
invalid
no_dns_entries 


Vila Franca (VIANA DO CASTELO)
[email protected]
invalid
mailbox_quota_exceeded 


Horta da Vilariça (TORRE DE MONCORVO)
[email protected]
invalid
mailbox_not_found 


São João do Peso (VILA DE REI)
[email protected]
invalid
mailbox_not_found 


Fajozes (VILA DO CONDE)
[email protected]
invalid
no_dns_entries 


Freixiel (VILA FLOR)
[email protected]
invalid
mailbox_not_found 


Esmeriz e Cabeçudos (VILA NOVA DE FAMALICÃO)
[email protected]
do_not_mail
role_based 


Vilar de Andorinho (VILA NOVA DE GAIA)
[email protected]
invalid
mailbox_quota_exceeded 


Oleiros (VILA VERDE)
[email protected]
invalid
no_dns_entries 


Oleiros (VILA VERDE)
[email protected]
invalid
no_dns_entries 


Vilar de Lomba e São Jomil (VINHAIS)
[email protected]
invalid
mailbox_not_found 

502 Bad Gateway

👋 Boas! Só para informar que o serviço está a dar 502 Bad Gateway.
Já agora, obrigado pelo serviço que tem sido útil para ajudar a estruturar informações pessoais 👍

Nome do presidente da camara

Boa tarde
tinha testado em detalhe (antes das ultimas eleições autárquicas) as informações devolvidas pela Api parece que o nome do presidente de camara já não aparece?
certo ?
Obrigado

retornar JSON também com o host `json.geoapi.pt`

@waldyrious e @joao

Neste momento a API retorna JSON quando

  • tem o parâmetro GET json=1, ex: /municipios/évora?json=1
  • o pedido tem no cabeçalho HTTP Accept: application/json

Estava a pensar também adicionalmente um host json.geoapi.pt, ex: https://json.geoapi.pt/gps/40.153687,-8.514602

Que vos parece a ideia?

Formato das coordenadas no HTML

Entretanto, se me perdoarem a preguiça de abrir um issue separado, posso sugerir que, no output HTML, as coordenadas sejam formatadas com graus, minutos e segundos, em vez de no formato decimal? Isto porque esse formato já está presente quer no URL, quer no texto de título, pelo que é redundante:

image

Originally posted by @waldyrious in #60 (comment)

Processamento de dados do json

Algumas freguesias vêm do JSON de formas variadas e o regex não está a processar correctamente

a freguesia pode vir no formato freguesia (município) ou no formato freguesia (município (região))

desta string temos que retirar a freguesia e o município

Sugestão - Retornar dicofre

Excelente webAPI e iniciativa! Sugeria apenas retornar também o código dicofre pois é o identificador único de uma Freguesia. Esta informação vem na CAOP e permite fazer a comparação com outros dados, de outras aplicações, não por uma string mas por um valor inteiro inequívoco.
Obrigado pela geoptapi!

/municipios/{nome}/freguesias

Olá,
Poderia por gentileza implementar o caminho acima em que traga a lista de freguesias sem detalhes parecido com /municipios/freguesias, mas só para um município?

Assim não é preciso filtrar a lista inteira por nome, nem ter de filtrar por detalhes de json objects representando toda uma freguesia.

Exemple de resposta que eu gostaria desse endpoint:
/municipios/abrantes/freguesias traria:

{
"freguesias":[
"Bemposta",
"Carvalhal",
"Fontes",
"Martinchel",
"Mouriscas",
"Pego",
"Rio de Moinhos",
"Tramagal",
"União das freguesias de Abrantes (São Vicente e São João) e Alferrarede",
"União das freguesias de Aldeia do Mato e Souto",
"União das freguesias de Alvega e Concavada",
"União das freguesias de São Facundo e Vale das Mós",
"União das freguesias de São Miguel do Rio Torto e Rossio ao Sul do Tejo"
]
}

Obrigado,

Aplicar limitador apenas para os endpoints da API, excetuando o index e static assets

@jfoclpf, estive um bocado desligado no último mês e estava agora a acompanhar os issues em que sou mencionado.

Está a dar-me um erro de Too many requests, please try again later., quando tendo aceder a qualquer página no geoapi.pt. Tenho consciencia que existe um limite de 100 pedidos por 15 minutos, mas no máximo terei visitado 10 páginas/endpoints.

Será que o limite também está a ser aplicado a assets que sejam pedidos, ao retornar uma página e não somente a visitas de um determinado URL?

Adicionalmente, talvez fosse melhor excluir a homepage dos limites, ou pelo menos aumentar para as páginas estáticas, de modo a que um utilizador que não esteja consciente do limite de 100 pedidos encontrar a documentação em que tal é mencionado:

screenshot 2022-11-03 at 15 19 09

Criar openapi.json for OpenAPI

Devemos também apresentar um documento openapi.json para o OpenAPI
https://oai.github.io/Documentation/

The OpenAPI Specification (OAS) defines a standard, programming language-agnostic interface description for HTTP APIs, which allows both humans and computers to discover and understand the capabilities of a service without requiring access to source code, additional documentation, or inspection of network traffic. When properly defined via OpenAPI, a consumer can understand and interact with the remote service with a minimal amount of implementation logic. Similar to what interface descriptions have done for lower-level programming, the OpenAPI Specification removes guesswork in calling a service.

Ou seja, o OpenApi é apenas um "mapa" da API, não colocar qualquer restrição

Change directory structure considering this is a monorepo

Right now

.
├── js
│   ├── index.html
│   ├── routines
│   │   └── generatePostalCodes
│   └── server-modules
│       └── routes
├── res
│   ├── details-parishes-municipalities
│   ├── portuguese-administrative-chart
│   └── postal-codes
│       └── data
│           ├── 1000
│           ├── ...
│           ├── ...
│           └── 9980
├── test
└── views
    ├── css
    ├── fonts
    │   └── poppins
    ├── js
    └── lib
        └── leaflet
            └── images

I was wondering something like this

.
├── res
│   ├── details-parishes-municipalities
│   ├── portuguese-administrative-chart
│   └── postal-codes
│       └── data
│           ├── 1000
│           ├── ...
│           └── 9980
├── routines
│   └── generatePostalCodes
├── src
│   ├── public
│   │   ├── css
│   │   ├── fonts
│   │   │   └── poppins
│   │   ├── js
│   │   └── lib
│   │       └── leaflet
│   │           └── images
│   ├── server
│   │   ├── routes
│   │   ├── services
│   │   ├── middlewares
│   │   └── utils
│   └── views
└── test

Respostas HAL+JSON

Para que esta API seja uma RESTful API, a resposta será HAL, neste caso HAL+JSON

{
  "nome": "Porto",
  "descrição": "Lista de freguesias do município do Porto",
  "_links": {
    "self": { "href": "/municipios/porto/freguesias" },
    "up": { "href": "/municipios/porto" },
    "freguesias": [
      {
        "nome": "Bonfim",
        "href": "/municipios/porto/freguesias/bonfim",
        "_links": { "self": { "href": "/municipios/porto/freguesias/bonfim" } }
      },
      {
        "nome": "Campanhã",
        "href": "/municipios/porto/freguesias/campanhã",
        "_links": { "self": { "href": "/municipios/porto/freguesias/campanhã" } }
      }
    ]
  },
  "freguesias": [
    "Bonfim",
    "Campanhã",
    "Paranhos",
    "Ramalde",
    "União das freguesias de Aldoar, Foz do Douro e Nevogilde",
    "União das freguesias de Cedofeita, Santo Ildefonso, Sé, Miragaia, São Nicolau e Vitória",
    "União das freguesias de Lordelo do Ouro e Massarelos"
  ]
}

Também passa a validação e é mais fácil de ler.

Originally posted by @jfoclpf in #42 (comment)

Mais info em : https://stateless.group/hal_specification.html

Testar JSON Schema: https://jsonschema.dev/

HAL+JSON schema: https://github.com/evently-cloud/hal-json-schema/blob/main/hal.json

Dar latitude e longitude em função do Código Postal

A par com os resultados do Código Postal, exemplo

A) https://geoptapi.org/cp/1950-446

B) https://geoptapi.org/cp/1950-449

dar também dados latitude e longitude, tal pode ser obtido com o open street maps, mais precisamente com o argumento q, visto que os códigos postais do open street maps estão desatualizados

A) https://nominatim.openstreetmap.org/search?country=portugal&q=rua+armandinho,lisboa&format=json&addressdetails=1

B) https://nominatim.openstreetmap.org/search?country=portugal&q=Rua%20Fernando%20Maur%C3%ADcio%2030,lisboa&format=json&addressdetails=1

Usar elemento `<details>` para colapsar listas extensas no output HTML

Para listagens muito extensas (por exemplo os dados dos censos do INE introduzidos em #53), dá jeito poder colapsá-las com o uso do elemento <details>, que implementa essa funcionalidade nativamente nos browsers (sem necessidade de JavaScript).

Exemplo:

<details>
  <summary>Conteúdo colapsado:</summary>
  <ul>
    <li>um</li>
    <li>dois</li>
    <li>três</li>
  </ul>
</details>

Resultado:

Conteúdo colapsado:
  • um
  • dois
  • três

Ignorar pontos do ficheiro do OpenAddresses

Adicionar uma função aqui

https://github.com/jfoclpf/geoapi.pt/blob/main/routines/commons/fetchAddresses.js

Que elimine pontos errados ou outliers

Os pontos devem constar num ficheiro ignoreAddresses.json na mesma pasta.

Este JSON será um Array de objetos, cada objeto contendo as chaves fid,id e basta que uma dessas chaves corresponda a um valor encontrado no ficheiro original, que esse ponto será expurgado do processamento posterior.

Neste momento temos estes pontos fornecidos pelo @pinanunes Telmo

fid,id,street,house,postcode,city,lon,lat
"2600375",pt.ine.add.PTCONT.3157276,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2600417",pt.ine.add.PTCONT.3157277,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2600777",pt.ine.add.PTCONT.3157278,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2601125",pt.ine.add.PTCONT.3157279,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2601167",pt.ine.add.PTCONT.3157551,R ALVIDE,"960",2755-315,ALCABIDECHE,-9.13703969385492,38.7386227381695
"2659880",pt.ine.add.PTCONT.3157282,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2659881",pt.ine.add.PTCONT.3157283,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2659882",pt.ine.add.PTCONT.3157284,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2660234",pt.ine.add.PTCONT.3157285,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2660426",pt.ine.add.PTCONT.3157286,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2660484",pt.ine.add.PTCONT.3157287,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2660769",pt.ine.add.PTCONT.3157288,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2660846",pt.ine.add.PTCONT.3157289,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2660847",pt.ine.add.PTCONT.3157290,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2660848",pt.ine.add.PTCONT.3157291,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2660849",pt.ine.add.PTCONT.3157292,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2660850",pt.ine.add.PTCONT.3157293,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2660871",pt.ine.add.PTCONT.3157294,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2661066",pt.ine.add.PTCONT.3157295,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2661165",pt.ine.add.PTCONT.3157296,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2661262",pt.ine.add.PTCONT.3157297,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2661338",pt.ine.add.PTCONT.3157298,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2670239",pt.ine.add.PTCONT.3155328,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2670807",pt.ine.add.PTCONT.3157274,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2670836",pt.ine.add.PTCONT.3157280,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2670911",pt.ine.add.PTCONT.3157275,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2670964",pt.ine.add.PTCONT.3157281,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2670969",pt.ine.add.PTCONT.3157273,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2670986",pt.ine.add.PTCONT.3157532,AV DIOGO CÃO,"18",2835-203,VALE DA AMOREIRA,-9.13703969385492,38.7386227381695
"2670993",pt.ine.add.PTCONT.3157531,R SÃO BENTO,"510",1250-221,LISBOA,-9.13703969385492,38.7386227381695
"2670994",pt.ine.add.PTCONT.3157533,R CIDADE DE SETÚBAL,,2975-220,QUINTA DO CONDE,-9.13703969385492,38.7386227381695
"2670995",pt.ine.add.PTCONT.3157534,PCT MALMEQUERES,,1685-878,FAM,-9.13703969385492,38.7386227381695
"2670996",pt.ine.add.PTCONT.3157535,AV MARIA HELENA VIEIRA DA SILVA,"8",1750-182,LISBOA,-9.13703969385492,38.7386227381695
"2670997",pt.ine.add.PTCONT.3157536,AV �LVARO PAIS,,1600-007,LISBOA,-9.13703969385492,38.7386227381695
"2670998",pt.ine.add.PTCONT.3157538,LG CONDE OTTOLINI,"2",1500-201,LISBOA,-9.13703969385492,38.7386227381695
"2670999",pt.ine.add.PTCONT.3157539,R MANUEL DE ARRIAGA,"3",2620-319,RAMADA,-9.13703969385492,38.7386227381695
"2671000",pt.ine.add.PTCONT.3157540,R SOCIEDADE FARMACÊUTICA,"21",1150-337,LISBOA,-9.13703969385492,38.7386227381695
"2671001",pt.ine.add.PTCONT.3157541,PCT FERNÃO LOPES CASTANHEDA,"3",2810-336,ALMADA,-9.13703969385492,38.7386227381695
"2671002",pt.ine.add.PTCONT.3157542,R VIRG�LIO MARTINHO,"10",2810-419,ALMADA,-9.13703969385492,38.7386227381695
"2671003",pt.ine.add.PTCONT.3157543,R VICENTE DIAS,"12",1400-358,LISBOA,-9.13703969385492,38.7386227381695
"2671004",pt.ine.add.PTCONT.3157544,R DO GRAJAL,"19",2735-617,AGUALVA-CAC,-9.13703969385492,38.7386227381695
"2671005",pt.ine.add.PTCONT.3157545,AV VASCO DA GAMA FERNANDES,"7",2685-330,PRIOR VELHO,-9.13703969385492,38.7386227381695
"2671006",pt.ine.add.PTCONT.3157546,AV DA LIBERDADE,"23",2620-318,RAMADA,-9.13703969385492,38.7386227381695
"2671007",pt.ine.add.PTCONT.3157547,AL ALTO DA BARRA,"5",2780-180,OEIRAS,-9.13703969385492,38.7386227381695
"2671008",pt.ine.add.PTCONT.3157548,AV NAT�LIA CORREIA,,2955-098,PINHAL NOVO,-9.13703969385492,38.7386227381695
"2671009",pt.ine.add.PTCONT.3157549,R GARCIA DE ORTA,"586",2975-275,QUINTA DO CONDE,-9.13703969385492,38.7386227381695
"2671010",pt.ine.add.PTCONT.3157550,R LU�S DE CAMÕES,"28",2855-469,CORROIOS,-9.13703969385492,38.7386227381695
"2671011",pt.ine.add.PTCONT.3157552,R ALMIRANTE REIS,"2",2855-407,CORROIOS,-9.13703969385492,38.7386227381695
"2671012",pt.ine.add.PTCONT.3157553,AV ENG ARANTES DE OLIVEIRA,"23",1900-221,LISBOA,-9.13703969385492,38.7386227381695
"2671013",pt.ine.add.PTCONT.3157554,R ALMADA NEGREIROS,"24",2650-423,AMADORA,-9.13703969385492,38.7386227381695
"2671014",pt.ine.add.PTCONT.3157555,PCT DAS COMUNIDADES LUS�ADAS,"10",2735-093,AGUALVA-CAC,-9.13703969385492,38.7386227381695
"2671015",pt.ine.add.PTCONT.3157556,R GUARDA-JÓIAS,"16",1300-293,LISBOA,-9.13703969385492,38.7386227381695
"2671016",pt.ine.add.PTCONT.3157557,R ALTO DO CARVALHÃO,"17",1070-048,LISBOA,-9.13703969385492,38.7386227381695
"2671017",pt.ine.add.PTCONT.3157558,PCT �LVARO CAVALHEIRO,"1",2840-489,SEIXAL,-9.13703969385492,38.7386227381695
"2671018",pt.ine.add.PTCONT.3157559,R FRANCISCO ANTÓNIO DE ALMEIDA,,2865-282,FERN,-9.13703969385492,38.7386227381695
"2671019",pt.ine.add.PTCONT.3157560,AV DE S. JOSÉ,"8",2685-108,SACAVAM,-9.13703969385492,38.7386227381695
"2671020",pt.ine.add.PTCONT.3157561,AV WENCESLAU BALSEIRO GUERRA,"145",2775-313,PAREDE,-9.13703969385492,38.7386227381695
"2671021",pt.ine.add.PTCONT.3157562,R GONÇALVES LOBATO,"2",2720-264,AMADORA,-9.13703969385492,38.7386227381695
"2671022",pt.ine.add.PTCONT.3157563,ESTR DA SERRA DA MIRA,"31",2700-789,AMADORA,-9.13703969385492,38.7386227381695
"2671023",pt.ine.add.PTCONT.3157564,R HELENA S� E COSTA,"13",2820-698,CHARNECA DA CAPARICA,-9.13703969385492,38.7386227381695
"2671024",pt.ine.add.PTCONT.3157565,AV 1º DE MAIO,"124",2840-547,ALDEIA DE PAIO PIRES,-9.13703969385492,38.7386227381695
"2671025",pt.ine.add.PTCONT.3157566,AV INFANTE D. AUGUSTO,"36",2845-115,AMORA,-9.13703969385492,38.7386227381695
"2671026",pt.ine.add.PTCONT.3157567,R VIEIRA DA SILVA,"12",2675-216,ODIVELAS,-9.13703969385492,38.7386227381695
"2671027",pt.ine.add.PTCONT.3157568,R SANTO ANTÓNIO DA BOLONHA,"17",2625-249,P4VOA DE SANTA IRIA,-9.13703969385492,38.7386227381695
"2671028",pt.ine.add.PTCONT.3157569,R LU�S DE CAMÕES,,2865-601,FERN,-9.13703969385492,38.7386227381695
"2671029",pt.ine.add.PTCONT.3157570,R LAURA AYRES,,2660-293,SANTO ANT NIO CAVALEIROS,-9.13703969385492,38.7386227381695
"2671030",pt.ine.add.PTCONT.3157571,R 1º DE MAIO,"32",1885-067,MOSCAVIDE,-9.13703969385492,38.7386227381695
"2671031",pt.ine.add.PTCONT.3157572,LG DE SANTO ANTÓNIO,"4",2665-001,AZUEIRA,-9.13703969385492,38.7386227381695
"2671032",pt.ine.add.PTCONT.3157573,R DE SÃO CRISTÓVÃO,"365",1685-820,FAM,-9.13703969385492,38.7386227381695
"2671033",pt.ine.add.PTCONT.3157574,R CIDADE DE BRASILIA,"3",2735-655,AGUALVA-CAC,-9.13703969385492,38.7386227381695
"2671034",pt.ine.add.PTCONT.3157575,R GENERAL JOSÉ CELESTINO DA SILVA,"6",1500-309,LISBOA,-9.13703969385492,38.7386227381695
"2671035",pt.ine.add.PTCONT.3157576,R ELVIRA VELEZ,"289",2785-028,S2O DOMINGOS DE RANA,-9.13703969385492,38.7386227381695
"2671036",pt.ine.add.PTCONT.3157577,R ANTÓNIO ALÇADA BAPTISTA,"6",1500-911,LISBOA,-9.13703969385492,38.7386227381695
"2671037",pt.ine.add.PTCONT.3157578,R SEVERIANO FALCÃO,"10",2660-532,SANTO ANTOO DO TOJAL,-9.13703969385492,38.7386227381695
"2671038",pt.ine.add.PTCONT.3157579,R ENG JOSÉ FREDERICO ULRICH,"41",2795-113,LINDA A VELHA,-9.13703969385492,38.7386227381695
"2671039",pt.ine.add.PTCONT.3157580,PCT ANTÓNIO JOSÉ DA SILVA,"3",2675-228,ODIVELAS,-9.13703969385492,38.7386227381695
"2671040",pt.ine.add.PTCONT.3157581,AV LU�S S�,"15",2700-181,AMADORA,-9.13703969385492,38.7386227381695
"2671041",pt.ine.add.PTCONT.3157582,R DO CONDE REDONDO,"9",1150-101,LISBOA,-9.13703969385492,38.7386227381695
"2671042",pt.ine.add.PTCONT.3157583,R DOS ABETOS,,2975-108,QUINTA DO CONDE,-9.13703969385492,38.7386227381695
"2671043",pt.ine.add.PTCONT.3157584,R DOS HERDEIROS,,2825-048,CAPARICA,-9.13703969385492,38.7386227381695
"2671044",pt.ine.add.PTCONT.3157585,R SOUSA TAVARES,"5",2780-204,OEIRAS,-9.13703969385492,38.7386227381695
"2671045",pt.ine.add.PTCONT.3157586,R DO CARRASCAL,"275",2755-101,ALCABIDECHE,-9.13703969385492,38.7386227381695
"2671046",pt.ine.add.PTCONT.3157587,R FREDERICO GEORGE,"29",1600-468,LISBOA,-9.13703969385492,38.7386227381695
"2671047",pt.ine.add.PTCONT.3157588,ESCNH DA CORVINA,"16",2825-832,TRAFARIA,-9.13703969385492,38.7386227381695
"2671048",pt.ine.add.PTCONT.3157589,R DR. MARQUES DA MATA,"175",2775-608,CARCAVELOS,-9.13703969385492,38.7386227381695
"2671049",pt.ine.add.PTCONT.3157590,R DOM LU�S DE CASTRO,"2",2790-188,CARNAXIDE,-9.13703969385492,38.7386227381695
"2671050",pt.ine.add.PTCONT.3157591,R JOÃO CHAGAS,"8",1500-493,LISBOA,-9.13703969385492,38.7386227381695
"2671051",pt.ine.add.PTCONT.3157592,R DA CRUZ A ALCÂNTARA,"30",1300-159,LISBOA,-9.13703969385492,38.7386227381695
"2671052",pt.ine.add.PTCONT.3157593,R LU�S S�,,2625-731,VIALONGA,-9.13703969385492,38.7386227381695
"2671053",pt.ine.add.PTCONT.3157594,R HENBRIQUES LOPES MENDONÇA,"3",1495-692,CRUZ QUEBRADA-DAFUNDO,-9.13703969385492,38.7386227381695
"2671054",pt.ine.add.PTCONT.3157595,R MARIANA VILAR,"1",1600-220,LISBOA,-9.13703969385492,38.7386227381695
"2671055",pt.ine.add.PTCONT.3157596,R GUERRA JUNQUEIRO,10 B,2660-266,SANTO ANT NIO CAVALEIROS,-9.13703969385492,38.7386227381695
"2671056",pt.ine.add.PTCONT.3157597,R ALTO DOS MO�NHOS,"6",1500-459,LISBOA,-9.13703969385492,38.7386227381695
"2671057",pt.ine.add.PTCONT.3157598,R SABINO DE SOUSA,"40",1900-397,LISBOA,-9.13703969385492,38.7386227381695
"2671058",pt.ine.add.PTCONT.3157599,R 25 DE ABRIL,"3",2695-788,S8O JOLO DA TALHA,-9.13703969385492,38.7386227381695
"2671059",pt.ine.add.PTCONT.3157600,R TERESA BORGES PORTA 3,,2830-106,BARREIRO,-9.13703969385492,38.7386227381695
"2751654",pt.ine.add.PTCONT.3450328,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2751655",pt.ine.add.PTCONT.3450329,ICOR-ALOJAMENTO FICTICIO,,1000-043,LISBOA,-9.13703969385492,38.7386227381695
"2751753",pt.ine.add.PTCONT.3450747,R DA CORDOARIA,"44",2845-054,AMORA,-9.13703969385492,38.7386227381695
"2751754",pt.ine.add.PTCONT.3450748,LG DAS ANDORINHAS,"14",2670-409,LOURES,-9.13703969385492,38.7386227381695

@joao se quiseres adicionar alguns pontos, também és muito bem vindo

Ilhas

Viva,

Reparei que coordenadas nas ilhas devolvem formatos diferentes…

Por exemplo, na Ilha da Madeira, aparece

{
  "freguesia": "Câmara de Lobos",
  "concelho": "Câmara de Lobos",
  "ilha": "Ilha da Madeira (Madeira)"
}

Nos Açores aparece:

{
  "freguesia": "Lajes do Pico",
  "concelho": "Lajes do Pico",
  "ilha": "Ilha do Pico"
}

Mantendo o formato, provavelmente deveria aparecer Ilha do Pico (Açores), não?

Reduzir tamanho dos pontos na visualização de CP3

Quando abro um resultado de CP4, como por exemplo https://geoapi.pt/cp/4700, os pontos individuais parecem ter apenas alguns pixels de diâmetro:

image

...e não ficam mais pequenos se eu faço zoom out, ou seja, o renderer tem um tamanho mínimo para os pontos:

image

Mas se faço zoom in, nota-se que eles são relativamente grandes à escala dos edifícios:

image

O efeito é mais marcante quando a visualização é de um CP3, que por natureza começa logo num zoom mais aproximado. Por exemplo, https://geoapi.pt/cp/4700-312:

image

Era preferível que os pontos aparecessem sempre como pontos, e não como círculos. Ou seja, o diâmetro desses círculos devia ser pequeno o suficiente para ser representado como pontos em qualquer nível de zoom. Ou se calhar existe mesmo uma primitiva gráfica de pontos em vez de círculos, o que talvez até possa tornar o mapa mais ágil quando há muitos pontos a visualizar.

Obter as localidades em função das freguesias

Viva,

Após ter analisado a API não encontrei forma de o fazer, mas acho que seria interessante por exemplo nas localidadidas arranjar forma de obter as mesmas referenciando a freguesia.

Por exemplo com este pedido:

https://geoapi.pt/freguesia/Cuba?json=1

Obtemos diversos dados, e seria interessante tendo em conta o código postal, ou até mesmo o codigoine referenciar as localidades, visto que as mesmas já têm a "Designação Postal", no entanto para algumas freguesias não é possivel pesquisar através deste campo pois trata-se de uniões.

Não daria para fazer com que neste pedido https://geoapi.pt/cp/2495 as localidades estivessem associadas diretamente à freguesia con um código ou algo.

Allow only numbers on postal code TextBox

@Didroin suggests:

The postal code text box currently allows for any character to be inserted. Since the portuguese postal code uses only hyphen separated numbers, any other inputs can be ignored.
Additionally, since the hyphen always occurs after the 4th number, this can also be automatized.
In short:

  • Ignore any inputs other than numerals 0-9
  • Automatically add hyphen after the 4th numeral

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

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 jfoclpf/outliers2d#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?

Agregar dados dos Censos por freguesia e município

@pinanunes disse:

A agregação por freguesia não tem problema. É só agregar os dados (soma de
valores) à variável DTMNFRSEC21. As subsecções são subdivisões das freguesias.

Somar os dados agregados por freguesia e município e adicionar aos objetos freguesia e município em respetivas keys dos objetos: censos2011: {}

Os ficheiros GPKG do INE estão aqui.

Os detalhes aparecerão através dos respectivos caminhos, por exemplo:

https://geoapi.pt/municipios/guimar%C3%A3es/freguesias/serzedelo

Use body parser

https://www.npmjs.com/package/body-parser

const express = require('express');
const bodyParser = require('body-parser');

const app = express();

app.use(bodyParser.json());

app.post('/', (req, res) => {
  res.json(req.body);
});

app.listen(3000, () => console.log('server started'));

Zonas costeiras

Por vezes, não é possível determinar distrito/concelho/freguesia porque a coordenada está sobre o mar, mas apenas a alguns metros da linha costeira.
Não seria possível implementar uma opção que, quando a coordenada cai fora por uma pequena margem (algumas dezenas de metros, por exemplo) devolvesse a freguesia mais próxima?

Obrigado

Agregar por distrito

Criar um route /distrito

  • apenas /distrito lista os distritos
  • /distrito/municipios lista árvore de distritos com municípios
  • /distrito/municipios/freguesias lista árvore de distritos com municípios com freguesias

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.