geoSpatial & Location based search in google appengine python

3 views
Skip to first unread message

Saim Abdullah Ch via StackOverflow

unread,
Nov 11, 2016, 10:05:05 AM11/11/16
to google-appengin...@googlegroups.com

I want to achieve something like the map drag search on airbnb (https://www.airbnb.com/s/Paris--France?source=ds&page=1&s_tag=PNoY_mlz&allow_override%5B%5D=)

I am saving the data like this in datastore

 user.lat = float(lat)
 user.lon = float(lon)
 user.geoLocation = ndb.GeoPt(float(lat),float(lon))

and whenever I drag & drop map or zoom in or zoom out I get following parameters in my controller

    def get(self):
    """
    This is an ajax function. It gets the place name, north_east, and south_west
    coordinates. Then it fetch the results matching the search criteria and
    create a result list. After that it returns the result in json format.
    :return: result
    """
    self.response.headers['Content-type'] = 'application/json'
    results = []
    north_east_latitude = float(self.request.get('nelat'))
    north_east_longitude = float(self.request.get('nelon'))
    south_west_latitude = float(self.request.get('swlat'))
    south_west_longitude = float(self.request.get('swlon'))
    place = self.request.get('place')
    points = Points.query(ndb.AND(Points.lat<north_east_latitude,Points.lat>south_west_latitude))
    for row in points:
        record = str(row)
        if re.search(place.lower(), record.lower()):
            if  row.lon > north_east_longitude and row.lon < south_west_longitude:
                listingdic = {'name': row.name, 'desc': row.description, 'contact': row.contact, 'lat': row.lat, 'lon': row.lon}
                results.append(listingdic)
    self.write(json.dumps({'listings':results}))

My model class is given below

class Points(ndb.Model): name = ndb.StringProperty(required=True) description = ndb.StringProperty(required=True) contact = ndb.StringProperty(required=True) lat = ndb.FloatProperty(required=True) lon = ndb.FloatProperty(required=True) geoLocation = ndb.GeoPtProperty()

I want to improve the query.

Thanks in advance.



Please DO NOT REPLY directly to this email but go to StackOverflow:
http://stackoverflow.com/questions/40550590/geospatial-location-based-search-in-google-appengine-python

Saim Abdullah Ch via StackOverflow

unread,
Nov 11, 2016, 10:50:06 AM11/11/16
to google-appengin...@googlegroups.com

I want to achieve something like the map drag search on airbnb (https://www.airbnb.com/s/Paris--France?source=ds&page=1&s_tag=PNoY_mlz&allow_override%5B%5D=)

I am saving the data like this in datastore

 user.lat = float(lat)
     user.lon = float(lon)
     user.geoLocation = ndb.GeoPt(float(lat),float(lon))

and whenever I drag & drop map or zoom in or zoom out I get following parameters in my controller

    def get(self):
    """
    This is an ajax function. It gets the place name, north_east, and south_west
    coordinates. Then it fetch the results matching the search criteria and
    create a result list. After that it returns the result in json format.
    :return: result
    """
    self.response.headers['Content-type'] = 'application/json'
    results = []
    north_east_latitude = float(self.request.get('nelat'))
    north_east_longitude = float(self.request.get('nelon'))
    south_west_latitude = float(self.request.get('swlat'))
    south_west_longitude = float(self.request.get('swlon'))
    points = Points.query(ndb.AND(Points.lat<north_east_latitude,Points.lat>south_west_latitude))
    for row in points:
        if  row.lon > north_east_longitude and row.lon < south_west_longitude:
            listingdic = {'name': row.name, 'desc': row.description, 'contact': row.contact, 'lat': row.lat, 'lon': row.lon}
            results.append(listingdic)
    self.write(json.dumps({'listings':results}))

Saim Abdullah Ch via StackOverflow

unread,
Nov 11, 2016, 12:15:04 PM11/11/16
to google-appengin...@googlegroups.com

I want to achieve something like the map drag search on airbnb (https://www.airbnb.com/s/Paris--France?source=ds&page=1&s_tag=PNoY_mlz&allow_override%5B%5D=)

I am saving the data like this in datastore

 user.lat = float(lat)
     user.lon = float(lon)
     user.geoLocation = ndb.GeoPt(float(lat),float(lon))

and whenever I drag & drop map or zoom in or zoom out I get following parameters in my controller

    def get(self):
    """
    This is an ajax function. It gets the place name, north_east, and south_west
    coordinates. Then it fetch the results matching the search criteria and
    create a result list. After that it returns the result in json format.
    :return: result
    """
    self.response.headers['Content-type'] = 'application/json'
    results = []
    north_east_latitude = float(self.request.get('nelat'))
    north_east_longitude = float(self.request.get('nelon'))
    south_west_latitude = float(self.request.get('swlat'))
    south_west_longitude = float(self.request.get('swlon'))
    points = Points.query(Points.lat<north_east_latitude,Points.lat>south_west_latitude)
    for row in points:
        if  row.lon > north_east_longitude and row.lon < south_west_longitude:
            listingdic = {'name': row.name, 'desc': row.description, 'contact': row.contact, 'lat': row.lat, 'lon': row.lon}
            results.append(listingdic)
    self.write(json.dumps({'listings':results}))
Reply all
Reply to author
Forward
0 new messages