[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