66 lines
3.2 KiB
PL/PgSQL
66 lines
3.2 KiB
PL/PgSQL
CREATE OR REPLACE FUNCTION cdb_geocoder_server._cdb_here_geocode_street_point(username TEXT, orgname TEXT, searchtext TEXT, city TEXT DEFAULT NULL, state_province TEXT DEFAULT NULL, country TEXT DEFAULT NULL)
|
|
RETURNS Geometry AS $$
|
|
from heremaps import heremapsgeocoder
|
|
from cartodb_geocoder import quota_service
|
|
|
|
redis_conn = GD["redis_connection_{0}".format(username)]['redis_metrics_connection']
|
|
user_geocoder_config = GD["user_geocoder_config_{0}".format(username)]
|
|
|
|
# -- Check the quota
|
|
quota_service = quota_service.QuotaService(user_geocoder_config, redis_conn)
|
|
if not quota_service.check_user_quota():
|
|
plpy.error('You have reach the limit of your quota')
|
|
|
|
try:
|
|
geocoder = heremapsgeocoder.Geocoder(user_geocoder_config.heremaps_app_id, user_geocoder_config.heremaps_app_code)
|
|
coordinates = geocoder.geocode_address(searchtext=searchtext, city=city, state=state_province, country=country)
|
|
if coordinates:
|
|
quota_service.increment_success_geocoder_use()
|
|
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']
|
|
else:
|
|
quota_service.increment_empty_geocoder_use()
|
|
return None
|
|
except BaseException as e:
|
|
import sys, traceback
|
|
type_, value_, traceback_ = sys.exc_info()
|
|
quota_service.increment_failed_geocoder_use()
|
|
error_msg = 'There was an error trying to geocode using here maps geocoder: {0}'.format(e)
|
|
plpy.notice(traceback.format_tb(traceback_))
|
|
plpy.error(error_msg)
|
|
finally:
|
|
quota_service.increment_total_geocoder_use()
|
|
$$ LANGUAGE plpythonu;
|
|
|
|
CREATE OR REPLACE FUNCTION cdb_geocoder_server._cdb_google_geocode_street_point(username TEXT, orgname TEXT, searchtext TEXT, city TEXT DEFAULT NULL, state_province TEXT DEFAULT NULL, country TEXT DEFAULT NULL)
|
|
RETURNS Geometry AS $$
|
|
from google_geocoder import googlemapsgeocoder
|
|
from cartodb_geocoder import quota_service
|
|
|
|
redis_conn = GD["redis_connection_{0}".format(username)]['redis_metrics_connection']
|
|
user_geocoder_config = GD["user_geocoder_config_{0}".format(username)]
|
|
quota_service = quota_service.QuotaService(user_geocoder_config, redis_conn)
|
|
|
|
try:
|
|
geocoder = googlemapsgeocoder.Geocoder(user_geocoder_config.google_client_id, user_geocoder_config.google_api_key)
|
|
coordinates = geocoder.geocode_address(searchtext=searchtext, city=city, state=state_province, country=country)
|
|
if coordinates:
|
|
quota_service.increment_success_geocoder_use()
|
|
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']
|
|
else:
|
|
quota_service.increment_empty_geocoder_use()
|
|
return None
|
|
except BaseException as e:
|
|
import sys, traceback
|
|
type_, value_, traceback_ = sys.exc_info()
|
|
quota_service.increment_failed_geocoder_use()
|
|
error_msg = 'There was an error trying to geocode using google maps geocoder: {0}'.format(e)
|
|
plpy.notice(traceback.format_tb(traceback_))
|
|
plpy.error(error_msg)
|
|
finally:
|
|
quota_service.increment_total_geocoder_use()
|
|
$$ LANGUAGE plpythonu;
|