2012-09-20 4 views
5

Django에서 위치를 지오 코딩하여 검색 필드를 얻고 거리별로 정렬 된 데이터베이스에서 목록을 추출하려고했습니다. 지금까지 모든 것은 Google이 "ann arbor, MI"와 같은 여러 결과 양식을 반환하는 위치를 검색 할 때를 제외하고 모두 작동합니다. 나는 ValueError를 "이 정확히 하나 개의 장소를 찾지 못했습니다! (2 발견)"얻을 여기 내 views.py는Geopy ValueError 지오 코딩을 할 때 정확히 일치하지 않음

from django.shortcuts import render_to_response 
from models import CampSite 
from geopy import geocoders 
from django.contrib.gis.geos import * 
from django.contrib.gis.measure import D 
from campsites.forms import SearchForm 
from django.http import HttpResponseRedirect 


def results(request): 
    query = request.GET['q'] 
    g = geocoders.Google(resource='maps') 
    location, (lat, lon) = g.geocode(query) 
    pnt = fromstr("POINT(%s %s)" % (lon, lat)) 
    distance_from_point = {'mi':'2000'} 
    results = CampSite.objects.filter(lonlat__distance_lte=(pnt,D(**distance_from_point))).distance(pnt).order_by('distance') 
    return render_to_response('results.html',{'location': location, 'lat': lat, 'lon': lon, 'results':results}) 

내가 온라인으로 발견 일반적인 솔루션은

location, (lat, lon) = g.geocode(query)

을 변경했다입니다



0

location, (lat, lon) = g.geocode(query, exactly_one=False)

그러나이 새로운 ValueError "WKT EWKT 및 HEXEWKB로 인식 할 수없는 문자열 또는 유니 코드 입력이 생성되었습니다."

이것은 내가 튜토리얼 밖에서하고있는 첫 번째 장고 프로젝트입니다. 이방인이되어 주셔서 감사합니다.

답변

5

파이썬에서 통역관은 가장 친한 친구입니다. 당신이 당신의 코드를 시도 할 경우

>>> g.geocode('ann arbor, MI', exactly_one=False) 
[(u'Ann Arbor, MI, USA', (42.2808256, -83.743037799999996)), 
(u'Ann Arbor, MI, USA', (42.307649300000001, -83.8473015))] 

, 당신은 exactly_one와 함께 사용하면 = 거짓, 방법은 튜플이 아닌 하나의 튜플의 목록을 반환 알게 될 것이다 - 그래서 당신의 코드를 따라 리팩토링해야합니다.

위의 내용은 테스트되지 않았지만 루프가 끝나면 결과 목록으로 끝납니다. 그럼 당신은 무엇을 결정해야합니다 :

  • 쇼를 바로 첫 번째 (geocodes[0], results[0])
  • 모든 결과를 표시 목록에서 선택하도록 요청합니다 (템플릿에 zip(geocodes, results) 반복)