Geolocation queries auf Redis basiert

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
ihucos
User
Beiträge: 8
Registriert: Dienstag 11. November 2014, 11:37

Hallo Python Forum,

Hier etwas einfacheres als in meinem letzten Thread: https://github.com/ihucos/geonear
Geohash basierte Geolocation queries auf Redis. Alle operationen auf redis sind entweder ein einzelner befehl oder lua-skript. Das ganze ist auf schnelle nearby-queries optimiert.
Funktioniert glaube ich leider nicht auf Redis-Cluster.

Anwendungsbeispiel:

Code: Alles auswählen

>>> from redis import StrictRedis
>>> from geonear import Globe
>>> globe = Globe(StrictRedis(), geohash_precision=8)

Populate the database

>>> globe.pin('max', location='Sophienstr. 9, 10178 Berlin')
>>> globe.pin('peter', location='Sophienstr. 10, 10178 Berlin', data=['my', 'data'])
>>> globe.pin('anna', location='Sophienstr. 11, 10178 Berlin')
>>> globe.pin('mr bean', location='Sophienstr. 20, 10178 Berlin')

Simple query

>>> area = globe.near(location='Sophienstr. 10, 10178 Berlin')
>>> area
<Area containing 3 pins (e.g. 'peter'), size 9 >
>>> list(area)
['anna', 'max', 'peter']

Delete entry

>>> globe.delete('max')
>>> list(area) # lazy evaluation on area objects without any caching
['anna', 'peter']
>>> not 'max' in globe and not 'max' in area
True

Fetch data

>>> globe.map_with_data(area)
{'peter': [u'my', u'data'], 'anna': None}

List geohashes used internally

>>> area.geohashes
set(['u33dbcze', 'u33dbczm', 'u33dbczj', 'u33dbczk', 'u33dbczh', 'u33dbcz7', 'u33dbczt', 'u33dbcz5', 'u33dbczs'])
Je nach Feedback mache ich das vielleicht bei pypi rein, vielleicht sind manche namen in der API etwas verwirrend?
Antworten