Пример #1
0
 def get(self):
     self.response.headers["Content-Type"] = "text/xml"
     currlocationlat = 41.99765
     currlocationlong = -87.6745
     tag = self.request.get("tag", None)
     if self.request.get("LatLngBounds") == "":
         radius = self.request.get("radius", 3)
     else:
         lat_lo, lng_lo, lat_hi, lng_hi = self.request.get("LatLngBounds").split(",")
         distance = float(geoutil.calcDistance(float(lat_lo), float(lng_lo), float(lat_hi), float(lng_hi)))
         radius = distance / 2
     # 		self.response.out.write('radius: ' + radius + '\r')
     if self.request.get("location") == "":
         latitude = self.request.get("latitude", currlocationlat)
         longitude = self.request.get("longitude", currlocationlong)
     else:
         latitude, longitude = self.request.get("location").split(",")
     # 		self.response.out.write('location: ' + str(latitude) + ',' + str(longitude) +  '\r')
     dist = searchplaces(tag, latitude, longitude, radius, self.request.get("owner", None))
     self.response.out.write("<places>")
     self.response.out.write("<version>1.1.3</version>")
     self.response.out.write("<version-date>2010-08-17</version-date>")
     for place in sorted(dist, key=operator.attrgetter("distance")):
         ret = xmlEncode(place)
         ##			self.response.out.write(place.name)
         ##			self.response.out.write(place.distance)
         ##			self.response.out.write(place.recordid)
         # 			self.response.out.write('<hr>')
         self.response.out.write(ret)
     self.response.out.write("</places>")
Пример #2
0
def searchplaces(tag, latitude, longitude, radius=50, owner=None):
    if owner is not None:
        ownerclause = "owner = :owner"
    else:
        ownerclause = ""
    if tag is not None:
        tagclause = "tag = :search"
    else:
        tagclause = ""
    baseSelect = "SELECT * FROM Place"
    print >>sys.stderr, baseSelect
    if owner is not None:
        if tag is not None:
            placeclause = baseSelect + " WHERE " + ownerclause + " AND " + tagclause
            places = db.GqlQuery(placeclause, search=tag, owner=owner)
        else:
            places = db.GqlQuery(baseSelect + " WHERE " + ownerclause, owner=owner)
    else:
        if tag is not None:
            places = db.GqlQuery(baseSelect + " WHERE " + tagclause, search=tag)
        else:
            places = db.GqlQuery(baseSelect)
    dist = []
    for place in places:
        if (place.latitude == "") or (place.longitude == ""):
            distance = 1000
        else:
            distance = float(geoutil.calcDistance(latitude, longitude, float(place.latitude), float(place.longitude)))
        if is_number(radius):
            radius = float(radius)
        else:
            radius = 50
        if distance < radius:
            dist.append(place)
            dist[-1].distance = distance
    return dist