前面的两篇文章介绍了geohash的基本原理及c#代码相关实现,其中geohash 5位编码单个网格覆盖面积大约在24平方千米,6位编码单网格覆盖面大约在0.73平方千米, 相邻编码长度之间单网格覆盖面积跨度太大,在实际应用中希望计算出3平方千米、5平方千米、10平方千米的覆盖率,可行的方案在Geohash6对应的网格上进行4、9、16网格的合并。
基本思路 :
DIFF_LAT = 0.0054931640625;
DIFF_LON = 0.010986328125;
/*group4*/ update ETL_GeoCityGrid set geogroup4 = cityID + ‘-‘ + ‘G4-‘ + cast(CEILING(cast(grow as decimal)/2) as varchar) + ‘-‘ + cast(CEILING(cast(gcol as decimal)/2) as varchar); /*group9*/ update ETL_GeoCityGrid set geogroup9 = cityID + ‘-‘ + ‘G9-‘ + cast(CEILING(cast(grow as decimal)/3) as varchar) + ‘-‘ + cast(CEILING(cast(gcol as decimal)/3) as varchar); /*group16*/ update ETL_GeoCityGrid set geogroup16 = cityID + ‘-‘ + ‘G16-‘ + cast(CEILING(cast(grow as decimal)/4) as varchar) + ‘-‘ + cast(CEILING(cast(gcol as decimal)/4) as varchar);
合并后网格的唯一码确定后,计算每个合并后网格的坐标范围就相对容易,如下:
select geogroup4,min(minlat) as minlat,min(minlng) as minlng,max(maxlat) as maxlat,max(maxlng) as maxlng from ETL_GeoCityGrid where cityid = ‘3702‘ group by geogroup4
原文:http://www.cnblogs.com/tgzhu/p/6950363.html