从 Bigquery 中提取的美国和俄罗斯几何图形存在视觉失真

USA and Russia Geometry extracted from Bigquery has a visual distortion

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

我用R画出结果 我试过 Kepler.GL 并给了我相同的结果

俄罗斯和美国出了点问题

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

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

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

你应该怎么办?

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

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