[SCM] PostGIS branch master updated. 3.6.0rc2-381-gd2a87d630
git at osgeo.org
git at osgeo.org
Mon Mar 9 04:23:45 PDT 2026
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "PostGIS".
The branch, master has been updated
via d2a87d6305a558906618f7df087ffdcf8a60d988 (commit)
from 20fcd89ae646c2557cf892251242bc16a76a927c (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit d2a87d6305a558906618f7df087ffdcf8a60d988
Author: Darafei Praliaskouski <me at komzpa.net>
Date: Mon Mar 9 14:34:50 2026 +0400
Fix #1461 geocode_intersection spacing fallback
Add a narrow normalized-fullname comparison so geocode_intersection matches TIGER highway names when spacing around hyphens differs, without changing suffix-form route parsing or type-less second-street scoring.
Closes #1461
diff --git a/NEWS b/NEWS
index d9bf639d8..c6d77cc77 100644
--- a/NEWS
+++ b/NEWS
@@ -41,6 +41,9 @@ This version requires GEOS 3.10 or higher
- #4828, geometry_columns handles NOT VALID SRID checks without errors (Darafei Praliaskouski)
- #6048, [raster] ST_Clip no longer crashes when clipping sparse band
selections (Darafei Praliaskouski)
+ - #1461, [tiger geocoder] geocode_intersection now tolerates irregular
+ spacing in highway names such as `I- 635` vs `I-635`
+ (OpenAI)
- #1599, [address_standardizer] parse_address() and normalize_address() now
canonicalize trailing country tokens to ISO 3166-1 alpha-2 codes and
expose country on normalized addresses
diff --git a/extensions/postgis_tiger_geocoder/Makefile.in b/extensions/postgis_tiger_geocoder/Makefile.in
index d2b5029d4..c103b3069 100644
--- a/extensions/postgis_tiger_geocoder/Makefile.in
+++ b/extensions/postgis_tiger_geocoder/Makefile.in
@@ -29,7 +29,7 @@ DATA_built = \
sql/$(EXTENSION)--unpackaged--$(EXTVERSION).sql \
$(NULL)
-REGRESS = test-normalize_address test-upgrade
+REGRESS = test-normalize_address test-geocode_intersection_spacing test-upgrade
REGRESS_OPTS = --load-extension=fuzzystrmatch --load-extension=postgis
EXTSCHEMA_SUPPORTED = yes
@@ -48,7 +48,7 @@ ifeq (@ADDRESS_STANDARDIZER@,address_standardizer)
endif
REGRESS_OPTS += --load-extension=$(EXTENSION)
-all: sql/$(EXTENSION)_pre.sql sql/$(EXTENSION)--$(EXTVERSION).sql sql/$(EXTENSION)--unpackaged--$(EXTVERSION).sql sql/$(EXTENSION)--ANY--$(EXTVERSION).sql sql/test-normalize_address.sql sql/test-pagc_normalize_address.sql expected/test-normalize_address.out expected/test-pagc_normalize_address.out sql/test-upgrade.sql expected/test-upgrade.out
+all: sql/$(EXTENSION)_pre.sql sql/$(EXTENSION)--$(EXTVERSION).sql sql/$(EXTENSION)--unpackaged--$(EXTVERSION).sql sql/$(EXTENSION)--ANY--$(EXTVERSION).sql sql/test-normalize_address.sql sql/test-geocode_intersection_spacing.sql sql/test-pagc_normalize_address.sql expected/test-normalize_address.out expected/test-geocode_intersection_spacing.out expected/test-pagc_normalize_address.out sql/test-upgrade.sql expected/test-upgrade.out
.PHONY: expected
@@ -71,6 +71,9 @@ endif
expected/test-normalize_address.out: sql_bits/test_tuples_only_unaligned.sql.in ../../extras/tiger_geocoder/regress/normalize_address_regress | expected
cat $^ > $@
+expected/test-geocode_intersection_spacing.out: sql_bits/test_tuples_only_unaligned.sql.in sql_bits/test-geocode_intersection_spacing.out.in | expected
+ cat $^ > $@
+
expected/test-pagc_normalize_address.out: sql_bits/test_tuples_only_unaligned.sql.in ../../extras/tiger_geocoder/regress/pagc_normalize_address_regress | expected
cat $^ > $@
@@ -78,6 +81,9 @@ expected/test-pagc_normalize_address.out: sql_bits/test_tuples_only_unaligned.sq
sql/test-normalize_address.sql: sql_bits/test_tuples_only_unaligned.sql.in ../../extras/tiger_geocoder/regress/normalize_address_regress.sql | sql
cat $^ > $@
+sql/test-geocode_intersection_spacing.sql: sql_bits/test_tuples_only_unaligned.sql.in sql_bits/test-geocode_intersection_spacing.sql.in | sql
+ cat $^ > $@
+
sql/test-upgrade.sql: | sql
echo 'ALTER EXTENSION ${EXTENSION} UPDATE TO "ANY"; ALTER EXTENSION ${EXTENSION} UPDATE TO "$(EXTVERSION)"' > $@
diff --git a/extensions/postgis_tiger_geocoder/sql_bits/test-geocode_intersection_spacing.out.in b/extensions/postgis_tiger_geocoder/sql_bits/test-geocode_intersection_spacing.out.in
new file mode 100644
index 000000000..805fad2d3
--- /dev/null
+++ b/extensions/postgis_tiger_geocoder/sql_bits/test-geocode_intersection_spacing.out.in
@@ -0,0 +1,4 @@
+#1461c|353|Rte
+#1461a|100 N Belt Line Rd, Coppell, TX 75019|POINT(-96.99 32.986)|5
+#1461b|100 N Belt Line Rd, Coppell, TX 75019|POINT(-96.99 32.986)|5
+#1461d|50 Weld Ave, Coppell, TX 75019|POINT(-96.98 32.98)|4
diff --git a/extensions/postgis_tiger_geocoder/sql_bits/test-geocode_intersection_spacing.sql.in b/extensions/postgis_tiger_geocoder/sql_bits/test-geocode_intersection_spacing.sql.in
new file mode 100644
index 000000000..304f928ee
--- /dev/null
+++ b/extensions/postgis_tiger_geocoder/sql_bits/test-geocode_intersection_spacing.sql.in
@@ -0,0 +1,63 @@
+\o /dev/null
+BEGIN;
+
+INSERT INTO tiger.zip_lookup_base(zip, state, county, city, statefp)
+VALUES ('75019', 'Texas', 'Dallas', 'Coppell', '48');
+
+INSERT INTO tiger.place(statefp, placefp, plcidfp, name)
+VALUES ('48', '00001', '4800001', 'Coppell');
+
+INSERT INTO tiger.faces(tfid, statefp, placefp)
+VALUES (2001, '48', '00001');
+
+INSERT INTO tiger.edges(statefp, countyfp, tlid, tfidl, tfidr, fullname, tnidf, tnidt, the_geom)
+VALUES
+ ('48', '113', 1001, 2001, 2001, 'N Belt Line Rd', 10, 11,
+ ST_GeomFromText('MULTILINESTRING((-96.990000 32.986000,-96.990000 32.987000))', 4269)),
+ ('48', '113', 1002, 2001, 2001, 'I- 635', 10, 12,
+ ST_GeomFromText('MULTILINESTRING((-96.991000 32.986000,-96.989000 32.986000))', 4269)),
+ ('48', '113', 1003, 2001, 2001, 'Weld Ave', 20, 21,
+ ST_GeomFromText('MULTILINESTRING((-96.980000 32.980000,-96.980000 32.982000))', 4269)),
+ ('48', '113', 1004, 2001, 2001, 'School Terrace', 20, 22,
+ ST_GeomFromText('MULTILINESTRING((-96.981000 32.980000,-96.980000 32.980000))', 4269)),
+ ('48', '113', 1005, 2001, 2001, 'Schools', 21, 23,
+ ST_GeomFromText('MULTILINESTRING((-96.981000 32.982000,-96.980000 32.982000))', 4269));
+
+INSERT INTO tiger.featnames(statefp, tlid, fullname, name, predirabrv, suftypabrv, pretypabrv)
+VALUES
+ ('48', 1001, 'N Belt Line Rd', 'Belt Line', 'N', 'Rd', NULL),
+ ('48', 1002, 'I- 635', '635', NULL, NULL, 'I-'),
+ ('48', 1003, 'Weld Ave', 'Weld', NULL, 'Ave', NULL),
+ ('48', 1004, 'School Terrace', 'School', NULL, 'Ter', NULL),
+ ('48', 1005, 'Schools', 'Schools', NULL, NULL, NULL);
+
+INSERT INTO tiger.addr(statefp, tlid, fromhn, tohn, side, zip)
+VALUES
+ ('48', 1001, '100', '198', 'L', '75019'),
+ ('48', 1002, '0', '0', 'L', '75019'),
+ ('48', 1003, '50', '98', 'L', '75019'),
+ ('48', 1004, '0', '0', 'L', '75019'),
+ ('48', 1005, '0', '0', 'L', '75019');
+
+\o
+SELECT '#1461c' AS ticket, streetname, streettypeabbrev
+FROM normalize_address('0 353 Rte, Coppell, TX');
+
+SELECT '#1461a' AS ticket, pprint_addy(addy), ST_AsText(ST_SnapToGrid(geomout, 0.000001)), rating
+FROM geocode_intersection('N. Belt Line', 'I- 635', 'TX', 'Coppell')
+ORDER BY rating
+LIMIT 1;
+
+SELECT '#1461b' AS ticket, pprint_addy(addy), ST_AsText(ST_SnapToGrid(geomout, 0.000001)), rating
+FROM geocode_intersection('N. Belt Line', 'I-635', 'TX', 'Coppell')
+ORDER BY rating
+LIMIT 1;
+
+SELECT '#1461d' AS ticket, pprint_addy(addy), ST_AsText(ST_SnapToGrid(geomout, 0.000001)), rating
+FROM geocode_intersection('Weld', 'School', 'TX', 'Coppell')
+ORDER BY rating
+LIMIT 1;
+
+\o /dev/null
+ROLLBACK;
+\o
diff --git a/extras/tiger_geocoder/geocode/geocode_intersection.sql b/extras/tiger_geocoder/geocode/geocode_intersection.sql
index 3029e23c1..599a1e108 100644
--- a/extras/tiger_geocoder/geocode/geocode_intersection.sql
+++ b/extras/tiger_geocoder/geocode/geocode_intersection.sql
@@ -23,6 +23,12 @@ $$
DECLARE
var_na_road norm_addy;
var_na_inter1 norm_addy;
+ var_road_name text;
+ var_road_fullname text;
+ var_inter_name text;
+ var_inter_fullname text;
+ var_road_input_normalized text;
+ var_inter_input_normalized text;
var_sql text := '';
var_zip varchar(5)[];
in_statefp varchar(2) ;
@@ -36,6 +42,12 @@ BEGIN
var_na_road := normalize_address('0 ' || roadway1 || ', ' || COALESCE(in_city,'') || ', ' || in_state || ' ' || in_zip);
var_na_inter1 := normalize_address('0 ' || roadway2 || ', ' || COALESCE(in_city,'') || ', ' || in_state || ' ' || in_zip);
END IF;
+ var_road_name := trim(lower(COALESCE(var_na_road.streetName, '')));
+ var_road_fullname := trim(lower(var_na_road.streetName || ' ' || COALESCE(var_na_road.streetTypeAbbrev,'')));
+ var_inter_name := trim(lower(COALESCE(var_na_inter1.streetName, '')));
+ var_inter_fullname := trim(lower(var_na_inter1.streetName || ' ' || COALESCE(var_na_inter1.streetTypeAbbrev,'')));
+ var_road_input_normalized := normalize_street_name(trim(lower(roadway1)));
+ var_inter_input_normalized := normalize_street_name(trim(lower(roadway2)));
in_statefp := statefp FROM state_lookup As s WHERE s.abbrev = upper(in_state);
IF COALESCE(in_zip,'') > '' THEN -- limit search to 2 plus or minus the input zip
var_zip := zip_range(in_zip, -2,2);
@@ -54,42 +66,61 @@ BEGIN
END IF;
var_sql := '
WITH
- a1 AS (SELECT f.*, addr.fromhn, addr.tohn, addr.side , addr.zip
- FROM (SELECT * FROM tiger.featnames
- WHERE statefp = $1 AND ( lower(name) = $2 ' ||
- CASE WHEN length(var_na_road.streetName) > 5 THEN ' or lower(fullname) LIKE $6 || ''%'' ' ELSE '' END || ')'
- || ') AS f LEFT JOIN (SELECT * FROM tiger.addr As addr WHERE addr.statefp = $1) As addr ON (addr.tlid = f.tlid AND addr.statefp = f.statefp)
- WHERE $5::text[] IS NULL OR addr.zip = ANY($5::text[]) OR addr.zip IS NULL
- ORDER BY CASE WHEN lower(f.fullname) = $6 THEN 0 ELSE 1 END
- LIMIT 50000
- ),
+ a1 AS (SELECT f.*, addr.fromhn, addr.tohn, addr.side , addr.zip
+ FROM (SELECT * FROM tiger.featnames
+ WHERE statefp = $1 AND (
+ lower(name) = $2 ' ||
+ CASE WHEN length(var_na_road.streetName) > 5 THEN ' or lower(fullname) LIKE $6 || ''%'' ' ELSE '' END ||
+ ' or normalize_street_name(fullname) = $10)'
+ || ') AS f LEFT JOIN (SELECT * FROM tiger.addr As addr WHERE addr.statefp = $1) As addr ON (addr.tlid = f.tlid AND addr.statefp = f.statefp)
+ WHERE $5::text[] IS NULL OR addr.zip = ANY($5::text[]) OR addr.zip IS NULL
+ ORDER BY CASE
+ WHEN lower(f.fullname) = $6 OR normalize_street_name(f.fullname) = $10 THEN 0
+ ELSE 1 END
+ LIMIT 50000
+ ),
a2 AS (SELECT f.*, addr.fromhn, addr.tohn, addr.side , addr.zip
- FROM (SELECT * FROM tiger.featnames
- WHERE statefp = $1 AND ( lower(name) = $4 ' ||
- CASE WHEN length(var_na_inter1.streetName) > 5 THEN ' or lower(fullname) LIKE $7 || ''%'' ' ELSE '' END || ')'
- || ' ) AS f LEFT JOIN (SELECT * FROM tiger.addr As addr WHERE addr.statefp = $1) AS addr ON (addr.tlid = f.tlid AND addr.statefp = f.statefp)
- WHERE $5::text[] IS NULL OR addr.zip = ANY($5::text[]) or addr.zip IS NULL
- ORDER BY CASE WHEN lower(f.fullname) = $7 THEN 0 ELSE 1 END
- LIMIT 50000
- ),
- e1 AS (SELECT e.the_geom, e.tnidf, e.tnidt, a.*,
- CASE WHEN a.side = ''L'' THEN e.tfidl ELSE e.tfidr END AS tfid
- FROM a1 As a
- INNER JOIN tiger.edges AS e ON (e.statefp = a.statefp AND a.tlid = e.tlid)
- WHERE e.statefp = $1
- ORDER BY CASE WHEN lower(a.name) = $4 THEN 0 ELSE 1 END + CASE WHEN lower(e.fullname) = $7 THEN 0 ELSE 1 END
- LIMIT 5000) ,
- e2 AS (SELECT e.the_geom, e.tnidf, e.tnidt, a.*,
- CASE WHEN a.side = ''L'' THEN e.tfidl ELSE e.tfidr END AS tfid
- FROM (SELECT * FROM tiger.edges WHERE statefp = $1) AS e INNER JOIN a2 AS a ON (e.statefp = a.statefp AND a.tlid = e.tlid)
- INNER JOIN e1 ON (e.statefp = e1.statefp
- AND ARRAY[e.tnidf, e.tnidt] && ARRAY[e1.tnidf, e1.tnidt] )
+ FROM (SELECT * FROM tiger.featnames
+ WHERE statefp = $1 AND (
+ lower(name) = $4 ' ||
+ CASE WHEN length(var_na_inter1.streetName) > 5 THEN ' or lower(fullname) LIKE $7 || ''%'' ' ELSE '' END ||
+ ' or normalize_street_name(fullname) = $11)'
+ || ' ) AS f LEFT JOIN (SELECT * FROM tiger.addr As addr WHERE addr.statefp = $1) AS addr ON (addr.tlid = f.tlid AND addr.statefp = f.statefp)
+ WHERE $5::text[] IS NULL OR addr.zip = ANY($5::text[]) or addr.zip IS NULL
+ ORDER BY CASE
+ WHEN lower(f.fullname) = $7 OR normalize_street_name(f.fullname) = $11 THEN 0
+ ELSE 1 END
+ LIMIT 50000
+ ),
+ e1 AS (SELECT e.the_geom, e.tnidf, e.tnidt, a.*,
+ CASE WHEN a.side = ''L'' THEN e.tfidl ELSE e.tfidr END AS tfid
+ FROM a1 As a
+ INNER JOIN tiger.edges AS e ON (e.statefp = a.statefp AND a.tlid = e.tlid)
+ WHERE e.statefp = $1
+ ORDER BY CASE
+ WHEN lower(a.name) = $4 THEN 0 ELSE 1 END
+ + CASE
+ WHEN lower(e.fullname) = $7 OR normalize_street_name(e.fullname) = $11 THEN 0
+ ELSE 1 END
+ LIMIT 5000) ,
+ e2 AS (SELECT e.the_geom, e.tnidf, e.tnidt, a.*,
+ CASE WHEN a.side = ''L'' THEN e.tfidl ELSE e.tfidr END AS tfid
+ FROM (SELECT * FROM tiger.edges WHERE statefp = $1) AS e INNER JOIN a2 AS a ON (e.statefp = a.statefp AND a.tlid = e.tlid)
+ INNER JOIN e1 ON (e.statefp = e1.statefp
+ AND ARRAY[e.tnidf, e.tnidt] && ARRAY[e1.tnidf, e1.tnidt] )
- WHERE (lower(e.fullname) = $7 or lower(a.name) LIKE $4 || ''%'')
- ORDER BY CASE WHEN lower(a.name) = $4 THEN 0 ELSE 1 END + CASE WHEN lower(e.fullname) = $7 THEN 0 ELSE 1 END
- LIMIT 5000
- ),
- segs AS (SELECT DISTINCT ON(e1.tlid, e1.side)
+ WHERE (
+ lower(e.fullname) = $7
+ OR normalize_street_name(e.fullname) = $11
+ OR lower(a.name) LIKE $4 || ''%'')
+ ORDER BY CASE
+ WHEN lower(a.name) = $4 THEN 0 ELSE 1 END
+ + CASE
+ WHEN lower(e.fullname) = $7 OR normalize_street_name(e.fullname) = $11 THEN 0
+ ELSE 1 END
+ LIMIT 5000
+ ),
+ segs AS (SELECT DISTINCT ON(e1.tlid, e1.side)
CASE WHEN e1.tnidf = e2.tnidf OR e1.tnidf = e2.tnidt THEN
e1.fromhn
ELSE
@@ -101,9 +132,15 @@ BEGIN
ELSE ST_EndPoint(ST_GeometryN(ST_Multi(e1.the_geom),1)) END AS geom ,
CASE WHEN lower(p.name) = $3 THEN 0 ELSE 1 END
+ tiger.levenshtein_ignore_case(p.name, $3)
- + tiger.levenshtein_ignore_case(e1.name || COALESCE('' '' || e1.sufqualabr, ''''),$2) +
- CASE WHEN e1.fullname = $6 THEN 0 ELSE tiger.levenshtein_ignore_case(e1.fullname, $6) END +
- + tiger.levenshtein_ignore_case(e2.name || COALESCE('' '' || e2.sufqualabr, ''''),$4)
+ + tiger.levenshtein_ignore_case(e1.name || COALESCE('' '' || e1.sufqualabr, ''''),$2)
+ + CASE
+ WHEN lower(e1.fullname) = $6 OR normalize_street_name(e1.fullname) = $10 THEN 0
+ ELSE tiger.levenshtein_ignore_case(e1.fullname, $6)
+ END
+ + CASE
+ WHEN normalize_street_name(e2.fullname) = $11 THEN 0
+ ELSE tiger.levenshtein_ignore_case(e2.name || COALESCE('' '' || e2.sufqualabr, ''''),$4)
+ END
AS a_rating
FROM e1
INNER JOIN e2 ON (
@@ -115,23 +152,16 @@ BEGIN
FROM segs ORDER BY a_rating LIMIT $9';
IF var_debug THEN
- RAISE NOTICE 'sql: %', replace(replace(replace(
- replace(replace(replace(
- replace(
- replace(
- replace(var_sql, '$1', quote_nullable(in_statefp)),
- '$2', quote_nullable(lower(var_na_road.streetName) ) ),
- '$3', quote_nullable(lower(in_city)) ),
- '$4', quote_nullable(lower(var_na_inter1.streetName) ) ),
- '$5', quote_nullable(var_zip) ),
- '$6', quote_nullable(lower(var_na_road.streetName || ' ' || COALESCE(var_na_road.streetTypeAbbrev,'') )) ) ,
- '$7', quote_nullable(trim(lower(var_na_inter1.streetName || ' ' || COALESCE(var_na_inter1.streetTypeAbbrev,'') )) ) ) ,
- '$8', quote_nullable(in_state ) ), '$9', num_results::text );
+ RAISE NOTICE 'sql: %', var_sql;
+ RAISE NOTICE 'args: %, %, %, %, %, %, %, %, %, %, %',
+ in_statefp, var_road_name, lower(in_city), var_inter_name, var_zip,
+ var_road_fullname, var_inter_fullname, in_state, num_results,
+ var_road_input_normalized, var_inter_input_normalized;
END IF;
- FOR results IN EXECUTE var_sql USING in_statefp, trim(lower(var_na_road.streetName)), lower(in_city), lower(var_na_inter1.streetName), var_zip,
- trim(lower(var_na_road.streetName || ' ' || COALESCE(var_na_road.streetTypeAbbrev,''))),
- trim(lower(var_na_inter1.streetName || ' ' || COALESCE(var_na_inter1.streetTypeAbbrev,''))), in_state, num_results LOOP
+ FOR results IN EXECUTE var_sql USING in_statefp, var_road_name, lower(in_city), var_inter_name, var_zip,
+ var_road_fullname, var_inter_fullname, in_state, num_results,
+ var_road_input_normalized, var_inter_input_normalized LOOP
ADDY.preDirAbbrev := results.fedirp;
ADDY.streetName := results.fename;
ADDY.streetTypeAbbrev := results.fetype;
diff --git a/extras/tiger_geocoder/geocode/other_helper_functions.sql b/extras/tiger_geocoder/geocode/other_helper_functions.sql
index 41513bc1e..4af024ca5 100644
--- a/extras/tiger_geocoder/geocode/other_helper_functions.sql
+++ b/extras/tiger_geocoder/geocode/other_helper_functions.sql
@@ -30,6 +30,24 @@ $$ SELECT abs(to_number( CASE WHEN trim(substring($1,1,5)) ~ '^[0-9]+$' THEN $1
LANGUAGE sql IMMUTABLE STRICT
COST 200 PARALLEL SAFE;
+-- Canonicalize separator-only formatting differences in road names without
+-- collapsing all punctuation, so highway names like I-635 and I- 635
+-- compare equally while still distinguishing unrelated names.
+CREATE OR REPLACE FUNCTION normalize_street_name(input_street varchar)
+ RETURNS varchar AS
+$$
+ SELECT trim(
+ regexp_replace(
+ regexp_replace(lower($1), E'\\s*-\\s*', '-', 'g'),
+ E'\\s+',
+ ' ',
+ 'g'
+ )
+ )::varchar;
+$$
+LANGUAGE sql IMMUTABLE STRICT
+COST 5 PARALLEL SAFE;
+
-- function return true or false if 2 numeric streets are equal such as 15th St, 23rd st
-- it compares just the numeric part of the street for equality
-- PURPOSE: handle bad formats such as 23th St so 23th St = 23rd St
-----------------------------------------------------------------------
Summary of changes:
NEWS | 3 +
extensions/postgis_tiger_geocoder/Makefile.in | 10 +-
.../test-geocode_intersection_spacing.out.in | 4 +
.../test-geocode_intersection_spacing.sql.in | 63 ++++++++++
.../geocode/geocode_intersection.sql | 134 +++++++++++++--------
.../geocode/other_helper_functions.sql | 18 +++
6 files changed, 178 insertions(+), 54 deletions(-)
create mode 100644 extensions/postgis_tiger_geocoder/sql_bits/test-geocode_intersection_spacing.out.in
create mode 100644 extensions/postgis_tiger_geocoder/sql_bits/test-geocode_intersection_spacing.sql.in
hooks/post-receive
--
PostGIS
More information about the postgis-tickets
mailing list