I've got a better solution than geohashing.
I break down the grid into sub-degree squares by truncating after the
first decimal point, and then when I save something that I need to
find on the map later, I save metadata with that point indicating the
surrounding grid squares.
So if I have a point with long -122.123123123 and lat 35.56565, that's
in a grid square called -122.1x35.5, and it's surrounded as follows:
[-122.2x35.6][-122.1x35.6][-122.0x35.6]
[-122.2x35.5][-122.1x35.5][-122.0x35.5]
[-122.2x35.4][-122.1x35.4][-122.0x35.4]
Those are all represented in my object as a list
(db.StringListProperty, so you have to do the right permutations to
make them into strings), and because of the way lists work, if a point
that you're searching on is in any of the grid squares associated with
a saved point, that saved point will come up.
To wit, if you have saved that above point, and someone comes in
searching on an address that corresponds to LONG -122.0857 LAT
35.69999, that corresponds to grid square '-122.0x35.6', which is in
your upper right hand corner. Thus, if you search for something like:
square = '-122.0x35.6'
points = (SELECT * FROM Locations WHERE gridList=:1", square)
...you'll find that the original point we saved above will return.
It's all about metadata. Don't think in terms of inequalities and
boundary conditions, think in terms of inclusive ranges.
Best,
On Sep 3, 1:23 pm, Pierre <
pierre.vann...@gmail.com> wrote:
> Hi,
>
> I need to find points (lat/lng) within a certain bounding box. To do
> so, I triedGeohashpython implementation (
http://mappinghacks.com/
> code/geohash.py.txt).
>
> Problem's data is :
> - I have 2 points (South west SW corner / North east NE corner)
> describing a geographic Bounding box
> - I have a model (let's call it 'Poi') having a field "geohash" of
> type Db.StringProperty + Lat and Lng field (Float)
>
> Question is : How on earth (lol :-) ) can I find all Poi within my
> bounding box ?
>
> I've already tried something like :
>
> CreateGeohashfor SW, createGeohashfor NE and do something like :
>
> "SELECT * FROM Poi WHEREgeohash>:1 andgeohash<= :2,geohash(SW),geohash(NE)"
>
> Also tried with geoindex, at different depth but all this fails and
> still give points not located within Bounding box.
> Also tried like describe in "
http://labs.metacarta.com/blog/27.entry/
> geographic-queries-on-google-app-engine/" to create a small
> surrounding box for each Poi and then create ageohashfor this