diff --git a/Geohash/__init__.py b/Geohash/__init__.py index ff95dfe..80295a2 100644 --- a/Geohash/__init__.py +++ b/Geohash/__init__.py @@ -18,4 +18,4 @@ License along with Geohash. If not, see . """ -from geohash import decode_exactly, decode, encode +from geohash import decode_exactly, decode, encode, neighbors, neighbor diff --git a/Geohash/geohash.py b/Geohash/geohash.py index 26040d8..dcd6479 100644 --- a/Geohash/geohash.py +++ b/Geohash/geohash.py @@ -107,3 +107,31 @@ def encode(latitude, longitude, precision=12): bit = 0 ch = 0 return ''.join(geohash) + +def neighbor(geohash,direction): + (lat, lon, lat_err, lon_err)=decode_exactly(geohash) + neighborLat=lat+direction[0]*lat_err*2 + neighborLon=lon+direction[1]*lon_err*2 + return encode(neighborLat, neighborLon, len(geohash)) + +def __encodeNeighbor(lat,lon,lat_err, lon_err,direction,length): + neighbor_lat = lat + direction[0] * lat_err; + neighbor_lon = lon + direction[1] * lon_err; + return encode(neighbor_lat, neighbor_lon,length ) + +def neighbors(geohash): + hashstringLength=len(geohash) + (lat, lon, lat_err, lon_err)=decode_exactly(geohash) + + neighborHashList=[ + __encodeNeighbor(lat, lon, lat_err*2, lon_err*2,[-1,1],hashstringLength), + __encodeNeighbor(lat, lon, lat_err*2, lon_err*2,[0,1],hashstringLength), + __encodeNeighbor(lat, lon, lat_err*2, lon_err*2,[1,1],hashstringLength), + __encodeNeighbor(lat, lon, lat_err*2, lon_err*2,[-1,0],hashstringLength), + __encodeNeighbor(lat, lon, lat_err*2, lon_err*2,[0,0],hashstringLength), + __encodeNeighbor(lat, lon, lat_err*2, lon_err*2,[1,0],hashstringLength), + __encodeNeighbor(lat, lon, lat_err*2, lon_err*2,[-1,-1],hashstringLength), + __encodeNeighbor(lat, lon, lat_err*2, lon_err*2,[0,-1],hashstringLength), + __encodeNeighbor(lat, lon, lat_err*2, lon_err*2,[1,-1],hashstringLength) + ] + return neighborHashList