Name

Reverse_Geocode — Nimmt einen geometrischen Punkt in einem bekannten Koordinatenreferenzsystem entgegen und gibt einen Datensatz zurück, das ein Feld mit theoretisch möglichen Adressen und ein Feld mit Straßenkreuzungen beinhaltet. Wenn include_strnum_range = true, dann beinhalten die Straßenkreuzungen den "Street Range" (Kennung des Straßenabschnitts).

Synopsis

record Reverse_Geocode(geometry pt, boolean include_strnum_range=false, geometry[] OUT intpt, norm_addy[] OUT addy, varchar[] OUT street);

Beschreibung

Nimmt einen geometrischen Punkt in einem bekannten Koordinatenreferenzsystem entgegen und gibt einen Datensatz zurück, das ein Feld mit theoretisch möglichen Adressen und ein Feld mit Straßenkreuzungen beinhaltet. Wenn include_strnum_range = true, dann beinhalten die Straßenkreuzungen den "Street Range" (Kennung des Straßenabschnitts). Die Standardeinstellung für include_strnum_range ist FALSE. Die Adressen werden nach dem Abstand des Punktes zu den jeweiligen Straßen gereiht, so dass die erste Adresse höchstwahrscheinlich die Richtige ist.

Warum sprechen wir von theoretischen anstatt von tatsächlichen Adressen. Die Daten von TIGER haben keine echten Adressen, sondern nur Straßenabschnitte (Street Ranges). Daher ist die theoretische Adresse eine anhand der Straßenabschnitte interpolierte Adresse. So gibt zum Beispiel die Interpolation einer Adresse "26 Court St." und "26 Court Sq." zurück, obwohl keine Adresse mit der Bezeichnung "26 Court Sq." existiert. Dies beruht darauf, dass ein Punkt an einem Eckpunkt von 2 Straßen liegen kann und die Logik entlang beider Straßen interpoliert. Die Logik nimmt auch an, dass sich die Adressen in einem regelmäßigen Abstand entlang der Straße befinden, was natürlich falsch ist, da ein öffentliches Gebäude einen großen Bereich eines Straßenabschnitts (street range) einnehmen kann und der Rest der Gebäude sich lediglich am Ende befinden.

Anmerkung: diese Funktion benötigt TIGER-Daten. Wenn Sie für diesen Bereich keine Daten geladen haben, dann bekommen Sie einen Datensatz mit lauter NULLs zurück.

Die zurückgelieferten Elemente des Datensatzes lauten wie folgt:

  1. intpt ist ein Feld mit Punkten: Dies sind Punkte auf der Mittellinie der Straße, die dem gegebenen Punkt am nächsten liegt. Es beinhaltet soviele Punkte wie es Adressen gibt.

  2. addy ist ein Feld mit normalisierten Adressen (norm_addy): Diese sind ein Feld mit möglichen Adressen die zu dem gegebenen Punkt passen. Die erste in dem Feld ist die wahrscheinlichste Adresse. Üblicherweise sollte dies nur eine Adresse sein, ausgenommen dem Fall wo ein Punkt an der Ecke von 2 oder 3 Straßen liegt, oder wenn der Punkt irgendwo auf der Straße und nicht auf der Seite liegt.

  3. street ein Feld mit varchar (Textfeld variabler Länge): Dies sind Querstraßen (oder die Straße) (sich kreuzende Straßen oder die Straße auf der der Punkt liegt).

Verbessert: 2.4.1 Wenn der optionale zcta5-Datensatz geladen ist, kann die Funktion reverse_geocode nach state und zip auflösen, auch wenn die spezifischen Statusdaten nicht geladen sind. Siehe Loader_Generate_Nation_Script für Einzelheiten zum Laden von zcta5-Daten.

Verfügbarkeit: 2.0.0

Beispiele

Beispiel für eine Position an der Ecke von zwei Straßen, aber näher bei einer. Näherungsweise die Lage des MIT: 77 Massachusetts Ave, Cambridge, MA 02139. Beachten Sie, dass obwohl wir keine 3 Straßen haben, PostgreSQL nur NULL für die Einträge oberhalb unserer oberen Begrenzung zurückgibt; kann also gefahrlos verwendet werden. Dieses Beispiel verwendet Adressenbereiche

SELECT pprint_addy(r.addy[1]) As st1, pprint_addy(r.addy[2]) As st2, pprint_addy(r.addy[3]) As st3,
            array_to_string(r.street, ',') As cross_streets
        FROM reverse_geocode(ST_GeomFromText('POINT(-71.093902 42.359446)',4269),true) As r;

 result
 ------
      st1                                  | st2 | st3 |               cross_streets
-------------------------------------------+-----+-----+----------------------------------------------
 67 Massachusetts Ave, Cambridge, MA 02139 |     |     | 67 - 127 Massachusetts Ave,32 - 88 Vassar St

Hier haben wir die Adressenbereiche für die Querstraßen nicht inkludiert und eine Position ausgewählt, die sehr sehr nahe an einer Ecke von 2 Straßen liegt, damit diese (Position) von zwei unterschiedlichen Adressen erkannt werden könnte.

SELECT pprint_addy(r.addy[1]) As st1, pprint_addy(r.addy[2]) As st2,
pprint_addy(r.addy[3]) As st3, array_to_string(r.street, ',') As cross_str
FROM reverse_geocode(ST_GeomFromText('POINT(-71.06941 42.34225)',4269)) As r;

result
--------
               st1               |               st2               | st3 | cross_str
---------------------------------+---------------------------------+-----+------------------------
 5 Bradford St, Boston, MA 02118 | 49 Waltham St, Boston, MA 02118 |     | Waltham St

Bei diesem Beispiel wird das Beispiel von Geocode wiederverwendet und wir wollen nur die primäre Adresse und höchstens 2 Straßenkreuzungen.

SELECT actual_addr, lon, lat, pprint_addy((rg).addy[1]) As int_addr1,
    (rg).street[1] As cross1, (rg).street[2] As cross2
FROM (SELECT address As actual_addr, lon, lat,
    reverse_geocode( ST_SetSRID(ST_Point(lon,lat),4326) ) As rg
    FROM addresses_to_geocode WHERE rating 
> -1) As foo;

                     actual_addr                     |    lon    |   lat    |                 int_addr1                 |     cross1      |   cross2
-----------------------------------------------------+-----------+----------+-------------------------------------------+-----------------+------------
 529 Main Street, Boston MA, 02129                   | -71.07181 | 42.38359 | 527 Main St, Boston, MA 02129             | Medford St      |
 77 Massachusetts Avenue, Cambridge, MA 02139        | -71.09428 | 42.35988 | 77 Massachusetts Ave, Cambridge, MA 02139 | Vassar St       |
 26 Capen Street, Medford, MA                        | -71.12377 | 42.41101 | 9 Edison Ave, Medford, MA 02155           | Capen St        | Tesla Ave
 124 Mount Auburn St, Cambridge, Massachusetts 02138 | -71.12304 | 42.37328 | 3 University Rd, Cambridge, MA 02138      | Mount Auburn St |
 950 Main Street, Worcester, MA 01610                | -71.82368 | 42.24956 | 3 Maywood St, Worcester, MA 01603         | Main St         | Maywood Pl