求geoHash查询附件8个格子的原理。

ysm1850 2014-12-12 11:34:02
通过坐标实现附件地图的搜索。 可以参考这位仁兄的 码农SW 的转帖 http://blog.csdn.net/suwei19870312/article/details/9266577。
大概内容是坐标点根据geohash加密获取一块字符串块。 这个字符串表示一块区域里的所有坐标串。
但是为了解决边缘问题,需要计算这个块周围的八个格子。 请问计算周围8个格子的原理是什么。
...全文
489 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐三角 2014-12-18
  • 打赏
  • 举报
回复
http://en.wikipedia.org/wiki/Geohash
a12939026 2014-12-17
  • 打赏
  • 举报
回复
你贴出来的代码 不是关键点吧。。 calculateAdjacent 重点要看着方法吧。
ysm1850 2014-12-12
  • 打赏
  • 举报
回复
	private static final char[] DIGITS_LOWER = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'b', 'c', 'd', 'e',
			'f', 'g', 'h', 'j', 'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };

	public static final Map<String, String> BORDERS = new HashMap<String, String>();
	public static final Map<String, String> NEIGHBORS = new HashMap<String, String>();
	static {
		NEIGHBORS.put("right:even", "bc01fg45238967deuvhjyznpkmstqrwx");
		NEIGHBORS.put("left:even", "238967debc01fg45kmstqrwxuvhjyznp");
		NEIGHBORS.put("top:even", "p0r21436x8zb9dcf5h7kjnmqesgutwvy");
		NEIGHBORS.put("bottom:even", "14365h7k9dcfesgujnmqp0r2twvyx8zb");

		NEIGHBORS.put("right:odd", "p0r21436x8zb9dcf5h7kjnmqesgutwvy");
		NEIGHBORS.put("left:odd", "14365h7k9dcfesgujnmqp0r2twvyx8zb");
		NEIGHBORS.put("top:odd", "bc01fg45238967deuvhjyznpkmstqrwx");
		NEIGHBORS.put("bottom:odd", "238967debc01fg45kmstqrwxuvhjyznp");

		BORDERS.put("right:even", "bcfguvyz");
		BORDERS.put("left:even", "0145hjnp");
		BORDERS.put("top:even", "prxz");
		BORDERS.put("bottom:even", "028b");

		BORDERS.put("right:odd", "prxz");
		BORDERS.put("left:odd", "028b");
		BORDERS.put("top:odd", "bcfguvyz");
		BORDERS.put("bottom:odd", "0145hjnp");
	}


	public static String[] getGeoHashExpand(String geohash) {
		try {
			String geohashTop = calculateAdjacent(geohash, "top:");
			String geohashBottom = calculateAdjacent(geohash, "bottom:");
			String geohashRight = calculateAdjacent(geohash, "right:");
			String geohashLeft = calculateAdjacent(geohash, "left:");

			String geohashTopLeft = calculateAdjacent(geohashLeft, "top:");
			String geohashTopRight = calculateAdjacent(geohashRight, "top:");
			String geohashBottomRight = calculateAdjacent(geohashRight, "bottom:");
			String geohashBottomLeft = calculateAdjacent(geohashLeft, "bottom:");

			String[] expand = { geohash, geohashTop, geohashBottom, geohashRight, geohashLeft, geohashTopLeft,
					geohashTopRight, geohashBottomRight, geohashBottomLeft };
			return expand;
		} catch (Exception e) {
			logger.error("GeoHash Error",e);
			return null;
		}
	}

以上就根据一个geohash值 获取周围8个geohash值的代码,但是不知道原理。求教!
ysm1850 2014-12-12
  • 打赏
  • 举报
回复
引用 1 楼 a12939026 的回复:
我没有深入的理解过GEO,不过简单的来说,GEO就是将一个块分为32个小块,然后不断细分下去。 你可以自己画个图,32个小块的位置其实是固定的,这样每个小块的周围8个的编码也可以固定(就算你找不出公式,最多存32份数据作为基础即可)
我现在是有公式,有代码,但是不知道是什么原理。
a12939026 2014-12-12
  • 打赏
  • 举报
回复
我没有深入的理解过GEO,不过简单的来说,GEO就是将一个块分为32个小块,然后不断细分下去。 你可以自己画个图,32个小块的位置其实是固定的,这样每个小块的周围8个的编码也可以固定(就算你找不出公式,最多存32份数据作为基础即可)
内容概要:本文系统研究了构网型变流器的正负序阻抗解耦特性及其在弱电网环境下的稳定性表现,重点依托Matlab/Simulink仿真平台,构建了详细的阻抗数学模型,设计了解耦控制策略,并采用小信号扫频法进行频域辨识与稳定性验证。研究深入探讨了构网型变流器与传统跟网型逆变器在正负序阻抗特性上的本质差异,结合虚拟同步发电机(VSG)等先进控制技术,分析其在抑制宽频带振荡、削弱锁相环动态耦合等方面的优越性。文中不仅提供了完整的仿真模型与MATLAB代码实现,还整合了光伏、风电、储能、微电网等多类新能源系统的阻抗建模与稳定性分析资源,形成了一套面向新型电力系统稳定性的综合性技术资料体系,具有较强的科研复现与工程参考价值。; 适合人群:面向具备电力电子、电力系统自动化、新能源并网等专业背景的研究生、高校教师及工程技术人员,特别适用于从事阻抗建模、小干扰稳定性分析、宽频振荡机理研究以及撰写高水平学术论文的科研工作者。; 使用场景及目标:①掌握构网型变流器正负序阻抗建模与扫频辨识的仿真方法;②深入理解VSG等构网型控制在弱电网中提升稳定性的内在机理;③复现顶刊论文中的阻抗分析流程与稳定性判据应用;④利用提供的成熟模型与代码加速科研进程,支撑课题研究与学术成果产出。; 阅读建议:建议结合文中提供的Simulink模型与MATLAB代码,按照“理论建模—仿真搭建—扫频激励—频响提取—Nyquist判据分析”的完整流程进行实践操作,重点关注扫频信号的注入方式、频率范围设置及阻抗曲线的物理意义解读,并参考博士论文复现案例深化对复杂动态耦合问题的理解。

81,111

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧