【Django基础入门】空间数据库查询

来源:互联网 发布:ubuntu 17.04 iso安装 编辑:程序博客网 时间:2024/05/18 23:25

1 :在views.py中

//阿里云地图之地址转地理坐标    http://ditu.aliyun.com/jsdoc/geocode_api.html  里面有返回的数据格式。

//参考geopy

address = smart_str(city.name + address).replace(' ','')import tracebackimport xml.dom.minidomfrom urllib2 import urlopenfrom sys import version_infofrom apps.address.models import Cityfrom apps.org.models import Vresourcefrom django.utils.encoding import smart_strfrom xml.parsers.expat import ExpatError################################Quick Search###########################################def search(request):    qs = Vresource.objects.all()    q = request.GET.get('q', '')    result = util.ali_getlocation(q)    result = simplejson.loads(result)    distance = request.GET.get('distance', '1')        if q != '':        myfilter = Q()        q = q.split(" ")                for i in q:            myfilter = myfilter|Q(name__icontains=i)|Q(address__icontains=i)|Q(traffic_info__icontains=i)                    if result['level'] != -1:            geom = fromstr("POINT(%s %s)" % (result['lon'],result['lat']))            distance_from_point = {'km':distance}            qs = qs.filter(geometry__distance_lte=(geom, D(**distance_from_point)))                     myfilter = myfilter|Q(geometry__distance_lte=(geom, D(**distance_from_point)))                        qs = qs.filter(myfilter)    return render_to_response('org/search.html', {'results':qs}, context_instance=RequestContext(request))###############################ali_getlocation##########################################def ali_getlocation(address, city_id=1):    try:        city = City.objects.get(id=city_id)        address = smart_str(city.name + address).replace(' ','').replace(' ','')        page = urlopen('http://gc.ditu.aliyun.com/geocoding?a=%s' %address)        page = decode_page(page)        return page    except:        print "Unexpected error:"        tb = traceback.format_exc()        print tb        def get_encoding(page, contents=None):    # TODO: clean up Py3k support    if version_info < (3, 0):        charset = page.headers.getparam("charset") or None    else:        charset = page.headers.get_param("charset") or None    if charset:        return charset    if contents:        try:            return xml.dom.minidom.parseString(contents).encoding        except ExpatError:            passdef decode_page(page):    contents = page.read()    # HTTP 1.1 defines iso-8859-1 as the 'implied' encoding if none is given    encoding = get_encoding(page, contents) or 'iso-8859-1'    # TODO: clean up Py3k support    if version_info < (3, 0):        return unicode(contents, encoding=encoding).encode('utf-8')    else:        return str(contents, encoding=encoding)        ########################################################################################    

2 :输出

{"cityName":"","address":"江苏省,苏州市,虎丘区,","level":5,"alevel":2,"lat":31.28723,"lon":120.55216}

转载请注明出处!

原创粉丝点击