本文主要是介绍离我最近之geohash算法(增加周边邻近编号),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
接着上一篇文章:查找附近网点geohash算法及实现 (Java版本) http://blog.csdn.net/sunrise_2013/article/details/42024813
参考文档:
http://www.slideshare.net/sandeepbhaskar2/geohash 介绍geohash原理及例子
http://geohash.gofreerange.com/ 演示实例
http://geohash.gofreerange.com/ 周边8格子实例
由于存在部分网点丢失的情况,为了解决边缘问题,需要计算这个块周围的八个格子,补充代码,实现周边8个编码的最近编码。
根据一个geohash值 获取周围8个geohash值的代码。
例如在方格4的左下部分的点和大方格1的右下部分的点离的很近,可是它们的geohash值一定是相差的相当远,因为头一次的分块就相差太大了,很多时候我们对geohash的值进行简单的排序比较,结果貌似真的能够找出相近的点,并且似乎还是按照距离的远近排列的,可是实际上会有一些点被漏掉了。
上述这个问题,可以通过搜索一个格子,周围八个格子的数据,统一获取后再进行过滤。这样就在编码层次解决了这个问题。
全部代码实例:
Geohase.java
package com.DistTest;//Geohash.java
//Geohash library for Java
//ported from David Troy's Geohash library for Javascript
//- http://github.com/davetroy/geohash-js/tree/master
//(c) 2008 David Troy
//(c) 2008 Tom Carden
//Distributed under the MIT Licensepublic class Geohash {public static int BITS[] = { 16, 8, 4, 2, 1 };public static String BASE32 = "0123456789bcdefghjkmnpqrstuvwxyz";public static int RIGHT = 0;public static int LEFT = 1;public static int TOP = 2;public static int BOTTOM = 3;public static int EVEN = 0;public static int ODD = 1;public static String[][] NEIGHBORS;public static String[][] BORDERS;static {NEIGHBORS = new String[4][2];BORDERS = new String[4][2];NEIGHBORS[BOTTOM][EVEN] = "bc01fg45238967deuvhjyznpkmstqrwx";NEIGHBORS[TOP][EVEN] = "238967debc01fg45kmstqrwxuvhjyznp";NEIGHBORS[LEFT][EVEN] = "p0r21436x8zb9dcf5h7kjnmqesgutwvy";NEIGHBORS[RIGHT][EVEN] = "14365h7k9dcfesgujnmqp0r2twvyx8zb";BORDERS[BOTTOM][EVEN] = "bcfguvyz";BORDERS[TOP][EVEN] = "0145hjnp";BORDERS[LEFT][EVEN] = "prxz";BORDERS[RIGHT][EVEN] = "028b";NEIGHBORS[BOTTOM][ODD] = NEIGHBORS[LEFT][EVEN];NEIGHBORS[TOP][ODD] = NEIGHBORS[RIGH
这篇关于离我最近之geohash算法(增加周边邻近编号)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!