match_types for batched HERE metadata
This commit is contained in:
parent
080de34163
commit
e82346e7f6
@ -140,10 +140,15 @@ class HereMapsBulkGeocoder(HereMapsGeocoder, StreetPointBulkGeocoder):
|
|||||||
reader = csv.DictReader(root_zip.open(name), delimiter='|')
|
reader = csv.DictReader(root_zip.open(name), delimiter='|')
|
||||||
for row in reader:
|
for row in reader:
|
||||||
if row['SeqNumber'] == '1': # First per requested data
|
if row['SeqNumber'] == '1': # First per requested data
|
||||||
|
precision = self.PRECISION_BY_MATCH_TYPE[
|
||||||
|
row.get('matchType', 'pointAddress')]
|
||||||
|
match_type = self.MATCH_TYPE_BY_MATCH_LEVEL.get(row['matchLevel'], None)
|
||||||
results.append((row['recId'],
|
results.append((row['recId'],
|
||||||
[row['displayLongitude'], row['displayLatitude']],
|
[row['displayLongitude'], row['displayLatitude']],
|
||||||
{
|
{
|
||||||
'relevance': float(row['relevance'])
|
'relevance': float(row['relevance']),
|
||||||
|
'precision': precision,
|
||||||
|
'match_types': [match_type] if match_type else []
|
||||||
}))
|
}))
|
||||||
|
|
||||||
return results
|
return results
|
||||||
|
@ -9,24 +9,6 @@ from exceptions import *
|
|||||||
from cartodb_services import PRECISION_PRECISE, PRECISION_INTERPOLATED
|
from cartodb_services import PRECISION_PRECISE, PRECISION_INTERPOLATED
|
||||||
from cartodb_services.metrics import Traceable
|
from cartodb_services.metrics import Traceable
|
||||||
|
|
||||||
PRECISION_BY_MATCH_TYPE = {
|
|
||||||
'pointAddress': PRECISION_PRECISE,
|
|
||||||
'interpolated': PRECISION_INTERPOLATED
|
|
||||||
}
|
|
||||||
MATCH_TYPE_BY_MATCH_LEVEL = {
|
|
||||||
'landmark': 'point_of_interest',
|
|
||||||
'country': 'country',
|
|
||||||
'state': 'state',
|
|
||||||
'county': 'county',
|
|
||||||
'city': 'locality',
|
|
||||||
'district': 'district',
|
|
||||||
'street': 'street',
|
|
||||||
'intersection': 'intersection',
|
|
||||||
'houseNumber': 'street_number',
|
|
||||||
'postalCode': 'postal_code'
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class HereMapsGeocoder(Traceable):
|
class HereMapsGeocoder(Traceable):
|
||||||
'A Here Maps Geocoder wrapper for python'
|
'A Here Maps Geocoder wrapper for python'
|
||||||
|
|
||||||
@ -70,6 +52,23 @@ class HereMapsGeocoder(Traceable):
|
|||||||
'strictlanguagemode'
|
'strictlanguagemode'
|
||||||
] + ADDRESS_PARAMS
|
] + ADDRESS_PARAMS
|
||||||
|
|
||||||
|
PRECISION_BY_MATCH_TYPE = {
|
||||||
|
'pointAddress': PRECISION_PRECISE,
|
||||||
|
'interpolated': PRECISION_INTERPOLATED
|
||||||
|
}
|
||||||
|
MATCH_TYPE_BY_MATCH_LEVEL = {
|
||||||
|
'landmark': 'point_of_interest',
|
||||||
|
'country': 'country',
|
||||||
|
'state': 'state',
|
||||||
|
'county': 'county',
|
||||||
|
'city': 'locality',
|
||||||
|
'district': 'district',
|
||||||
|
'street': 'street',
|
||||||
|
'intersection': 'intersection',
|
||||||
|
'houseNumber': 'street_number',
|
||||||
|
'postalCode': 'postal_code'
|
||||||
|
}
|
||||||
|
|
||||||
def __init__(self, app_id, app_code, logger, service_params=None, maxresults=DEFAULT_MAXRESULTS):
|
def __init__(self, app_id, app_code, logger, service_params=None, maxresults=DEFAULT_MAXRESULTS):
|
||||||
service_params = service_params or {}
|
service_params = service_params or {}
|
||||||
self.app_id = app_id
|
self.app_id = app_id
|
||||||
@ -145,9 +144,9 @@ class HereMapsGeocoder(Traceable):
|
|||||||
|
|
||||||
def _extract_metadata_from_result(self, result):
|
def _extract_metadata_from_result(self, result):
|
||||||
# See https://stackoverflow.com/questions/51285622/missing-matchtype-at-here-geocoding-responses
|
# See https://stackoverflow.com/questions/51285622/missing-matchtype-at-here-geocoding-responses
|
||||||
precision = PRECISION_BY_MATCH_TYPE[
|
precision = self.PRECISION_BY_MATCH_TYPE[
|
||||||
result.get('MatchType', 'pointAddress')]
|
result.get('MatchType', 'pointAddress')]
|
||||||
match_type = MATCH_TYPE_BY_MATCH_LEVEL.get(result['MatchLevel'], None)
|
match_type = self.MATCH_TYPE_BY_MATCH_LEVEL.get(result['MatchLevel'], None)
|
||||||
return {
|
return {
|
||||||
'relevance': result['Relevance'],
|
'relevance': result['Relevance'],
|
||||||
'precision': precision,
|
'precision': precision,
|
||||||
|
@ -315,6 +315,11 @@ class TestBulkStreetFunctions(TestStreetFunctionsSetUp):
|
|||||||
assert_equal(n, len(response['rows']))
|
assert_equal(n, len(response['rows']))
|
||||||
for row in response['rows']:
|
for row in response['rows']:
|
||||||
assert_not_equal(row['st_x'], None)
|
assert_not_equal(row['st_x'], None)
|
||||||
|
assert_not_equal(row['metadata'], {})
|
||||||
|
metadata = row['metadata']
|
||||||
|
assert_not_equal(metadata['relevance'], None)
|
||||||
|
assert_not_equal(metadata['precision'], None)
|
||||||
|
assert_not_equal(metadata['match_types'], None)
|
||||||
|
|
||||||
def test_missing_components_on_private_function(self):
|
def test_missing_components_on_private_function(self):
|
||||||
query = "SELECT _cdb_bulk_geocode_street_point(" \
|
query = "SELECT _cdb_bulk_geocode_street_point(" \
|
||||||
|
Loading…
Reference in New Issue
Block a user