base adresse: add support for geocoding API (#10326)
This commit is contained in:
parent
a3c2d56853
commit
f4c398d9a6
|
@ -29,10 +29,10 @@ format.
|
|||
</p>
|
||||
|
||||
<ul>
|
||||
<li>{% trans 'Geocoding:' %} <a href="{% url 'base_adresse-search' slug=object.slug %}"
|
||||
>{{ site_base_uri }}{% url 'base_adresse-search' slug=object.slug %}</a></li>
|
||||
<li>{% trans 'Reverse geocoding:' %} <a href="{% url 'base_adresse-reverse' slug=object.slug %}"
|
||||
>{{ site_base_uri }}{% url 'base_adresse-reverse' slug=object.slug %}</a></li>
|
||||
<li>{% trans 'Geocoding:' %} <a href="{% url 'base_adresse-search' slug=object.slug %}?q=169 rue du chateau, paris&format=json"
|
||||
>{{ site_base_uri }}{% url 'base_adresse-search' slug=object.slug %}</a>?q=<i>q</i>&format=json</li>
|
||||
<li>{% trans 'Reverse geocoding:' %} <a href="{% url 'base_adresse-reverse' slug=object.slug %}?lat=48.833708&lon=2.323349&format=json"
|
||||
>{{ site_base_uri }}{% url 'base_adresse-reverse' slug=object.slug %}</a>?lat=<i>lat</i>&lon=<i>lon</i>&format=json</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -49,15 +49,43 @@ class BaseAddresseDeleteView(DeleteView):
|
|||
class SearchView(View, SingleObjectMixin):
|
||||
model = BaseAddresse
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
class SearchPathView(View, SingleObjectMixin):
|
||||
model = BaseAddresse
|
||||
def get_query(self, request, *args, **kwargs):
|
||||
if not 'q' in request.GET:
|
||||
return HttpResponseBadRequest('missing parameter')
|
||||
return request.GET['q']
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
raise NotImplementedError()
|
||||
response_format = 'json'
|
||||
if 'format' in request.GET:
|
||||
response_format = request.GET['format']
|
||||
if response_format != 'json':
|
||||
raise NotImplementedError()
|
||||
|
||||
scheme, netloc, path, params, query, fragment = urlparse.urlparse(
|
||||
self.get_object().service_url)
|
||||
path = '/search/'
|
||||
query = urllib.urlencode({'q': self.get_query(request, *args, **kwargs), 'limit': 1})
|
||||
url = urlparse.urlunparse((scheme, netloc, path, params, query, fragment))
|
||||
|
||||
result_response = requests.get(url)
|
||||
result = []
|
||||
|
||||
for feature in result_response.json().get('features'):
|
||||
if not feature['geometry']['type'] == 'Point':
|
||||
continue # skip unknown
|
||||
result.append({
|
||||
'lon': str(feature['geometry']['coordinates'][0]),
|
||||
'lat': str(feature['geometry']['coordinates'][1]),
|
||||
'display_name': feature['properties']['label'],
|
||||
})
|
||||
break
|
||||
|
||||
return utils.response_for_json(request, result)
|
||||
|
||||
|
||||
class SearchPathView(SearchView):
|
||||
def get_query(self, request, *args, **kwargs):
|
||||
return kwargs.get('path')
|
||||
|
||||
|
||||
class ReverseView(View, SingleObjectMixin):
|
||||
|
|
Loading…
Reference in New Issue