38 lines
1.3 KiB
PL/PgSQL
38 lines
1.3 KiB
PL/PgSQL
-- Complain if script is sourced in psql, rather than via CREATE EXTENSION
|
|
\echo Use "CREATE EXTENSION cdb_geocoder_server" to load this file. \quit
|
|
-- Check if a given host is up by performing a ping -c 1 call.
|
|
CREATE OR REPLACE FUNCTION cdb_geocoder_server._check_host(hostname TEXT)
|
|
RETURNS BOOLEAN
|
|
AS $$
|
|
import os
|
|
|
|
response = os.system("ping -c 1 " + hostname)
|
|
|
|
return False if response else True
|
|
$$ LANGUAGE plpythonu VOLATILE;
|
|
|
|
-- Returns current pwd
|
|
CREATE OR REPLACE FUNCTION cdb_geocoder_server._pwd()
|
|
RETURNS TEXT
|
|
AS $$
|
|
import os
|
|
|
|
return os.getcwd()
|
|
$$ LANGUAGE plpythonu VOLATILE;
|
|
-- Check if a given host is up by performing a ping -c 1 call.
|
|
CREATE OR REPLACE FUNCTION cdb_geocoder_server.geocode_street(searchtext TEXT, state TEXT DEFAULT NULL, country TEXT DEFAULT NULL)
|
|
RETURNS Geometry
|
|
AS $$
|
|
from heremaps import heremapsgeocoder
|
|
|
|
geocoder = heremapsgeocoder.Geocoder(app_id, app_code)
|
|
|
|
results = geocoder.geocode_address(searchtext=searchtext, state=state, country=country)
|
|
coordinates = geocoder.extract_lng_lat_from_result(results[0])
|
|
|
|
plan = plpy.prepare("SELECT ST_SetSRID(ST_MakePoint($1, $2), 4326); ", ["double precision", "double precision"])
|
|
point = plpy.execute(plan, [coordinates[0], coordinates[1]], 1)[0]
|
|
|
|
return point['st_setsrid']
|
|
$$ LANGUAGE plpythonu VOLATILE;
|