Chapter 12. PostGIS Extras

Table of Contents

This chapter documents features found in the extras folder of the PostGIS source tarballs and source repository. These are not always packaged with PostGIS binary releases, but are usually PL/pgSQL based or standard shell scripts that can be run as is.

12.1. Padronizador de endereço

Essa é uma forquilha do padronizador PAGC (código original para essa porção era Padronizador de endereço PAGC PostgreSQL).

O padronizador de endereços é uma única linha de análise sintática que pega um endereço de entrada e o normaliza baseado em um conjunto de regras armazenado em uma table e helper lex e gaz tables.

O código é construído em uma uńica biblioteca de extensão chamada address_standardizer a qual pode ser instalada com CREATE EXTENSION address_standardizer;. Juntamente com a extensão address_standardizer, uma extensão amostra de dados chamada address_standardizer_data_us é construída, a qual contém gaz, lex e regras tables para dados dos EUA. Essas extensões podem ser instaladas via: CREATE EXTENSION address_standardizer_data_us;

O código para esta extensão pode ser encontrado no PostGIS extensions/address_standardizer e está atualmente autocontido.

Para instruções de instalação consulte: Section 2.3, “Instalando e usando o padronizador de endereço”.

12.1.1. Como o analisador sintático funciona

O analisador sintático funciona da direita para a esquerda observando primeiramente os macro elementos para CEP, estado/província, cidade e depois observando os micro elementos para determinar se estamos lidando com uma casa numerada em uma rua ou intersecção ou ponto de referência. Ele normalmente não procura pelo código ou nome do país, mas isso poderia ser introduzido no futuro.

Código do país

Suposto de ser EUA ou CA com base em: CEP como EUA ou estado/província do Canadá como EUA ou Canadá outro EUA

Caixa postal/CEP

Esses são reconhecidos utilizando expressões Perl compatíveis. Esses regexs estão atualmente no parseaddress-api.c e são relativamente fáceis de alterar, caso seja necessário.

Estado/província

Esses são reconhecidos utilizando expressões Perl compatíveis. Esses regexs estão atualmente no parseaddress-api.c e são relativamente fáceis de alterar, caso seja necessário.

12.1.2. Tipos de padronizador de endereço

Abstract

Essa seção lista os tipos de dados PostgreSQL instalados pela extensão do padronizador de endereço. Note que descrevemos o comportamento de distribuição de papeis desses que são bastante importantes especialmente quando desenvolvem suas próprias funções.

  • stdaddr — Um tipo composto que consiste nos elementos de um endereço. Este é o tipo de retorno para standardize_address função.

12.1.3. Mesas de padronizador de endereço

Abstract

Esta seção lista os formatos table utilizados pelo address_standardizer para normalização de endereços. Notar que essas tables não precisam ser nomeadas da mesma maneira que são referidas aqui. Você pode ter diferentes lex, gaz, regras tables para cada país por exemplo ou para seu geocoder de costume. Os nomes dessas table passam pelas funções do padronizador de endereços.

A extensão compactada address_standardizer_data_us contém dados para os padronizadores de endereço dos EUA.

  • rules table — A mesa de regras contém um conjunto de regras que mapeia a sequência de tokens de entrada de endereço para a sequência de saída. Uma regra é definida como um conjunto de tokens de entrada seguido por -1 (terminator) seguido por conjunto de tokens de saída seguido por -1 seguido por um número que denota tipo de regra seguido por um ranking de regra.
  • lex table — Uma gaz table é usada para classificar entrada e associado alfanumérico que entram com (a) tokens de entrada ( See the section called “Tokens de entrada”) e (b) representações padronizadas.
  • gaz table — Uma gaz table é usada para padronizar nomes de lugares e associações que entram com (a) tokens de entrada ( See the section called “Tokens de entrada”) e (b) representações padronizadas.

12.1.4. Funções do padronizador de endereços

12.2. Tiger Geocoder

Abstract

Um geocoder com base plpgsql escrito para trabalhar com o TIGER (Topologically Integrated Geographic Encoding and Referencing system ) / Line and Master Address database export liberado pelo US Census Bureau.

Existem quatro componentes do geocoder: as funções do carregador de dados, o normalizador de endereço, o endereço geocoder e o geocoder inverso.

Embora seja desenvolvido especificamente pelos EUA, muitos conceitos e funções são aplicáveis e podem ser adaptados a trabalhar com endereços de outros países e outras road networks.

A script constrói um esquema chamado tiger para abrigar todas as funções tiger relacionadas, dados reutilizáveis como os prefixos de tipos de rua, sufixos, estados, várias tables de controle para administrar carregamento de dados, e tables da base do esqueleto do qual todas as tables tiger carregadas herdaram.

Outro esquema chamado tiger_data, também é criado, ele abriga todos os dados do censo para cada estado que o carregador baixa do site do Censo, e carrega dentro do banco de dados. Nesse modelo, cada conjunto de tables estado é prefixado com o código do estado ex: ma_addr, ma_edges etc com restrições para executar somente os dados daquele estado. Cada uma dessas tables herda das tables addr, faces, edges, etc localizadas no tiger schema.

Todas as funções do geocode só fazem referência às tables base , portanto, não existe nenhuma necessidade que os dados do esquema sejam chamados tiger_data ou eles não possam ser divididos em outros esquemas -- ex: um esquema diferente para cada estado, enquanto todas as tables herdam das tables no esquema tiger.

Para instruções de como ativar a extensão no seu banco de dados e também para carregar dados usando ela, vá para Section 2.4.1, “Tiger Geocoder Enabling your PostGIS database”.

[Note]

Se você estiver usando o tiger geocoder (tiger_2010), você pode atualizar as scripts usando o acompanhamento upgrade_geocoder.bat / .sh scripts em extras/tiger. Uma mudança maior entre tiger_2010 e tiger_2011+ é a que county e state tables não são mais quebradas por estado. Se você tiver dados do tiger_2010 e quiser substituir pelo tiger_2015, vá para Section 2.4.4, “Upgrading your Tiger Geocoder Install and Data”

[Note]

O suporte para dados Tiger 2015 e a inclusão do Padronizador de Endereços como parte do PostGIS, são novos no lançamento do PostGIS 2.2.0.

O lançamento do PostGIS 2.1.0 tem de novo a habilidade de instalar o geocoder tiger com o modelo de extensão PostgreSQL se você estiver usando o PostgreSQL 9.1+. Refira-se a Section 2.4.1, “Tiger Geocoder Enabling your PostGIS database” para mais detalhes.

A função Pagc_Normalize_Address como uma queda na substituição para in-built Normalize_Address. Refira-se a Section 2.3, “Instalando e usando o padronizador de endereço” para compilar e para instruções de instalação.

Design:

O objetivo desse projeto é construir um geocoder completamente funcional que pode processar uma string eventual de endereço dos Estados Unidos e, usando os dados normalizados do censo TIGER, produzir um ponto de geometria e avaliação refletindo a localização do endereço dado e likeliness da localização. Quanto maior o número de avaliação, pior o resultado.

A função reverse_geocode, introduzida em PostGIS 2.0.0 é útil para derivar o endereço da rua e cruzar ruas de uma localização de GPS.

O geocoder deve ser simples de instalar e usar para qualquer pessoa familiar com o PotGIS, e deve ser mais fácil de instalar e usar em todas as plataformas suportadas pelo PostGIS.

Isso deve ser potente o suficiente para funcionar propriamente, apesar de erros de formatação e ortografia.

Isso deve ser extensível o suficiente para ser utilizado com dados de atualização futuras, ou fontes de dados alternativas com mudanças mínimas de coding.

[Note]

O esquema tiger deve ser adicionado ao caminho de procura do banco de dados, para as funções funcionarem perfeitamente.

  • Drop_Indexes_Generate_Script — Gera uma script que derruba todas as chaves não primárias e indexes não únicos no esquema tiger e esquema especificado de usuário. Padroniza esquema para: tiger_data se nenhum esquema é especificado.
  • Drop_Nation_Tables_Generate_Script — Gera uma script que derruba todas as tables no esquema específico que começa com county_all, state_all ou código de estado seguido por condado ou estado.
  • Drop_State_Tables_Generate_Script — Gera uma script que derruba todas as tables no esquema específico que estão prefixados com abreviação do estado. Padroniza o esquema para tiger_data se nenhum esquema estiver especificado.
  • Geocode — Assimila um endereço como uma string (ou outro endereço normalizado) e gera um conjunto de localizações possíveis que inclui um ponto em NAD 83 long lat, um endereço normalizado para cada um e a avaliação. Quanto menor a avaliação, maior a chance de combinar. Os resultados são separados com menor avaliação em primeiro lugar. Pode passar no resultados máximos, até 10, e restrict_region (padrão NULO)
  • Geocode_Intersection — Assimila 2 ruas que se intersectam e um estado, cidade, zip, e gera um conjunto de possíveis localizações no primeiro cruzamento que está na intersecção, também inclui um geomout como o ponto de localização em NAD 83 long lat, um normalized_address (addy) para cada localização, e a avaliação. Quanto menor a avaliação, maior a chance de combinar. Os resultados são separados com menor avaliação em primeiro lugar. Pode passar nos resultados máximos, até 10. Usa dados Tiger (limites, faces, addr), string confusa do PostgreSQL (soundex, evenshtein).
  • Get_Geocode_Setting — Retorna a configuração de valor específico armazenada na table tiger.geocode_settings.
  • Get_Tract — Retorna o trecho ou campo de uma tract table onde a geometria está localizada. Padrão para retornar um nome curto para o trecho.
  • Install_Missing_Indexes — Encontra todas as tables com colunas chave usadas no ingresso geocoder e condições de filtros que estão perdendo os indexes usados nessas colunas e irão adicionar elas.
  • Loader_Generate_Census_Script — Gera uma shell script para a plataforma específica para os estados que irão baixar o trecho do censo de estado Tiger, bg e dados de tables tabblocks, arranjar e carregar dentro do esquema tiger_data. Cada state script retornou como um relato separado.
  • Loader_Generate_Script — Gera uma shell script para a plataforma específica para os estados que irão baixar dados Tiger, arranjar e carregar dentro do esquema tiger_data. Cada state script retorna como um registro separado. A versão mais nova suporta mudanças estruturais do Tiger 2010 e também carrega trecho do censo, block groups, e block tables.
  • Loader_Generate_Nation_Script — Gerar uma script shell para a plataforma especificada que carrega as lookup tables de condado e estado.
  • Missing_Indexes_Generate_Script — Encontra todas as tables com colunas chave usadas no ingresso geocoder que estão perdendo indexes nessas colunas e irão gerar o SQL DDL para definir o index para essas tables.
  • Normalize_Address — Dado um endereço em texto de uma rua, retorna um tipo composto norm_addy que não tem um sufixo, prefixo e tipo padronizado, rua, nome de rua etc. quebrado e, campos separados. Essa função irá funcionar com os dados lookup compactados com o tiger_geocoder (dados do censo tiger não são necessários).
  • Pagc_Normalize_Address — Dado um endereço em texto de uma rua, retorna um tipo composto norm_addy que não tem um sufixo, prefixo e tipo padronizado, rua, nome de rua etc. quebrado e, campos separados. Essa função irá funcionar com os dados lookup compactados com o tiger_geocoder (dados do censo tiger não são necessários). Requer a extensão address_standardizer.
  • Pprint_Addy — Dado um objeto de tipo composto norm_addy, retorna uma representação impressa dele. Normalmente, usado em conjunto com o normalize_address.
  • Reverse_Geocode — Pega um ponto em um sistema de referência espacial conehcido e retorna um relato que contém um banco de dados de, teoricamente, possíveis endereços e um banco de dados de ruas cruzadas. Se include_strnum_range = verdade, inclui o alcance da rua nas ruas cruzadas.
  • Topology_Load_Tiger — Carrega uma região definida de dados tiger em uma Topologia PostGIS e transforma os dados tiger para referência espacial da topologia e rompe para a tolerância precisa da topologia.
  • Set_Geocode_Setting — Estabelece uma configuração que afeta comportamento das funções geocoder.

Existem outras fontes abertas geocoder para o PostGIS, que, ao contrário do tiger geocoder, têm a vantagem do suporte geocoding para muitos países

  • Nominatim usa dados OpenStreetMap gazeteer formatados. Requer o osm2pgsql para carregar os dados, PostgreSQL 8.4+ e PostGIS 1.5+ para funcionar. É compactado como uma interface de serviço da web e parece ter sido criado para ser chamado como webservice. Assim como o geocoder, ele tem dois componentes: o geocoder e o geocoder reverso. Na documentação não fica claro se ele tem uma interface SQL pura conforme o geocoder ou se tem um bom acordo da lógica implementado na interface da web.

  • GIS Graphy também utiliza PostGIS e, como Nominatim, funciona com os dados OpenStreetMap (OSM). Ele possui um carregador para carregar dados OSM e, correspondente ao Nominatim, é capaz de geocoding não só nos EUA. Bem como Nominatim, ele executa como webservice e confia no Java 1.5, Servlet apps, Solr. O GisGraphy é uma multiplataforma e também possui um geocoder reverso juntamente com outros aspectos.