首页 > 解决方案 > 从 Bigquery 中提取的美国和俄罗斯几何图形存在视觉失真

问题描述

我正在使用此查询使用 BigQuery 公共数据集提取所有国家/地区的几何图形,请参阅此处的问题

如何从 BigQuery 中的 Openstreet 地图数据集中提取所有国家/地区的几何图形

我使用 R 来绘制 在此处输入图像描述 我尝试过 Kepler.GL 的结果并给了我相同的结果 在此处输入图像描述

俄罗斯和美国出了点问题

标签: google-bigquerygis

解决方案


我对 R 可视化知之甚少,但可能发生的事情是您从 BigQuery 获取 WKT 文本,并将其提供给具有不同假设的 R。

问题是您的 R 包可能对 WKT 的处理方式与 BigQuery 不同。WKT 语义取决于使用的空间参考系统 (SRS),它可以是地理的(非投影的,使用球体或椭球体)或投影的(平面地图)。BigQuery 使用地理系统,因此点 A 和 B 之间的边是最短的测地线路径。大多数可视化系统使用投影坐标,并采用平面地图。A 和 B 之间的边是平面地图上最短的直线。

虽然在很多情况下这并不重要,但当你有长边时它仍然会影响精度。但是当一条边穿过反子午线(180 度子午线)时,你会遇到大问题。(-169, 66)(俄罗斯东部边缘)和说 (176, 70)(楚科奇海附近的点)之间的一条边在球体上相对较短,它穿过反子午线,跨越 15 度经度。但平面地图上的同一条边缘跨越 145 度经度并穿过大部分地图!这些是您看到的近乎水平的长线。

你该怎么办?

  • 如果 R 有一个支持地理 SRS 的数据包(有时可以选择使用测地线边缘),您可以尝试一下。
  • ST_AsGeoJson或者,您也可以让 BigQuery 使用函数将地理从地理 SRS 转换为 R 可以理解的平面地图。GeoJson 是在平面地图上定义的,因此 BigQueryST_AsGeoJson将语义从地理 SRS 转换为平面地图 SRS。然后在 R 中可视化 GeoJson 字符串而不是 WKT 字符串。

ST_AsGeoJson做了很多工作,以使结果符合 GeoJson 规范和平面地图。它将位于反子午线东部和西部的地理部分分开,因此您不会得到穿过它的边缘。它还使用平面地图边缘近似测地线边缘。但它使可视化系统变得更加容易。


推荐阅读