如何正确地将您的国家/地区加载到阿帕奇超集
TLDR
- 2016年发布的GeoJSON规范要求多边形遵循右手规则。
- *所有更新的GeoJSON文件现在都遵循右手规则。
- 但是,SuperSet要求您的GeoJSON文件多边形遵循相反的方向,这违反了规范。
- *隐藏您的GeoJSON文件,以便使用中包含的脚本以相反的方向绘制多边形。步骤5。
- 将GeoJSON文件包含在
传统-插件-图表-国家/地区地图
插件。 - *导入GeoJSON文件并重建您的SuperSet前端。
ApacheSuperset是一个免费的开放核心数据分析工具,它为企业提供了一系列非常简洁的功能。这是一个很好的软件,你没有预算去花在昂贵的商业智能工具上。
遗憾的是,他们的文档不是最新的,StackOverflow上的问题和解决方案有限,定制Superset可能是一件痛苦的事情。社区对GitHub的支持非常有限。大多数情况下,你必须自己想办法解决问题。
最近,我不得不将国家地图加载到阿帕奇超集以生成国家地图图表。默认情况下,阿帕奇超集不包括所有国家/地区地图,仅提供少数国家/地区。
阿帕奇超集。文件它为您提供了将国家/地区加载到Superset中所需的步骤。这听起来直截了当,但现实远非如此。
在本教程中,我将讲述我的经历,以及如何将您的国家包括在ApacheSuperset中。带你去寻宝,就像我一样,简直把我逼疯了。
第1步-查找正确的国家/地区的GeoJSON文件
首先,我必须找到正确的GeoJSON文件。幸运的是,我在以下位置找到了斯里兰卡的GeoJSON文件:https://lt.techopen.info/data/images/2023-04-01/aed84b9c1907adc620e07c96cf1c61c9.jpg*该网站包括大量来自不同国家的GeoJSON文件,您可以免费下载。
如果您的国家没有列在Humdata网站上,您可以使用QGIS软件创建一个GeoJSON文件。您可以从他们的网站下载QGIS软件。https://lt.techopen.info/data/images/2023-04-01/545b6c929935bbc97b5a344b8efae19c.jpg。
我下载了GeoJSON文件,并将其包含在Superset文档中提到的Legacy-Plugin-Chart-map-Country插件中,并重新构建了Superset前端。
我希望一切都能按计划进行,我会很好地把斯里兰卡地图加载到Superset网站上。然而,渲染的地图与我预期的完全不同,
地图被呈现为一个矩形,如果仔细观察,您可以看到矩形的右边界上有一个小的缩进,其中包含由GeoJSON文件引起的某种呈现。
显然,这个问题在GitHub上被问了很多次,但似乎没有人分享解决这个问题的有效解决方案。
这会是SuperSet的问题吗?还是像在这两个GitHub问题中提到的那样,GeoJSON文件有问题?
我最初认为这一定是Superset的问题,因此我在斯里兰卡的Superset插件中使用了现有的GeoJSON文件,并重新加载了前端,该GeoJSON文件正确呈现。
为了弄清这一点,我从Humdata下载了一个不同的国家/地区的GeoJSON文件,并将其加载到Superset。
正如您在上面看到的,这也呈现了一个矩形,那时我知道这一定是GeoJSON文件有问题,或者Superset如何使用从Humdata下载或由QGIS创建的GeoJSON文件。
步骤2-尝试解析GeoJSON文件
然后我就去了。https://lt.techopen.info/data/images/2023-04-01/c97e624e2b3c1bc6f04671f5e67f8097.jpg并粘贴了斯里兰卡的GeoJSON文件,查看GeoJSON文件是否有问题,并在Geojson.io网站上正确渲染文件。
斯里兰卡的GeoJSON文件也可以在GitHub上正确呈现,这意味着我从Humdata下载的GeoJSON文件没有任何问题。那么,这里的问题可能是什么呢?
我甚至在斯里兰卡地图上画了一个简单的多边形(一个大三角形),并试图在Superset上渲染它。如上所示,这也呈现了一个大的矩形。
步骤3-尝试查看坐标是否正确
令我沮丧的是,我在谷歌上搜索了SuperSet[113.13181294000367,-25.951992185759366]内部现有地图中一个点的纬度和经度,这是西澳大利亚的一个点,令我惊讶的是,谷歌没有显示与这些坐标匹配的地方。
然后我颠倒了坐标,在谷歌上搜索[-113.13181294000367,25.951992185759366],这正确地显示了西澳大利亚的一个点。
那么,这是否意味着我必须正确地反转坐标并将其显示在Superset上?这并不反常,就像Stackoverflow上提到的那样,流行的Java地图渲染插件宣传单也使用了反转的坐标。阿帕奇超级集可能也在做同样的事情,所以这没有什么错。
反转坐标有多难,我所要做的就是编写一个简单的Java脚本来反转GeoJSON中的坐标。
我编写了一个简单的脚本,并反转了从Humdata下载的GeoJSON文件的坐标。并将其加载到Superset,这就是结果
这给了我一张斯里兰卡的有线地图,位于一个完全不同的地理位置。但与我最初收到的矩形相比,这是一个改进。所以我肯定在这方面取得了进展。
第4步-解析Superset中包含的GeoJSON文件
由于GitHub正确地呈现了Superset中包含的所有GeoJSON文件,因此我最初认为这些GeoJSON文件是正确的。但是为什么我的GeoJSON文件不能工作呢?一定有什么地方出了问题。
我从超集存储库中复制了一个GeoJSON文件,并在Geojson.io上对其进行了解析,令我惊讶的是,它没有在Geojson.io上呈现。
我得到了以下错误,“多边形和多重多边形应遵循右手规则”。所以Superset中的GeoJSON文件有问题,我从Humdata下载的文件也有问题。
为了寻找这个错误,我在StackOverflow上发布了一篇关于2016年发布的GeoJSON规范的帖子,该规范要求所有的多边形都应该按顺时针方式排序。旧的2008年的GeoJSON非正式规范没有这个规则。
线性环必须遵循关于其边界面积的右手法则,即外部环是逆时针方向,而孔是顺时针方向。
这意味着Superset GeoJSON文件打破了这一规则,并以逆时针方式排序。即使当前的GeoJSON文件是按照右手规则发布的,而ApacheSuperset要求GeoJSON文件违反右手规则,而GitHub并不关心GeoJSON文件是否遵循右手规则并不分别呈现它们。
我必须颠倒坐标的顺序,而不是像前面那样颠倒纬度和经度。有很多在线工具可以让你纠正这个问题。要使一个不遵循右手规则的GeoJSON遵循右手规则。但我没有找到打破这一规则的工具。
因此,作为我一贯的规则破坏者,我不得不再一次编写一个简单的脚本来颠倒坐标的顺序。我在下面与任何人分享,以使用和转换遵循右手规则的GeoJSON文件,以违背规则并逆时针。
第5步-转换GeoJSON文件以违反右手规则
我正在分享我用来转换GeoJSON文件以违反右手规则的Java脚本。如果任何人想要在Superset中包括国家地图,他们可以使用此脚本转换GeoJSON文件,以违反右手规则并将它们导入Superset。
//导入GeoJSON文件
Const data=Required(“./lk.json”);
Const{WriteFileSync,ReadFileSync}=Required(“fs”);
//颠倒坐标顺序
For(令index=0;index
现在,我将这个逆时针顺序的GeoJSON文件包含到Superset中,它最终正确地呈现了地图。
步骤6-导入符合以下条件的GeoJSON文件
将刚创建的GeoJSON文件保存在的Country文件夹中传统-插件-图表-国家/地区地图
插件。它位于Superset/superset-frontend/plugins/legacy-plugin-chart-country-map/src/
文件夹。
然后通过修改中的Country.ts文件来导入您刚刚保存的GeoJSON文件传统-插件-图表-地图-国家/地区
插件,它位于Superset/superset-frontend/plugins/legacy-plugin-chart-country-map/src/
文件夹。
第7步-构建Superset前端并运行Superset
现在构建超集前端
CD超集/超集-前端/
NPM运行版本
然后重新启动超集服务器
CD超集
源venv/bin/激活
超集运行--p 8088--带线程--重新加载--调试器
现在,您包含的国家/地区将可用于国家/地区地图图表。