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.

Skriptet bygger ett schema som kallas tiger för att rymma alla tigerrelaterade funktioner, återanvändbara uppslagsdata som prefix, suffix och stater för vägtyper, olika kontrolltabeller för att hantera dataladdningen och skelettbaserade tabeller som alla tigerladdade tabeller ärver från.

Ett annat schema som kallas tiger_data skapas också som innehåller alla folkräkningsdata för varje stat som laddaren hämtar från Census-webbplatsen och laddar in i databasen. I den nuvarande modellen har varje uppsättning delstatstabeller delstatskoden som prefix, t.ex. ma_addr, ma_edges etc. med begränsningar som endast gäller för dessa delstatsdata. Var och en av dessa tabeller ärver från tabellerna addr, faces, edges, etc som finns i tiger-schemat.

Alla geokodningsfunktioner refererar bara till bastabellerna, så det finns inget krav på att dataschemat ska heta tiger_data eller att data inte kan delas upp i andra scheman - t.ex. ett annat schema för varje stat, så länge alla tabeller ärver från tabellerna i tiger-schemat.

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]

Om du använder tiger geocoder (tiger_2010) kan du uppgradera skripten med hjälp av de medföljande upgrade_geocoder.bat / .sh-skript i extras/tiger. En stor förändring mellan tiger_2010 och tiger_2011+ är att tabellerna för län och delstater inte längre är uppdelade per delstat. Om du har data från tiger_2010 och vill ersätta dem med tiger_2015, se Section 2.4.4, “Uppgradering av Tiger Geocoder-installation och -data”

[Note]

Nytt i PostGIS 2.2.0 är stöd för Tiger 2015-data och att Address Standardizer ingår som en del av PostGIS.

Nytt i PostGIS 2.1.0-utgåvan är möjligheten att installera tigergeokoder med PostgreSQL-tilläggsmodell om du kör PostgreSQL 9.1+. Hänvisa till Section 2.4.1, “Tiger Geocoder Aktivering av din PostGIS-databas” för detaljer.

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.

Funktionen reverse_geocode, som introducerades i PostGIS 2.0.0, är användbar för att härleda gatuadress och tvärgator till en GPS-position.

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.

Det finns ett par andra geokodare med öppen källkod för PostGIS, som till skillnad från Tiger Geocoder har fördelen med stöd för geokodning i flera länder

  • Nominatim använder OpenStreetMap gazeteer-formaterade data. Det kräver osm2pgsql för att läsa in data, PostgreSQL 8.4+ och PostGIS 1.5+ för att fungera. Det är förpackat som ett webbtjänstgränssnitt och verkar utformat för att anropas som en webbtjänst. Precis som tigergekodern har den både en geokodare och en omvänd geokodarkomponent. Från dokumentationen är det oklart om det har ett rent SQL-gränssnitt som tigergekodern, eller om en hel del av logiken implementeras i webbgränssnittet.

  • GIS Graphy använder också PostGIS och som Nominatim arbetar med OpenStreetMap (OSM) data. Den levereras med en laddare för att ladda OSM-data och liknar Nominatim kan geokoda inte bara USA. Precis som Nominatim körs den som en webbtjänst och förlitar sig på Java 1.5, Servlet-appar, Solr. GisGraphy är plattformsoberoende och har också en omvänd geokodare bland några andra snygga funktioner.