31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
import operator
|
|
|
|
|
|
def country_and_languages(language_rtree, latitude, longitude):
|
|
props = language_rtree.point_in_poly(latitude, longitude, return_all=True)
|
|
if not props:
|
|
return None, None, None
|
|
|
|
country = props[0]['qs_iso_cc'].lower()
|
|
languages = []
|
|
language_set = set()
|
|
|
|
have_regional = False
|
|
|
|
for p in props:
|
|
for l in p['languages']:
|
|
lang = l['lang']
|
|
if lang not in language_set:
|
|
language_set.add(lang)
|
|
if p['admin_level'] > 0 and l['default']:
|
|
have_regional = True
|
|
elif have_regional:
|
|
l = {'lang': l['lang'], 'default': 0}
|
|
languages.append(l)
|
|
|
|
# Python's builtin sort is stable, so if there are two defaults, the first remains first
|
|
# Since polygons are returned from the index ordered from smallest admin level to largest,
|
|
# it means the default language of the region overrides the country default
|
|
default_languages = sorted(languages, key=operator.itemgetter('default'), reverse=True)
|
|
return country, default_languages, props
|