Chapter 12. PostGIS Extrafunktioner

Table of Contents

Detta kapitel dokumenterar funktioner som finns i mappen extras i PostGIS-källans tarballs och källförvar. Dessa är inte alltid paketerade med PostGIS binära utgåvor, men är vanligtvis PL/pgSQL-baserade eller standardskalskript som kan köras som de är.

12.1. Standardisering av adresser

Detta är en förgrening av PAGC-standardiseraren (originalkod för denna del var PAGC PostgreSQL Address Standardizer).

Address Standardizer är en enradig adressparser som tar en inmatad adress och normaliserar den baserat på en uppsättning regler som lagras i en tabell och hjälptabellerna lex och gaz.

Koden är inbyggd i ett enda PostgreSQL-tilläggsbibliotek som heter address_standardizer som kan installeras med CREATE EXTENSION address_standardizer;. Förutom address_standardizer-tillägget byggs en exempeldatautökning som heter address_standardizer_data_us extensions, som innehåller gaz-, lex- och regeltabeller för amerikanska data. Detta tillägg kan installeras via: CREATE EXTENSION address_standardizer_data_us;

Koden för detta tillägg finns i PostGIS extensions/address_standardizer och är för närvarande fristående.

För installationsanvisningar se: Section 2.3, “Installera och använda adresstandardiseraren”.

12.1.1. Hur parsern fungerar

Parsern arbetar från höger till vänster och tittar först på makroelementen för postnummer, stat/provins, stad och tittar sedan på mikroelement för att avgöra om det handlar om ett husnummer, en gata, en korsning eller ett landmärke. För närvarande letar den inte efter landskod eller namn, men det kan införas i framtiden.

Landskod

Antas vara USA eller CA baserat på: postnummer som USA eller Kanada stat/provins som USA eller Kanada annat USA

Postnummer/zipcode

Dessa identifieras med hjälp av Perl-kompatibla reguljära uttryck. Dessa regex finns för närvarande i parseaddress-api.c och är relativt enkla att göra ändringar i vid behov.

Stat/provins

Dessa identifieras med hjälp av Perl-kompatibla reguljära uttryck. Dessa regex finns för närvarande i parseaddress-api.c men kan flyttas till includes i framtiden för enklare underhåll.

12.1.2. Typer av adresstandardiserare

Abstract

Detta avsnitt listar PostgreSQL-datatyperna installerade av Address Standardizer-tillägget. Observera att vi beskriver casting-beteendet för dessa, vilket är mycket viktigt, särskilt när du utformar dina egna funktioner.

  • stdaddr — En sammansatt typ som består av elementen i en adress. Detta är returtypen för funktionen standardize_address.

12.1.3. Tabeller för adresstandardisering

Abstract

I det här avsnittet listas PostgreSQL-tabellformaten som används av address_standardizer för normalisering av adresser. Observera att dessa tabeller inte behöver namnges på samma sätt som det som hänvisas till här. Du kan ha olika lex-, gaz-, regeltabeller för varje land till exempel eller för din anpassade geokodare. Namnen på dessa tabeller skickas in i adresstandardiseringsfunktionerna.

Det paketerade tillägget address_standardizer_data_us innehåller data för standardisering av amerikanska adresser.

  • rules table — Regeltabellen innehåller en uppsättning regler som mappar tokens i adressens indatasekvens till en standardiserad utdatasekvens. En regel definieras som en uppsättning inmatningstokens följt av -1 (terminator) följt av en uppsättning utdatatokens följt av -1 följt av ett nummer som anger typ av regel följt av rangordning av regeln.
  • lex table — En lex-tabell används för att klassificera alfanumerisk inmatning och associera den inmatningen med (a) inmatningstoken (se the section called “Inmatning Tokens”) och (b) standardiserade representationer.
  • gaz table — En gaz-tabell används för att standardisera ortnamn och associera denna input med (a) input-tokens ( Se the section called “Inmatning Tokens”) och (b) standardiserade representationer.

12.1.4. Funktioner för adresstandardisering

  • debug_standardize_address — Returnerar en json-formaterad text som listar parsetokens och standardiseringar
  • parse_address — Tar en adress på 1 rad och delar upp den i delar
  • standardize_address — Returnerar en stdaddr-form av en inmatningsadress med hjälp av lex-, gaz- och regeltabeller.

12.2. Tiger Geocoder

Abstract

En plpgsql-baserad geokodare som är skriven för att fungera med TIGER (Topologically Integrated Geographic Encoding and Referencing system) / Line and Master Address database export som släppts av US Census Bureau.

Geokodaren består av fyra komponenter: dataladdningsfunktionerna, adressnormaliseraren, adressgeokodaren och den omvända geokodaren.

Även om den är utformad specifikt för USA är många av koncepten och funktionerna tillämpliga och kan anpassas för att fungera med andra länders adresser och vägnät.

The script builds a schema called tiger to house all the TIGER-related functions, reusable lookup data such as road type prefixes, suffixes, states, various control tables for managing data load, and skeleton base tables from which all the TIGER-loaded tables inherit.

Another schema called tiger_data is also created which houses all the census data for each state that the loader downloads from the Census site and loads into the database. In the current model, each set of state tables is prefixed with the state code e.g ma_addr, ma_edges etc with constraints to enforce only that state data. Each of these tables inherits from the tables addr, faces, edges, etc located in the tiger schema.

All the geocode functions only reference the base tables, so there is no requirement that the data schema be called tiger_data or that data can't be further partitioned into other schemas -- e.g. a different schema for each state, as long as all the tables inherit from the tables in the tiger schema.

Anvisningar om hur du aktiverar tillägget i din databas och laddar data med hjälp av det finns på Section 2.4.1, “Tiger Geocoder Aktivering av din PostGIS-databas”.

[Note]

If you are using the TIGER Geocoder (tiger_2010), you can upgrade the scripts using the accompanying upgrade_geocoder.bat / .sh scripts in extras/tiger. One major change between tiger_2010 and tiger_2011+ is that the county and state tables are no longer broken out by state. If you have data from tiger_2010 and want to replace with tiger_2015, refer to Section 2.4.4, “Uppgradering av Tiger Geocoder-installation och -data”

[Note]

You can install the TIGER Geocoder with the PostgreSQL extension model. Refer to Section 2.4.1, “Tiger Geocoder Aktivering av din PostGIS-databas” for details.

Pagc_Normalize_Address fungerar som en drop-in-ersättning för inbyggda Normalize_Address. Se Section 2.3, “Installera och använda adresstandardiseraren” för kompilerings- och installationsinstruktioner.

Design:

Målet med detta projekt är att bygga en fullt fungerande geokodare som kan bearbeta en godtycklig adressträng i USA och med hjälp av normaliserade TIGER-folkräkningsdata producera en punktgeometri och ett betyg som återspeglar platsen för den givna adressen och sannolikheten för platsen. Ju högre betygssiffra desto sämre resultat.

The reverse_geocode function is useful for deriving the street address and cross streets of a GPS location.

Geokodaren ska vara enkel att installera och använda för alla som är bekanta med PostGIS och ska vara lätt att installera och använda på alla plattformar som stöds av PostGIS.

Den ska vara tillräckligt robust för att fungera korrekt trots formaterings- och stavfel.

Den bör vara tillräckligt utbyggbar för att kunna användas med framtida datauppdateringar eller alternativa datakällor med ett minimum av kodändringar.

[Note]

Tigerschemat måste läggas till i databasens söksökväg för att funktionerna ska fungera korrekt.

  • Drop_Indexes_Generate_Script — Genererar ett skript som tar bort alla index som inte är primärnycklar och unika index på tigerschemat och det användarspecifika schemat. Standardvärdet för schema är tiger_data om inget schema har angetts.
  • Drop_Nation_Tables_Generate_Script — Skapar ett skript som tar bort alla tabeller i det angivna schemat som börjar med county_all, state_all eller state code följt av county eller state.
  • Drop_State_Tables_Generate_Script — Genererar ett skript som släpper alla tabeller i det angivna schemat som har statsförkortningen som prefix. Standardvärdet för schema är tiger_data om inget schema har angetts.
  • Geocode — Tar in en adress som en sträng (eller annan normaliserad adress) och matar ut en uppsättning möjliga platser som inkluderar en punktgeometri i NAD 83 long lat, en normaliserad adress för varje och betyget. Ju lägre betyg desto mer sannolik är matchningen. Resultaten sorteras efter lägsta betyg först. Kan valfritt skicka in maximala resultat, standardvärde 10, och restrict_region (standardvärde NULL)
  • Geocode_Intersection — Tar in två gator som korsar varandra och en stat, stad, postnummer och matar ut en uppsättning möjliga platser på den första tvärgatan som är i korsningen, inkluderar också en geomout som punktplats i NAD 83 lång lat, en normalized_address (addy) för varje plats och betyg. Ju lägre betyg desto mer sannolik är matchningen. Resultaten sorteras efter lägsta betyg först. Kan valfritt skicka in maximala resultat, standard är 10. Använder Tiger-data (edges, faces, addr), PostgreSQL fuzzy strängmatchning (soundex, levenshtein).
  • Get_Geocode_Setting — Returnerar värdet för en specifik inställning som lagrats i tabellen tiger.geocode_settings.
  • Get_Tract — Returnerar folkbokföringstrakt eller fält från trakttabellen där geometrin är belägen. Standard är att returnera traktens kortnamn.
  • Install_Missing_Indexes — Hittar alla tabeller med nyckelkolumner som används i geocoder-joins och filtervillkor som saknar använda index på dessa kolumner och lägger till dem.
  • Loader_Generate_Census_Script — Genererar ett skalskript för den angivna plattformen för de angivna staterna som hämtar datatabellerna Tiger census state tract, bg och tabblocks, iscensätter och laddar in i tiger_data-schema. Varje delstatsskript returneras som en separat post.
  • Loader_Generate_Script — Genererar ett shell-skript för den angivna plattformen för de angivna staterna som hämtar Tiger-data, iscensätter och laddar in i tiger_data-schema. Varje delstatsskript returneras som en separat post. Den senaste versionen stöder strukturella ändringar i Tiger 2010 och laddar även tabeller för census tract, block groups och blocks.
  • Loader_Generate_Nation_Script — Genererar ett shell-skript för den angivna plattformen som läser in uppslagstabellerna för county och state.
  • Missing_Indexes_Generate_Script — Hittar alla tabeller med nyckelkolumner som används i geocoder-joins och som saknar index för dessa kolumner och matar ut SQL DDL för att definiera index för dessa tabeller.
  • Normalize_Address — Givet en textuell gatuadress, returnerar en sammansatt norm_addy-typ som har vägsuffix, prefix och typ standardiserad, gata, gatunamn etc. uppdelat i separata fält. Den här funktionen fungerar bara med de uppslagsdata som medföljer tiger_geocoder (inget behov av tiger census data).
  • Pagc_Normalize_Address — Givet en textuell gatuadress, returnerar en sammansatt norm_addy-typ som har vägsuffix, prefix och typ standardiserad, gata, gatunamn etc. uppdelat i separata fält. Denna funktion fungerar bara med uppslagsdata som paketerats med tiger_geocoder (inget behov av tiger census data). Kräver tillägget address_standardizer.
  • Pprint_Addy — Ger ett norm_addy composite type-objekt och returnerar en vacker utskriftsrepresentation av det. Används vanligtvis tillsammans med normalize_address.
  • Reverse_Geocode — Tar en geometripunkt i ett känt spatialt ref sys och returnerar en post som innehåller en array av teoretiskt möjliga adresser och en array av tvärgator. Om include_strnum_range = true inkluderas gatuintervallet i tvärgatorna.
  • Topology_Load_Tiger — Läser in en definierad region med tigerdata i en PostGIS-topologi och omvandlar tigerdata till topologins spatiala referens och snappar till topologins precisionstolerans.
  • Set_Geocode_Setting — Ställer in en inställning som påverkar beteendet hos geokodarens funktioner.

There are a couple other open source geocoders for PostGIS, that unlike the TIGER Geocoder have the advantage of multi-country geocoding support

  • Nominatim uses OpenStreetMap gazeteer formatted data. It requires osm2pgsql for loading the data together with PostgreSQL and PostGIS. It is packaged as a webservice interface and seems designed to be called as a webservice. Just like the TIGER Geocoder, it has both a geocoder and a reverse geocoder component. From the documentation, it is unclear if it has a pure SQL interface like the TIGER Geocoder, or if a good deal of the logic is implemented in the web interface.

  • GIS Graphy can utilize PostGIS and like Nominatim uses OpenStreetMap (OSM) data along with some other sources. It comes with a loader to load OSM data and similar to Nominatim is capable of geocoding not just US. Much like Nominatim, it runs as a webservice and relies on Java 1.5, Servlet apps, Solr. GisGraphy is cross-platform and also has a reverse geocoder among some other neat features.