使用d3-geo的CLI(和其他一些东西)创建日本丰田市的人口密度图-第1部分

下一步是正确投影我们的数据。 当我说项目时,我的意思是选择一个您可能听说过的投影,例如墨卡托或阿尔伯斯。 您没有听到的是,有许多这样的预测用于世界不同地区和不同目的。 我们现在要投影数据,因为显示预先投影的数据要比使用浏览器在浏览器中显示时正确地投影数据更快。 有很多方法可以投影您的数据,老实说,我实际上在为该项目正确投影数据时遇到了一些问题。 我在这里显示的方式与Mike Bostock在他的教程中显示的方式相同,使用d3的终端命令。 与其他人相比,这种方法确实很痛苦,但是当我们将其导出为svg图像时,它的确使我们能够将地图拟合到边界框中。 因此,让我们安装适当的d3工具:

  npm install -g d3-geo-projection 

现在,我们将使用的投影是EPSG:3099。 这是一个专门用于显示Toyota所属日本地区中尺度地形的视图。如果您正在寻找其他地理区域的特定投影,则“空间参考”网站将是一个不错的资源。 不幸的是,在d3中没有选项可以简单地将投影标识符输入到其中,相反,我们需要深入研究其规格并提取必要的信息。 就像我说的那样,有点痛苦,但这就是我们要做的。 这就是该命令最终的结果:

  geoproject'd3.geoTransverseMercator()。rotate([-135,0])。fitSize([960,960],d)' toyota-proj.json 

上面有一点解释:’geoproject’是我们刚刚安装的工具之一。 在EPSG:3099规范中,它声明使用的投影是“横向墨卡托”,因此我们将其作为d3投影放入。 我们采用“中央子午线”和“原点纬度”值,并将它们放在d3的“ rotate()”函数中,中央子午线为负数。 “ fitSize()”功能是此处地理工程最有用的功能,它使我们的数据适合960 x 960边界框。

太好了,现在我们有一个正确计划的Toyota GeoJSON文件! 让我们通过使用另一个d3 cli命令为其创建svg图像来对其进行查看:

  geo2svg -w 960 -h 960  toyota-proj.svg 

下一步是将这些数据转换为易于使用和在命令行中进行编辑的格式。 为此,我们将使用ndjson-cli,这是一个命令行模块,用于将JSON文件转换为以换行符分隔的JSON文件(NDJSON)。 基本上是JSON格式,因此每一行都是一个值。 在这种情况下,我们的GeoJSON文件的每一行都是一个功能(功能是GeoJSON术语)。 首先,让我们安装ndjson-cli:

  npm install -g ndjson-cli 

现在,根据我们的数据创建NDJSON格式的文件,将其每行拆分为一个功能:

  ndjson拆分'd.features' toyota.ndjson 

这不仅方便处理数据,而且可读性也更高: