[postgis-users] Geocoding using www_fdw and Google APIs
Paul Ramsey
pramsey at opengeo.org
Mon Oct 8 22:29:10 PDT 2012
Wow, fdw_www, that's even crazier than my idea...
http://blog.opengeo.org/2012/04/20/http-for-postgresql/
However, my post includes a working example of geocoding off of
Google. It's still a crazy scheme, running a blocking request (curl
HTTP call) inside your database transaction.
P.
On Mon, Oct 8, 2012 at 10:15 PM, Jeremy <jeremy001 at gmail.com> wrote:
> Hi all,
>
> I've got a question on how to define a server & foreign table to pull
> back latitude and longitude from a street address. I've been working
> from examples like twitter or google searches - all of which return a
> fairly flat data structure. The structure of the geocode return is
> quite different, however. For instance, it contains a field 'geometry'
> which in turn contains a field 'location' which finally contains
> values for 'lat' and 'long'.
>
> The only information I'm interested in is the geometry:location:lat,
> geometry:location:long and the geometry:locaiton_type
>
> I'm not sure how to structure the fields in the foreign table
> www_fdw_google_geocode so that this will work. Any advice would be
> greatly appreciated. Please see end of message for code, command and
> sample xml response.
>
> Thanks in advance,
>
> Jeremy.
>
>
> -Code I have so far----------------------------------------------
>
> DROP EXTENSION IF EXISTS www_fdw CASCADE;
> CREATE EXTENSION www_fdw;
>
> CREATE SERVER www_fdw_server_google_geocode FOREIGN DATA WRAPPER www_fdw
> OPTIONS (uri 'http://maps.google.com/maps/api/geocode/xml');
> CREATE USER MAPPING FOR current_user SERVER www_fdw_server_google_geocode;
>
> CREATE FOREIGN TABLE www_fdw_google_geocode (
> /* parameters used in request */
> sensor text,
> address text,
>
> /* fields in response */
> /****************************************************/
> /* NOT SURE HOW TO STRUCTURE THIS PART OF THE TABLE */
> /****************************************************/
> /* The response data is not flat. Please see sample data at end */
>
> ) SERVER www_fdw_server_google_geocode;
>
> -/Code I have so far----------------------------------------------
>
> -Command I intend to use------------------------------------------
> postgres=# SELECT latitude, longitude, location_type from
> www_fdw_google_geocode where sensor='false' AND address='2 Some
> street, somewhere, somewhereville' LIMIT 1;
> -/Command I intend to use-----------------------------------------
>
>
> -Sample response from geocoding web service----------------------
>
> <?xml version="1.0" encoding="UTF-8"?>
> <GeocodeResponse>
> <status>OK</status>
> <result>
> <type>street_address</type>
> <formatted_address>2 Southbank Blvd, Southbank VIC 3006,
> Australia</formatted_address>
> <address_component>
> <long_name>2</long_name>
> <short_name>2</short_name>
> <type>street_number</type>
> </address_component>
> <address_component>
> <long_name>Southbank Blvd</long_name>
> <short_name>Southbank Blvd</short_name>
> <type>route</type>
> </address_component>
> <address_component>
> <long_name>Southbank</long_name>
> <short_name>Southbank</short_name>
> <type>locality</type>
> <type>political</type>
> </address_component>
> <address_component>
> <long_name>Victoria</long_name>
> <short_name>VIC</short_name>
> <type>administrative_area_level_1</type>
> <type>political</type>
> </address_component>
> <address_component>
> <long_name>Australia</long_name>
> <short_name>AU</short_name>
> <type>country</type>
> <type>political</type>
> </address_component>
> <address_component>
> <long_name>3006</long_name>
> <short_name>3006</short_name>
> <type>postal_code</type>
> </address_component>
> <geometry>
> <location>
> <lat>-37.8224465</lat>
> <lng>144.9630868</lng>
> </location>
> <location_type>ROOFTOP</location_type>
> <viewport>
> <southwest>
> <lat>-37.8237955</lat>
> <lng>144.9617378</lng>
> </southwest>
> <northeast>
> <lat>-37.8210975</lat>
> <lng>144.9644358</lng>
> </northeast>
> </viewport>
> </geometry>
> <partial_match>true</partial_match>
> </result>
> [possibly more results after the first - we only want the first one]
> </GeocodeResponse>
>
> -/Sample response from geocoding web service---------------------
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
More information about the postgis-users
mailing list