跳转到主要内容

postgis_tiger_geocoder

PostGIS tiger geocoder and reverse geocoder

postgis : PostGIS tiger geocoder and reverse geocoder

Overview

ID Extension Package Version Category License Language
1504 postgis_tiger_geocoder postgis 3.6.4 GIS GPL-2.0 C
Attribute Has Binary Has Library Need Load Has DDL Relocatable Trusted
--s-dt- No Yes No Yes no yes

Packages

Type Repo Version PG Major Compatibility Package Pattern Dependencies
EXT PGDG 3.6.4 18 17 16 15 14 postgis postgis, fuzzystrmatch
RPM PGDG 3.6.3 18 17 16 15 14 postgis36_$v -
DEB PGDG 3.6.4 18 17 16 15 14 postgresql-$v-postgis-3 -
Linux / PG PG18 PG17 PG16 PG15 PG14
el8.x86_64 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3
el8.aarch64 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3
el9.x86_64 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3
el9.aarch64 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3
el10.x86_64 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3
el10.aarch64 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3 PGDG 3.6.3
d12.x86_64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4
d12.aarch64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4
d13.x86_64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4
d13.aarch64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4
u22.x86_64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4
u22.aarch64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4
u24.x86_64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4
u24.aarch64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4
u26.x86_64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4
u26.aarch64 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4 PGDG 3.6.4

Source

Install

Make sure PGDG repo available:

pig repo add pgdg -u    # add pgdg repo and update cache

Install this extension with pig:

pig install postgis;		# install via package name, for the active PG version
pig install postgis_tiger_geocoder;		# install by extension name, for the current active PG version

pig install postgis_tiger_geocoder -v 18;   # install for PG 18
pig install postgis_tiger_geocoder -v 17;   # install for PG 17
pig install postgis_tiger_geocoder -v 16;   # install for PG 16
pig install postgis_tiger_geocoder -v 15;   # install for PG 15
pig install postgis_tiger_geocoder -v 14;   # install for PG 14

Create this extension with:

CREATE EXTENSION postgis_tiger_geocoder CASCADE; -- requires postgis, fuzzystrmatch

Usage

PostGIS TIGER Geocoder: US Census TIGER/Line geocoding for PostGIS

The PostGIS TIGER Geocoder provides geocoding and reverse geocoding capabilities for US addresses using US Census TIGER/Line data. It can parse an address string into a normalized form, find the geographic coordinates, and reverse-geocode coordinates back to an address.

Setup

CREATE EXTENSION postgis_tiger_geocoder CASCADE;

This creates the tiger schema with the geocoder tables and functions.


Loading TIGER Data

Before geocoding, TIGER/Line data must be loaded for the states you need. The extension provides helper functions to generate the loading scripts:

-- Generate a script to download and load data for a state
-- (e.g., Massachusetts = 'MA')
SELECT loader_generate_script(ARRAY['MA'], 'sh');

This generates a shell script that uses shp2pgsql to load TIGER shapefiles. Run the generated script to populate the tiger_data schema with address ranges, edges, faces, and other data.

After loading:

-- Install missing indexes for performance
SELECT install_missing_indexes();

-- Update statistics
ANALYZE tiger.addr;
ANALYZE tiger.edges;
ANALYZE tiger.faces;

Geocoding

Convert a US address string to geographic coordinates:

-- Basic geocoding
SELECT g.rating, ST_X(g.geomout) AS lon, ST_Y(g.geomout) AS lat,
       pprint_addy(g.addy) AS address
FROM geocode('1600 Pennsylvania Ave NW, Washington, DC 20500') AS g;

The rating indicates match quality (lower is better, 0 = exact match).

-- Geocode with a limit on results
SELECT g.rating, ST_AsText(g.geomout), pprint_addy(g.addy)
FROM geocode('100 Main St, Boston, MA', 3) AS g;

-- Batch geocode from a table
SELECT a.id, g.rating, g.geomout, pprint_addy(g.addy)
FROM addresses a, LATERAL geocode(a.address_string, 1) AS g;

Reverse Geocoding

Convert coordinates back to a street address:

SELECT pprint_addy(r.addy[1]) AS address
FROM reverse_geocode(ST_SetSRID(ST_MakePoint(-77.0365, 38.8977), 4326)) AS r;

Address Normalization

Parse and normalize address strings without geocoding:

SELECT *
FROM normalize_address('1600 Pennsylvania Avenue NW, Washington, DC 20500');

Returns components: address (number), predirAbbrev, streetName, streetTypeAbbrev, postdirAbbrev, internal, location (city), stateAbbrev, zip, parsed.

-- Pretty-print a normalized address
SELECT pprint_addy(normalize_address('100 main street boston ma 02101'));

Configuration

The tiger.geocode_settings table controls geocoder behavior:

-- View current settings
SELECT * FROM tiger.geocode_settings;

-- Adjust settings (e.g., increase debug level)
UPDATE tiger.geocode_settings SET val = 'true' WHERE name = 'debug_geocode_address';