2013-02-04 5 views
1

빠른 배경, 한 지점에서 거리별로 여러 위치를 정렬하는 장고 앱을 만들려고합니다. 응용 프로그램은 EC2 서버에서 실행되며 데이터베이스에 RDS를 사용하고 싶습니다. RDS에서는 PostgreSQL을 사용할 수 없으므로 MySQL을 사용하기로했습니다.Django와 Amazon RDS의 거리 별 정렬 포인트

문제 : 내가보기를 실행하려고하면

, 나는 오류 얻을 : 내가했습니다 무엇부터

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 django.template import RequestContext 

def results(request): 
    query = request.GET['q'] 
    g = geocoders.Google(resource='maps') 
    results = [] 
    geocodes = g.geocode(query, exactly_one=False) 
    for geocode in geocodes: 
     location, (lat, lon) = geocode 
     pnt = fromstr("POINT(%s %s)" % (lon, lat)) 
     distance_from_point = {'mi':'2000'} 
     results.append(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[0]}, 
      context_instance=RequestContext(request)) 

: 여기

NotImplementedError: distance stored procedure not available on the mysql backend.

은이다 읽었을 때, 문제는 MySQL이 OGC와 호환되지 않고 정보를 얻기 위해 GDAL을 사용할 수 있다는 것입니다. 그러나 구현 방법을 모릅니다.

아무도 내가 MySQL과 RDS를 사용하여 작동하도록 응용 프로그램을 얻을 수있는 방법을 알고 있습니까? (나는 Heroku를 피하고 싶다)

p.s. geopy를 사용하여 Google에 요청합니다.

+0

해당 서버에서 postgresql db를 설정했을 수 있습니다. MySql은 정말 좋지 않은 선택입니다. – RickyA

+0

예, 스케일링을 쉽게하기 위해 RDS를 사용하는 것을 선호합니다. 유일한 RDS 옵션은 oracle 또는 microsoft SQL 서버뿐입니다. – bcoop713

+0

위도와 경도가 있으므로이 접근법이 효과가 있습니까? http://gis.stackexchange.com/questions/593/how-to-calculate-distance-between-two-locations-using-stored-procedure-in -mysql –

답변

0

이 질문에 대해 생각해 보니 재미 있었지만 MySQL 버전 5.6을 사용할 수 없었기 때문에 거리 쿼리에 대한 지원이 없었습니다. 이 버전은 귀하의 질문 후 수 일간 이용 가능하게되었습니다 according to Wikipedia.

는 그 이후로 몇 가지 사항이 변경되었습니다 :

  1. MySQL을 가지고 있으며, 공간 데이터 유형 및 쿼리를 지원합니다. OGC 표준을 여전히 준수하지는 않습니다.
  2. 아마존 RDS now supports PostgreSQL.

공간 데이터베이스에 대한 개인적인 선호는 PostGIS가있는 PostgreSQL이며 필자는 그 사용을 권장합니다.

마지막으로, 당신의 CampSite 모델 'PNT'라는 이름 유형 Point의 필드가 있고 (이름 : ref_pnt)를 참조 점에서 거리가 주문한 캠프 사이트를 반환하는 쿼리를 만들고 싶어한다고 가정 , 당신은 그것을 FO 수 있습니다 다음 쿼리를 사용하십시오 :

CampSites.objects.annotate(dist=Distance('pnt', ref_pnt)).orderby('dist') 
관련 문제