我正在尝试创建一个使用 geoAlbersUsa 投影的 topojson 文件,该文件源自美国人口普查局的 ZCTA(本质上是邮政编码)shapefile。我能够使用指定的地图成功通过优秀的https://medium.com/@mbostock/command-line-cartography-part-1-897aa8f8ca2c中的示例,现在我正在尝试获得相同的结果使用邮政编码级别的 shapefile。
由于文件的大小和文件中字符串的长度,我不断遇到各种问题。虽然我已经能够创建一个 geojson 文件和一个 topojson 文件,但我无法给它我想要的 geoAlbersUsa 投影。我希望找到一些东西来将当前的 topojson 文件转换为带有 geoAlbersUsa 投影的 topojson 文件,但我找不到任何方法。
我知道这可以在浏览器中以编程方式完成,但我所阅读的所有内容都表明,如果尽可能多地首先在文件本身中完成,性能将会显着提高。
尝试 1:我能够使用 shp2json(如 Mike Bostock 的示例)成功地将 ZCTA 级 shapefile 转换为 geojson 文件,但是当我尝试运行 geoproject(来自 d3-geo-projection)时,我收到与字符串长度过长有关的错误. 在节点(使用 npm)中,我安装了 d3-geo-projection(npm install -g d3-geo-projection)然后运行以下命令:
地质工程“d3.geoAlbersUsa()”< us_zips.geojson > us_zips_albersUsa.json
我收到错误消息,指出“错误:无法创建长度超过 0x3fffffe7 个字符的字符串”
尝试2:我使用ogr2ogr(https://gdal.org/programs/ogr2ogr.html)创建geojson文件(而不是shp2json),然后尝试运行与上面相同的geoproject代码并得到相同的错误。
尝试 3:我使用 ogr2ogr 创建 geojson 序列文件(而不是 geojson 文件),然后运行 geo2topo 从 geojsons 文件创建 topojson 文件。虽然这成功创建了 topojson 文件,但它仍然没有在生成的 topojson 文件中包含 geoAlbersUsa 投影。
我从 ogr2ogr 的相当迟钝的文档中得到,可以使用 -a_srs 指定输出投影,但我一生都无法弄清楚如何指定可以让我得到 geoAlbersUsa 投影的东西。我找到了这个参考https://spatialreference.org/ref/sr-org/44/但我认为这会让我得到阿尔伯斯,它可能会切断阿拉斯加和夏威夷,这不是我想要的。
这里有什么建议吗?我希望我能找到一种方法来更改 topojson 文件本身中的投影,因为这样可以避免每当我尝试在节点中执行任何需要使用 geojson 文件的操作时遇到的过长字符串问题. 似乎这可能是可以在早期版本的 topojson 中完成的事情(请参阅投影 topojson 的方法?),但我现在看不到任何方法。