0001-base-adresse-add-support-for-geocoding-API-10326.patch
| passerelle/apps/base_adresse/templates/base_adresse/base_adresse_detail.html | ||
|---|---|---|
|
</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>
|
||
| passerelle/apps/base_adresse/views.py | ||
|---|---|---|
|
class SearchView(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 = []
|
||
|
class SearchPathView(View, SingleObjectMixin):
|
||
|
model = BaseAddresse
|
||
|
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
|
||
|
def get(self, request, *args, **kwargs):
|
||
|
raise NotImplementedError()
|
||
|
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):
|
||