项目中要用到geohash 来传输经纬度,一开始对geohash 一点都不懂,经过了解之后知道了个大概,下面分享我浏览获取的有用地址:
1、初步了解
geohash 用一个字符串表示经度和纬度两个坐标。geohash表示的并不是一个点,而是一个矩形区域。比如编码wx4g0ec19,它表示的是一个矩形区域。 使用者可以发布地址编码,既能表明自己位于北海公园附近,又不至于暴露自己的精确坐标,有助于隐私保护。
2、geohash算法
根据经纬度计算GeoHash二进制编码
组码(将经纬度的两个二进制编码合成新串)
使用用0-9、b-z(去掉a, i, l, o)这32个字母进行base32编码
详情请查看:GeoHash核心原理解析
3、OC中的调用
在网搜索了很久,没找到OC的经纬度转geohash的类,最终找到 C的,在OC中调用C的就OK了。
#import "geohash.h"
/**
* 将经纬度转成 geohash
*
* @param lat 纬度
* @param lon 经度
* @param length 长度
*
* @return NSString 返回geohash
*/
+ (NSString *)getGeohash:(CGFloat)lat andLon:(CGFloat)lon andLength:(int)length{
char *hash = GEOHASH_encode(lat,lon,length); // 通过 geohash.h C文件 获取 geohash 值
NSString *string = [NSString stringWithFormat:@"%s",hash]; // 将char 转成 string
return string;
}