Geometry 有没有一种好方法可以在地图上自动创建镶嵌六边形以可视化六边形?

Geometry 有没有一种好方法可以在地图上自动创建镶嵌六边形以可视化六边形?,geometry,geospatial,tableau-api,Geometry,Geospatial,Tableau Api,Tableau的几个版本之前引入了HexBin函数,允许地理信息(或者,实际上,任何按x-y坐标分组的信息)以相同大小的六边形单位分组在一起。这在创建基础信息在地理上分布不均匀的地图时非常有用 六边形的中心点可以直接绘制为点地图,但这不如实际绘制六边形平铺在平面上的地图令人满意。一些博主建议使用形状而不是点来创建类似预期结果的东西。例如,使用六角箱子,但使用非六角形状打印。建议使用自定义六边形形状,但它们不会镶嵌,并且在hexbin比例变化时管理它们(相同的比例并不适用于所有情况)令人恼火 那么

Tableau的几个版本之前引入了
HexBin
函数,允许地理信息(或者,实际上,任何按x-y坐标分组的信息)以相同大小的六边形单位分组在一起。这在创建基础信息在地理上分布不均匀的地图时非常有用

六边形的中心点可以直接绘制为点地图,但这不如实际绘制六边形平铺在平面上的地图令人满意。一些博主建议使用形状而不是点来创建类似预期结果的东西。例如,使用
六角箱子
,但使用非六角形状打印。建议使用自定义六边形形状,但它们不会镶嵌,并且在hexbin比例变化时管理它们(相同的比例并不适用于所有情况)令人恼火

那么,有没有一种好方法可以自动创建镶嵌六边形,以便在允许不同六边形密度的地图上打印呢


补充问题:为什么Tableau没有内置此功能?当六边形基于纬度/经度时,如何调整地球的形状?

是的,可以用简单的方法调整,也可以用更复杂的方法调整地球的形状

Tableau中的
hexbin
函数处理任何X-Y数据,将原始坐标存储到六边形区域中

在地图上,数据通常以纬度坐标表示,以度表示。Tableau可以直接绘制这些数据,但通常使用有点扭曲的WebMercator投影(远离赤道的区域被大大放大)来绘制。这意味着在纬度上定义的六边形垃圾箱的大小将不一样(当纬度较高且远离赤道时,东西方向的一度代表地球表面上更小的距离,但南北方向的一度总是约111km长)

简单的版本忽略了这种失真,并从lat-lon坐标生成hexbins。我将首先描述基于这个简单技术的方法。我是基于一个包含英国每个邮政编码位置的数据集(约250万行,不同地理位置的密度范围很广)

基本方法包括几个步骤:

  • 使用允许调整六边形大小的参数生成比例因子
  • 生成一个值来定义六边形顶点的额外点(我通过向数据集上由1到6的随机数组成的每一行添加一个值来实现)
  • 生成六边形中心的横向坐标
  • 添加定义六边形顶点的6个点
  • 将六边形绘制为地图上的多边形(然后可以根据基础数据通过任何聚合对六边形进行着色)
这是一个循序渐进的指南

我定义了一个参数
hexbin size
,它以度表示hexbin的半径。然后,根据数据集每行中的纬度和经度值,按照以下方式定义十六进制存储单元:

hexbiny公式与此类似

数据集本身包含一个名为PointID的字段,该字段包含从1到6的值。(有多种方法可以实现这一点,但在数据集中执行要比在表中执行容易,因为许多数据库包含哈希函数,可以保证整数的随机分布,这些整数可以通过简单的mod函数转换为从1到6的数字)。我根据PointID中的值定义了一个名为angle的新字段(以帮助定义六边形的顶点):

现在,我可以添加需要打印以定义六边形多边形的点:

经度相似:

此时,数据集应在每个六边形中包含足够的行,以确保每个六边形包含每个值为1-6的行,从而定义六边形的所有点

要绘制六边形,请适当设置plot lon和plot lat字段的地理角色,然后依次双击每个字段。然后拖动“六边形”和“六边形”以显示细节,并将图表类型从“自动”更改为“多边形”。这将产生一些可怕的混乱,通过将PointID拖到Path来修复。这应该会给出这样的结果(我还添加了为六边形着色的行数,并调整了颜色和透明度):

这表明基本技术是有效的。但它也显示了一个关键问题:六边形多边形是扭曲的。如果你能接受这一点(在赤道附近或小范围内,这不是什么问题),那就坚持下去

但是如果你关心扭曲(视觉以及六边形没有覆盖相等面积的事实),那么你必须做一些更复杂的事情。下面我所描述的是基于Tableau的Sarah Battersby的工作

除了简单的解决方案外,以下调整还包括一些额外的步骤:

  • 基于距离生成新的比例因子
  • 在基于距离而非纬度的Web Mercator系统中将纬度值转换为X-Y坐标
  • 在新坐标系中使用距离而不是角度生成六边形
  • 将基于距离的六边形转换回纬度坐标,以定义六边形中心
  • 使用距离坐标添加六边形顶点,然后转换回lat lon
您还需要为地球半径添加一个参数,该参数是坐标变换中的一个转换因子

这就是它的工作原理。首先,转换为X-Y坐标:

现在我们可以在新坐标上使用hexbin分组:

将这些坐标转换回lat lon的公式如下所示(如果您只想绘制中心,则非常有用):