前面的两篇文章介绍了geohash的基本原理及c#代码相关实现,其中geohash 5位编码单个网格覆盖面积大约在24平方千米,6位编码单网格覆盖面大约在0.73平方千米, 相邻编码长度之间单网格覆盖面积跨度太大,在实际应用中希望计算出3平方千米、5平方千米、10平方千米的覆盖率,可行的方案在Geohash6对应的网格上进行4、9、16网格的合并。

   基本思路 :

  • 将城市坐标看成一个基于经纬度线的坐标系,取出所在城市的经纬度范围(为了减少网格的个数,在满足业务的需求的前提下,确定的范围值越小越好)
  • 从最小的经纬度开始计算网格,在 geohash基本原理 一文中,通过在网上收集的资料,geohash码相邻网格的经纬度分别是为:0.0055 和 0.0027, 通过验证,相邻网格正确的偏移量分别为:
    DIFF_LAT = 0.0054931640625;
    DIFF_LON = 0.010986328125;
  • 在计算的过程中,将最小经纬度画出的表格定位在坐标系中的第一行、第一列,根据上面提供的偏差量依次进行循环,计算出范围内所有网格及其所在的行、列,以青岛为例,计算出来的示例数据如下:
  • 数据清洗完成后,接下来需要做的就是进行网格的合并(本质是给合并的网格一个相同的编码),如下图:
  • 红框内以4格合并为例,每个合并后的网格占2行2列,框内的11表示第一行第一列,12表示第一行第二列,21表示第二行第一行,当4格合并后新生成的风格占第一行第一列,由此不难发现,取geohash6网格所有行、列数除2向下取整即可得到合并后网格所在的新行和新列,对数据进行组合,确定唯一码
  • 同理,对于9格、16格、25格的合并岂是一样,它们分别可以使用3行3列、4行4列、5行5列的明细风格进行合并,然后取出合并后网格的最大和最小经纬度即可计算出坐标范围,如下:
    /*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 = ''
    group by geogroup4
  • 效果图:

基于geohash6编码实现相邻4、9、16网格合并的更多相关文章

  1. Jcompress: 一款基于huffman编码和最小堆的压缩、解压缩小程序

    前言 最近基于huffman编码和最小堆排序算法实现了一个压缩.解压缩的小程序.其源代码已经上传到github上面: Jcompress下载地址 .在本人的github上面有一个叫Utility的re ...

  2. TensorFlow上实践基于自编码的One Class Learning

    “我不知道什么是爱,但我知道什么是不爱” --One Class Learning的自白 一.单分类简介 如果将分类算法进行划分,根据类别个数的不同可以分为单分类.二分类.多分类,常见的分类算法主要解 ...

  3. 基于.NetCore开发博客项目 StarBlog - (16) 一些新功能 (监控/统计/配置/初始化)

    系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...

  4. 相邻元素margin的自动合并与float的坑

    css中相邻元素的margin其实是会自动合并的,且取较大值. <!DOCTYPE html> <html lang="en"> <head> ...

  5. 搭建Hive 2.1.1 基于Hadoop 2.6.1 和 Ubuntu 16.0.4 记录

        Hadoop Hive Hbase 对应版本 Hive官网下载 我们以Hadoop版本作为参考适配Hive Hbase即可, Hadoop版本是2.6.1 所以可以选择Hive1.2.1以上版 ...

  6. 基于模糊聚类和最小割的层次化网格分割算法(Hierarchical Mesh Decomposition)

    网格分割算法是三维几何处理算法中的重要算法,具有许多实际应用.[Katz et al. 2003]提出了一种新型的层次化网格分割算法,该算法能够将几何模型沿着凹形区域分割成不同的几何部分,并且可以避免 ...

  7. 日常踩坑 — 相邻元素之间的margin合并问题。

    踩坑:使用v-for渲染的组件,当然图中的id已经换成class,还是没有解决这个问题,于是各种查找资料,我就不信简单的CSS问题这么难解决! v-for渲染组件级传值: <div class= ...

  8. 相邻元素之间的margin合并问题

    任何元素都可以设置border 设置宽高可能无效 行内元素设置padding,margin上下是无效的,左右是有效的 外边距合并:指的是,当两个垂直外边距相遇时,它们将形成一个外边距. 合并后的外边距 ...

  9. 剑指offer(16)合并两个排序的链表

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题目分析 重点抓住这两个链表都是单挑递增的,因此我们只需要不断地比较他们的头结点就行,明显这是个 ...

随机推荐

  1. Python基础5--字符串

    1 find().rfind().index().rindex().count() s = "this apple is red apple" s.find("apple ...

  2. Python基础3--Python复杂数据类型

    1 堆 堆是一种二叉树,其中每个父节点的值都小于或等于其所有子节点的值,最小的元素总是位于二叉树的根节点. 堆的创建 import heapq import random data = range(1 ...

  3. 解决 canvas 将图片转为base64报错

    var canvas=document.getElementById("canvas"),//获取canvas ctx = canvas.getContext("2d&q ...

  4. Centos7 zip unzip 安装和使用

    安装: yum install -y unzip zip: 解压 unzip filename.zip

  5. 【机器学习基础】SVM实现分类识别及参数调优(二)

    前言 实现分类可以使用SVM方法,但是需要人工调参,具体过程请参考here,这个比较麻烦,小鹅不喜欢麻烦,正好看到SVM可以自动调优,甚好! 注意 1.reshape的使用: https://docs ...

  6. JetBrains PyCharm 专业版激活

    激活码获取:http://idea.lanyus.com/ JetbrainsCrack-release-enc.jar下载:提取码为1391

  7. 能用padding,margin解决的不要使用伪元素,能用背景解决的也不要用伪元素

    能用padding,margin解决的不要使用伪元素,能用背景解决的也不要用伪元素

  8. HDU2023:求平均成绩

    Problem Description 假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量. ...

  9. (0-1)CSS 标签语法的属性

    CSS text-decoration 属性 display display 属性规定元素应该生成的框的类型

  10. Hadoop权威指南

    初识Hadoop Hadoop与其它系统比较 数据库的劣势:磁盘寻址性能低发展慢 数据库索引? MapReduce适合一次写入,多次读取的应用,关系型数据库适合持续更新的数据集 Hadoop在处理数据 ...