Name

Reverse_Geocode — Prend un point géométrique dans un système spatial connu et renvoie un enregistrement contenant un tableau d'adresses théoriquement possibles et un tableau de rues transversales. Si include_strnum_range = true, la plage de rues est incluse dans les rues transversales.

Synopsis

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

Description

Prend un point géométrique dans un réf spatial connu et renvoie un enregistrement contenant un tableau d'adresses théoriquement possibles et un tableau de rues transversales. Si include_strnum_range = true, la plage de rues est incluse dans les rues transversales. include_strnum_range prend par défaut la valeur false s'il n'est pas fourni. Les adresses sont triées en fonction de la route dont le point est le plus proche, de sorte que la première adresse est très probablement la bonne.

Pourquoi parle-t-on d'adresses théoriques plutôt que d'adresses réelles ? Les données Tiger ne contiennent pas d'adresses réelles, mais seulement des tranches de rues. L'adresse théorique est donc une adresse interpolée sur la base de l'étendue des rues. Par exemple, l'interpolation d'une de mes adresses donne 26 Court St. et 26 Court Sq. alors que le 26 Court Sq. n'existe pas. Cela s'explique par le fait qu'un point peut se trouver à l'angle de deux rues et que la logique interpole donc le long des deux rues. La logique suppose également que les adresses sont également espacées le long d'une rue, ce qui est bien sûr faux puisqu'un bâtiment municipal peut occuper une bonne partie de la rue et que le reste des bâtiments est regroupé à l'extrémité.

Note : Hmm cette fonction repose sur les données Tiger. Si vous n'avez pas chargé de données couvrant la région de ce point, vous obtiendrez un enregistrement rempli de NULLS.

Les éléments renvoyés de l'enregistrement sont les suivants :

  1. intpt est un tableau de points : Il s'agit des points de la ligne centrale de la rue les plus proches du point d'entrée. Il y a autant de points que d'adresses.

  2. addy est un tableau de norm_addy (adresses normalisées) : Il s'agit d'un tableau d'adresses possibles correspondant au point d'entrée. La première adresse du tableau est la plus probable. En général, il ne devrait y en avoir qu'une seule, sauf dans le cas où un point se trouve à l'angle de deux ou trois rues, ou si le point se trouve quelque part sur la route et non sur le côté.

  3. street un tableau de varchar : Il s'agit des rues transversales (ou de la rue) (rues qui croisent ou sont la rue sur laquelle le point est projeté).

Amélioration : 2.4.1 si le jeu de données optionnel zcta5 est chargé, la fonction reverse_geocode peut résoudre l'état et le code postal même si les données spécifiques à l'état ne sont pas chargées. Voir Loader_Generate_Nation_Script pour plus de détails sur le chargement des données zcta5.

Disponibilité : 2.0.0

Exemples

Exemple d'un point situé à l'angle de deux rues, mais le plus proche d'une seule. C'est l'emplacement approximatif du MIT : 77 Massachusetts Ave, Cambridge, MA 02139 Notez que bien que nous n'ayons pas 3 rues, PostgreSQL retournera simplement null pour les entrées supérieures à notre limite supérieure, ce qui permet de l'utiliser en toute sécurité. Cela inclut les plages de rues

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

Ici, nous avons choisi de ne pas inclure les plages d'adresses pour les rues transversales et nous avons choisi un emplacement vraiment très proche d'un coin de deux rues, qui pourrait donc être connu sous deux adresses différentes.

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

Pour celui-ci, nous réutilisons notre exemple géocodé de Geocode et nous ne voulons que l'adresse principale et au plus deux rues transversales.

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

Voir aussi

Pprint_Addy, Geocode, Loader_Generate_Nation_Script