Name

Reverse_Geocode — Tar en geometripunkt i ett känt spatialt ref sys och returnerar en post som innehåller en array av teoretiskt möjliga adresser och en array av tvärgator. Om include_strnum_range = true inkluderas gatuintervallet i tvärgatorna.

Synopsis

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

Beskrivning

Tar en geometripunkt i en känd spatial ref och returnerar en post som innehåller en array av teoretiskt möjliga adresser och en array av tvärgator. Om include_strnum_range = true, inkluderas gatuområdet i tvärgatorna. include_strnum_range är som standard false om det inte anges. Adresserna sorteras efter den väg som en punkt ligger närmast, så den första adressen är troligen den rätta.

Varför säger vi teoretiska istället för faktiska adresser. Tiger-data har inte riktiga adresser, utan bara gatuområden. Som sådan är den teoretiska adressen en interpolerad adress baserad på gatuområdena. Som till exempel att interpoleringen av en av mina adresser ger 26 Court St. och 26 Court Sq., även om det inte finns någon sådan plats som 26 Court Sq. Detta beror på att en punkt kan vara i ett hörn av två gator och därmed interpolerar logiken längs båda gatorna. Logiken förutsätter också att adresserna är jämnt fördelade längs en gata, vilket naturligtvis är fel eftersom en kommunal byggnad kan ta upp en stor del av gatan och resten av byggnaderna är samlade i slutet.

Obs: Hmm denna funktion är beroende av Tiger-data. Om du inte har laddat data som täcker regionen för denna punkt, hmm, kommer du att få en post fylld med NULLS.

Återlämnade delar av posten är följande:

  1. intpt är en matris med punkter: Dessa är de mittlinjepunkter på gatan som ligger närmast inmatningspunkten. Det finns lika många punkter som det finns adresser.

  2. addy är en array av norm_addy (normaliserade adresser): Detta är en matris med möjliga adresser som passar inmatningspunkten. Den första i matrisen är mest sannolik. I allmänhet bör det bara finnas en, utom i de fall då en punkt ligger i hörnet av 2 eller 3 gator, eller om punkten ligger någonstans på vägen och inte vid sidan av.

  3. street en array av varchar: Detta är tvärgator (eller gatan) (gator som korsar eller är den gata som punkten beräknas vara på).

Förbättrad: 2.4.1 Om den valfria zcta5-datauppsättningen laddas kan reverse_geocode-funktionen lösa upp till stat och zip även om de specifika statsdata inte laddas. Se Loader_Generate_Nation_Script för mer information om laddning av zcta5-data.

Tillgänglighet: 2.0.0

Exempel

Exempel på en punkt i hörnet av två gator, men närmast en. Detta är den ungefärliga platsen för MIT: 77 Massachusetts Ave, Cambridge, MA 02139 Observera att även om vi inte har 3 gator, kommer PostgreSQL bara att returnera null för poster över vår övre gräns så säkert att använda. Detta inkluderar gatuintervall

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

Här valde vi att inte inkludera adressområdena för tvärgatorna och valde en plats som ligger riktigt nära ett hörn av två gator och som därmed kan ha två olika adresser.

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

I det här fallet återanvänder vi vårt geokodade exempel från Geocode och vi vill bara ha den primära adressen och högst 2 tvärgator.

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