Como Migrar do Geocoder para o Endereço BH¶
Visão Geral¶
O Geocoder foi o primeiro serviço de geocodificação da Prefeitura Municipal de Belo Horizonte. Os dados disponibilizados por ele, são provenientes da base cadastral mantida pela Gerência de Manutenção do Cadastro Territorial Multifinalitário - GCGS-PB. Neste serviço a chave de identificação dos endereços id correspondia à chave da tabela de cadastro de endereços, conhecida como id_ctm. E por este motivo estava sujeito a deixar de existir, em função das manutenções diárias de endereçamento da cidade.
O Endereço BH, utiliza uma outra abordagem para identificação dos endereços. Nele o id não corresponde ao id_ctm. O id do Endereço BH é constante ou imutável. Mesmo que o endereço tenha seu estado modificado, ou o mesmo seja deletado*, esta chave continuará existindo e assim os sistemas que a utilizarem poderão continuar resgatando o endereço e ter a informação mais recente sobre o mesmo, sem o risco de gerar alguma quebra nos dados.
Ao contrário do Geocoder o Endereço BH é autenticado e deve ser integrado mediante o protocolo OpenID. Os detalhes desse processo serão encontrados ao longo deste documento.
Também neste documento será detalhado os casos de usos similares e funcionalidades que não foram contempladas no novo serviço.
* nenhum endereço sofre deleção física da base de dados
Passo a passo¶
- Criação de usuário e permissões para acesso ao Endereço BH
- Validação dos casos de usos disponíveis no Endereço BH
- Alteração na implementação existente
Passo 1¶
Criação de usuário e permissões para acesso ao Endereço BH¶
Para acessar os serviços do Endereço BH é necessário um usuário, do tipo sistema, cadastrado no AcessoPBH.
Caso o sistema ainda não possua usuário, é necessário solicitar para área responsável. Mais informações neste link ou mais informações no manual disponível em autorizacaodesistemas.pbh.gov.br
Solicitar concessão de permissão para que o usuário possa acessar os serviços do Endereço BH Mais informações
Passo 2¶
Validação dos casos de usos disponíveis no Endereço BH¶
Endpoints¶
É necessário idenfificar todos os casos de usos atualmente utilizados no Geocoder e verificar se casos de usos disponíveis no Endereço BH atendem aos requisitos existentes. Para facilitar a migração tabela abaixo contém as possíveis equivalências entre os serviços do Geocoder e Endereço BH
Possíveis equivalências entre endpoints dos serviços¶
Geocoder | Endereço BH |
---|---|
/address | /enderecos |
/logradouros | /logradouros |
/logradouros/tipos | /tipos_logradouro |
/bairros | /bairros_populares |
Possíveis equivalência entre os parâmetros utilizados nos dois serviços¶
Exemplos de possíveis equivalências¶
Caso de uso | Exemplo Geocoder | Exemplo Endereço BH | Nível de atendimento |
---|---|---|---|
Consulta por Logradouro | /address?logradouro=afonso pena |
/enderecos?q=afonso pena |
parcial |
Consulta por Logradouro Popular | /address?logradouro=catalao&numero=1275& classificacao=completo |
não atendido | |
Consulta por Logradouro Oficial e Popular | /address?logradouro=catalao&numero=1275&classificacao=completo |
/enderecos?q=afonso pena |
não atendido |
Consulta por Código Logradouro e Número | /address?idlogradouro=1259&numero=1212 |
/enderecos?id_logradouro=1259&q=1212 |
parcial BUG |
Consulta por Logradouro e Número | /address?logradouro=afonso pena&numero=1212 |
/enderecos?q=afonso pena 1212 |
parcial |
Consulta por Logradouro e Número com letra | /address?logradouro=manaus&numero=516B |
/enderecos?q=manaus 516B |
parcial |
Consulta por Logradouro, Número e Bairro | /address?logradouro=afonso&numero=1212&bairro=centro |
/enderecos?q=afonso pena 1212 centro |
parcial |
Consulta por Logradouro, Número com letra e Bairro | /address?logradouro=manaus&numero=516B&bairro=santa efigenia |
/enderecos?q=manaus 516B santa efigenia |
parcial |
Consulta por Bairro | /address?bairro=buritis |
/enderecos?q=buritis |
parcial |
Consulta por CEP | /address?cep=30720530 |
/enderecos?q=30720530 |
parcial |
Consulta por CEP e Número | /address?cep=30130908&numero=1212 |
/enderecos?q=30130908 1212 |
parcial |
Consulta por CEP e Número com letra | /address?cep=30150350&numero=516B |
/enderecos?q=30150350 516B |
parcial |
Consulta por Endereço por ID | /address/6821 |
/enderecos?id_endereco_pbh=6821 |
total |
Lista de Logradouros | /logradouros?nome=afonso |
/logradouros?q=afonso |
parcial |
Lista de Logradouros e Tipo | /logradouros?nome=REDELVIM ANDRADE&tipo=RUA |
/logradouros?q=REDELVIM ANDRADE&sigla_tipo_logradouro=RUA |
parcial, parcial 3 |
Lista de Bairros | /bairros?nome=buritis |
/bairros_populares?q=buritis |
parcial |
Lista de Logradouros ativos | /logradouros?nome=REDELVIM ANDRADE&tipo=RUA&filtrado=true |
/logradouros?q=REDELVIM ANDRADE&sigla_tipo_logradouro=RUA |
parcial parcial 3 |
Nota 1¶
Equivalência entre os casos de usos¶
O Geocoder utiliza filtros para realizar a busca por endereços. O usuário informa individualmente cada campo que compõe o endereço, cabendo o Geocoder restringir o resultado da consulta somente aos endereços que possuem todos os campos informados pelo usuário.
Já o Endereço BH realiza pesquisa pela presença dos termos informados pelo usuário nos campos do endereço. O usuário deverá informar todos os termos a serem pesquisados em um único campo e Endereço BH pesquisará pela presença dos termos em todos os campos dos endereços.
Portanto, mesmo informando termos pertencentes a um determinado campo do endereço, caso estes termos estejam presentes em outros campos, estes serão incluídos no resultado.
Nota 2¶
Mudança no identificador da entidade Endereço¶
O campos id
presente no Geocoder e no Endereço BH são DIFERENTES e não possuem equivalência. Para manter a compatibilidade o campo id
da entidade Endereço do Geocoder está disponível no atributo id_endereco_pbh
no Endereço BH, mais informações abaixo
Recomendamos que seja realizada a migração também dos identificadores, para utilizar o campo id
do Endereço BH, realizando as modificações necessárias na base de dados.
Nota 3¶
Verificar a questao do Filtrado=true e dos logradouros afetados no geocoder para definir se será tratado no Endereço BH
Passo 3¶
Alteração na implementação existente¶
O serviços disponíveis no Endereço BH possuem URL, parâmetros e formatos de retorno diferentes dos serviços disponíveis no Geocoder, em alguns casos, não possuindo uma equivalência direta.
Poderá ser observado um comportamento diferente quanto aos resultados obtidos entre os serviços nos dois sistemas, principalmente diferenças quanto a presença de mais endereços ou com ordenação diferente dos resultados obtidos entre os dois sistemas.
Mudança de URL¶
URL base dos serviços:
- Geocoder
http[s]://geocoder.pbh.gov.br/geocoder/
- Endereço BH:
https://enderecobh.pbh.gov.br/api/
URL Ambiente de homologação: https://enderecobh-hm.pbh.gov.br
A nova URL está disponível somente o protoloco HTTPS
Requisição¶
Autorização e Autenticação¶
O Endereço BH implementam o protocolo OAuth2/OpenConnectID para controlar o acesso aos serviços. Para utilizar os serviços do Endereço BH é necesário encaminhar no cabeçalho de cada requisição o Acess Token obtido através do AcessoPBH/GAS-PBH
Exemplo de requisição ao Endereço BH
GET /enderecos?q=avenida afonso pena 1212
Authorization: Bearer CONTEUDO_ACESS_TOKEN
Mais informações na documentação do Endereço BH. Acesso ao link
Formato de saída¶
Endereço¶
No Geoceoder os campos dos endereços estão disponíveis nas propriedades dos objetos endereco[]
.
Exemplo saída JSON Geocoder - Pesquisa Endereço¶
{
"endereco": [
{
"bairropopular": "Centro",
"cep": "30130001",
"codregional": "19",
"idbairro": "37",
"id": "13615",
"idlogradouro": "1259",
"idregional": "2",
"idterritorio": "29",
"siglaterritorio": "CS1",
"letra": "",
"nomelogradouro": "AFONSO PENA",
"nomeregional": "CENTRO-SUL",
"numero": "254",
"tipologradouro": "AVENIDA",
"wkt": "POINT(610853.139726381 7797449.20281154)",
"idterritorioFiscalizacao": "27",
"numBairroPopular": "642"
}
],
"status": "ok"
}
Exemplo saída GeoJSON Endereço BH - Pesquisa Endereço¶
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"id": 713858,
"id_endereco_pbh": 157801,
"id_tipo_logradouro": 18,
"tipo_logradouro": "RUA",
"sigla_tipo_logradouro": "RUA",
"id_logradouro": 3125,
"nome_logradouro": "AMAROS",
"numero": 172,
"letra": "A",
"id_bairro_popular": 167,
"bairro_popular": "São Paulo",
"id_bairro_oficial": 71,
"bairro_oficial": "São Paulo",
"id_regional": 4,
"cod_regional": 21,
"nome_regional": "NORDESTE",
"cep": "31910180",
"id_territorio": 4,
"id_territorio_fiscalizacao": 7,
"sigla_territorio": "NE3",
"ind_ativo": "ativo",
"status_ctm": "E",
"wkt": {
"epsg_4326": "POINT (-43.9223085833891 -19.8685332830945)",
"epsg_31983": "POINT (612830.601300225 7802706.02354846)"
}
},
"geometry": {
"type": "Point",
"coordinates": [-43.9224199449533, -19.8685907791933]
}
}
],
"sort": {
"sorted": false,
"unsorted": true,
"empty": true
},
"offset": 0,
"pageNumber": 0,
"pageSize": 50,
"paged": true,
"unpaged": false
}
Propriedades do Endereço¶
No Endereço BH o resultado utiliza o formato GeoJSON de retorno dos resultados, cada registro é retornado camo um objeto dentro do campo {features[]}
, os campos de cada registro estão disponíveis no objeto {features[].properties}
.
Equivalências entre os campos¶
Endereço¶
Campo Geocoder | Campo Endereço BH |
---|---|
id | id_endereco_pbh |
bairropopular | bairro_popular |
cep | cep |
codregional | ? |
idbairro | id_bairro_popular |
idlogradouro | id_logradouro |
idregional | id_regional |
idterritorio | id_territorio |
siglaterritorio | sigla_territorio |
letra | letra |
nomelogradouro | nome_logradouro |
nomeregional | nome_regional |
numero | numero |
tipologradouro | tipo_logradouro |
wkt | wkt.epsg_31983 |
idterritorioFiscalizacao | id_territorio_fiscalizacao |
numBairroPopular | ? |
- | status_ctm |
Logradouro¶
Campo Geocoder | Campo Endereço BH |
---|---|
idlogradouro | id |
nomelogradouro | nome_logradouro |
idTipo | id_tipo_logradouro |
tipologradouro | tipo_logradouro |
Bairro (Bairro Popular)¶
Campo Geocoder | Campo Endereço BH |
---|---|
idBairro | id |
nomeBairro | nome_bairro |
numBairro | ? |
Logradouro¶
Campo Geocoder | Campo Endereço BH |
---|---|
idlogradouro | id |
nomelogradouro | nome_logradouro |
idTipo | id_tipo_logradouro |
tipologradouro | tipo_logradouro |
Tipo Logradouro¶
Campo Geocoder | Campo Endereço BH |
---|---|
idTipoLogradouro | id |
sigla | sigla_tipo_logradouro |
descricao | desc_tipo_logradouro |
Campo Geometria¶
No Geocoder a geometria de cada endereço está presente no {endereco[].wkt}
.
O formato de coodernada utilizado é o Sirgas 2000 23S (EPSG 31983).
Exemplo :
{
"endereco": [
{
...
"wkt": "POINT(610853.139726381 7797449.20281154)",
}
]
}
No resultado do Endereço BH cada endereço será retornado como Feature
do GeoJSON com um campo {features[].geometry}
, utilizando o sistema de coodernadas WGS84 (EPSG 4326).
Também será informado o tipo {features[].geometry.type}
de geometria e, que no caso dos endereços, será o tipo "Point"
.
Exemplo :
{
...
"features": [
{
...
"geometry": {
"type": "Point",
"coordinates": [-43.9224199449533, -19.8685907791933]
}
}
],
...
}
Será retornado também as geometrias no formato WKT (campo {features[].properties.wkt}
) nos sistemas de coordenadas:
- WGS84 (EPSG 4326) no campo
{features[].properties.wkt.epsg_4326}
- Sirgas 2000 23S (EPSG 31983) no campo
{features[].properties.wkt.epsg_31983}
Este último campo é o equivalente ao disponibilizado no Geocoder.
Exemplo :
{
...
"features": [
{
...
"properties": {
...
"wkt": {
"epsg_4326": "POINT (-43.9224199449533 -19.8685907791933)",
"epsg_31983": "POINT(612818.900382729 7802699.73479656)"
},
},
...
}
],
...
}
Passos permissão¶
Passos para solicitar concessão de permissão¶
- Definir quais serviços do Endereço BH serão utilizados.
- Identificar as permissões necessárias para acessos aos serviços.
- Solicitar via SDM a concessão das permissões para o usuário do sistema, informando o usuário e os tipos de permissões.
Área da solicitação SDM:
Servicos de Tecnologia e Informacao.Geoprocessamento.BHMap.Conteudo
Caso Uso básico do Geocoder¶
- Usuário inicia a pesquisa por um determinado endereço em uma Aplicação.
- Aplicação realiza a consulta ao Geocoder, utilizando o serviço REST.
- Geocoder retorna o resultado em formato JSON para Aplicação.
- Aplicação exibe para o Usuário o endereço localizado.
Caso Uso básico do Endereço BH¶
- Diagramas com fluxo Pesquisa de Endereço no Geocoder e no Endereço BH
- Usuário inicia a pesquisa por um determinado endereço em uma Aplicação.
- Aplicação reliza autenticação e solicitação do credencial (acess token) ao AcessoPBH
- AcessoPBH retorna a credencial para o Aplicação.
- Aplicação realiza a requisição ao Endereço BH passando no cabeçalho a a credencial obtida do _AcessoPBH.
- Endereço BH retorna o resultado em formato GeoJSON para Aplicação.
- Aplicação exibe para o Usuário o endereço localizado.