google-bigquery - 从 Bigquery 中提取的美国和俄罗斯几何图形存在视觉失真
问题描述
我正在使用此查询使用 BigQuery 公共数据集提取所有国家/地区的几何图形,请参阅此处的问题
如何从 BigQuery 中的 Openstreet 地图数据集中提取所有国家/地区的几何图形
我使用 R 来绘制 我尝试过 Kepler.GL 的结果并给了我相同的结果
俄罗斯和美国出了点问题
解决方案
我对 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 规范和平面地图。它将位于反子午线东部和西部的地理部分分开,因此您不会得到穿过它的边缘。它还使用平面地图边缘近似测地线边缘。但它使可视化系统变得更加容易。
推荐阅读
- ios - 使用变异函数/映射的结构中的全局变量在更新时不会改变值
- java - CriteriaBuilder 调用一个选择函数
- javascript - 如何限制粘贴在 contenteditable 区域中的文本样式?
- kubernetes - 无法在 gcloud 上正确配置入口
- javascript - Serviceworker event.respondWith 网络错误
- python - Python将日期时间转换为日期
- pandas - 从 pandas DataFrame 中获取 3 列的最大值?
- javascript - Blazor WebAssembly 环境变量
- python - 使用 python -c "command" 设置 Docker ENV
- xaml - Uwp Combobox IsTextSearchEnabled 在对话框中不起作用