前面的两篇文章介绍了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. web前端优化

    在谈到Web优化之前,我们回到一个更原始的问题,Web前端的本质是什么.我的理解是: 将信息快速并友好的展示给用户并能够与用户进行交互.快速的意思就是在尽可能短的时间内完成页面的加载,试想一下当你在淘 ...

  2. SQL注入之Sqli-labs系列第二十一关(基于复杂性的cookie POST报错注入)和二十二关(基于双引号的cookie POST报错注入)

    开始挑战第二十一关(Cookie Injection- Error Based- complex - string) 和二十二关(Cookie Injection- Error Based- Doub ...

  3. Win2003可用序列号(标准版与企业版)

    通用性好的win2003序列号: (推荐先用这个里面的)FJ8DH-TQPYG-9KFHQ-88CB2-Y7V3Y GRD4P-FTQQF-JCDM8-4P6JK-PFG7M JD7JX-KCDTH- ...

  4. DG备库缺失归档文件GAP日志

    问题现象: XXXsdgebus-dg GAP手工注册归档 #出现GAP idle>select * from v$archive_gap; THREAD# LOW_SEQUENCE# HIGH ...

  5. char *s 和 char s[] 的区别

    最近的项目中有不少c的程序,在与项目新成员的交流中发现,普遍对于char *s1 和 char s2[] 认识有误区(认为无区别),导致有时出现“难以理解”的错误.一时也不能说得很明白,网上也搜了一下 ...

  6. SQLAlchemy中表结构的一对多

    from flask import Flask from flask_sqlalchemy import SQLAlchemy import pymysql pymysql.install_as_My ...

  7. Unity导航系统Navigation使用教程

    Unity开发VR之Vuforia 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...

  8. 20155219实践题目实现od命令

    实践题目 编写MyOD.c 用myod XXX实现Linux下od -tx -tc XXX的功能 od的功能: od命令用于将指定文件内容以八进制.十进制.十六进制.浮点格式或ASCII编码字符方式显 ...

  9. rcnn系列

    提纲挈领 https://blog.csdn.net/linolzhang/article/details/54344350 SPP https://www.cnblogs.com/gongxijun ...

  10. 简单总结scrapy使用方法

    应课程需要写了几天爬虫,一开始使用requests+bs4的技术路线,但是速度不是很理想而且不能暂停,通过查阅资料,发现scrapy正是我需要的 做一下简短的记录: 首先应该毫不犹豫的scrapy s ...