快速背景下,我试图创建一个django应用程序,它可以按照距离某个点的距离对一堆位置进行排序。该应用程序将在EC2服务器上运行,并且我想使用RDS作为数据库。由于PostgreSQL在RDS上不可用,我选择使用MySQL。按照Django在Amazon RDS上的距离对点进行排序
问题:
当我尝试运行来看,我得到的错误:
NotImplementedError: distance stored procedure not available on the mysql backend.
这里是视图:
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))
从我阅读,我认为问题是MySQL不符合OGC标准,使用GDAL获取信息可能会奏效,但我不知道如何实现。
有谁知道我该如何让应用程序使用RDS优先使用MySQL? (我想避免Heroku)
p.s.我正在使用geopy向Google发出请求。
也许在该服务器上设置postgis的postgresql数据库。 MySql在这里是一个非常糟糕的选择。 – RickyA
是的,我宁愿使用RDS来轻松扩展。它看起来像唯一的其他RDS选项是oracle或microsoft SQL server。 – bcoop713
由于您拥有纬度和经度,此方法是否适合您:http://gis.stackexchange.com/questions/593/how-to-calculate-distance-between-two-locations-using-stored-procedure-in -mysql –