有没有一种很好的方法可以在地图上自动创建镶嵌六边形以显示hexbins?

时间:2017-04-25 12:22:22

标签: geometry geospatial tableau

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

十六进制的中心点可以直接绘制为点图,但这并不像实际绘制六边形平铺平面的地图那样令人满意。一些博客建议使用形状而不是点来创建类似于期望结果的东西。 This Tableau blog使用hex bins但是使用非六边形形状绘制它们。 This blog建议使用自定义的六边形形状,但是当hexbin比例变化(相同的比例对所有事情都不起作用)时,它们不会对它们进行细分和管理。

那么有没有一种方法可以自动创建镶嵌六边形以在允许不同六边形密度的地图上绘制?

补充问题:为什么Tableau没有构建此功能?当六边形基于Lat / lon时,如何调整地球的形状?

1 个答案:

答案 0 :(得分:0)

是的,它可以通过简单的方式完成,也可以通过更复杂的方式来纠正地球的形状

Tableau中的hexbin函数适用于将原始坐标分成六边形区域的任何X-Y数据。

在地图上,数据通常以度数表示的Lat-Lon坐标表示。 Tableau可以直接绘制这些数据,但通常使用稍微扭曲的Web墨卡托投影(远离赤道的区域被大大放大)。这意味着在纬度上定义的六边形区域将不会具有相同的大小(当纬度高且远离赤道但是度数时,东西方向上的一度表示地球表面上的距离小得多在南北线上总是大约111公里长。)

简单版本忽略此失真并从lat-lon坐标生成hexbins。我将首先介绍基于这种简单技术的方法。我的基础是一个数据集,其中包含英国每个邮政编码的位置(在不同的地理区域,密度范围很宽,约2.5米)。

基本方法包括几个步骤:

  • 使用允许调整六边形大小的参数生成缩放系数
  • 生成一个值来定义六边形顶点的额外点(我通过在数据集的每一行上添加一个值来实现这一点,该值由1到6的随机数组成)
  • 生成hexbin中心的lat-lon坐标
  • 添加定义六边形顶点的6个点
  • 将六边形绘制为地图上的多边形(然后可以根据基础数据将任何聚合体着色)

以下是分步指南。

我定义了一个参数hexbin size,它以度为单位表示hexbin的半径。然后,基于数据集的每一行中的纬度和经度值,以下列方式定义十六进制分箱:

hexbinx formula

hexbiny公式类似。

数据集本身包含一个名为PointID的字段,其中包含1到6的值。(有多种方法可以实现此目的,但在数据集中执行此操作比在表格中执行更容易,因为许多数据库包含保证随机分布的散列函数通过简单的mod函数可以将数字从1变为6的整数。我根据PointID中的值定义了一个名为angle的新字段(以帮助定义六边形的顶点):

angle formula

现在我可以添加需要绘制的点来定义六边形多边形:

plot lat formula

经度类似:

plot lon formula

此时,数据集应在每个hexbin中包含足够的行,以保证每个hexbin包含每个1-6的值的行,以便定义六边形的所有点。

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

simple hexbin map

这表明基本技术有效。但它也显示出一个关键问题:六角形多边形是扭曲的。如果你能忍受这种情况(靠近赤道或小区域的问题不大),那么你就会坚持下去。

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

以下调整涉及除简单解决方案之外的一些额外步骤:

  • 根据距离生成新的缩放系数
  • 根据距离不是纬度,将lat-lon值转换为Web墨卡托系统中的X-Y坐标
  • 在新坐标系中使用距离而非角度生成十六进制值
  • 将基于距离的十六进制位转换回lat-lon坐标以定义hexbin中心
  • 使用距离坐标添加六边形顶点,然后转换回lat-lon

您还需要为地球半径添加一个参数,该参数是坐标变换中的转换因子。

这是如何工作的。首先转换为X-Y坐标:

mercator x formula mercator y formula

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

hexbin mercator formula

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

adjusted hexbin lat adjusted hexbin lon

请注意,纬度公式是复杂的公式。

但是为了使六边形多边形在绘制时正常工作,您必须在将它们转换回lat-lon坐标之前为6个顶点添加额外的点。转换与上面的公式相同,最终公式如下所示:

plot lat adjusted plot lon adjusted

额外部分只是根据由比例因子确定的六边形为六边形中心的坐标添加一个固定距离(根据角度的六个值有六个这样的距离)。

当以与前一个多边形图相同的方式绘制时,它应该如下所示(当整理时):

adjusted polygon map

现在,六边形的视觉外观和实际尺寸都更好。

对于包含上述计算的Tableau Public工作簿see here

PS Tableau可以而且应该将大部分功能构建到产品中,因为它可以大大简化有用的技术。