是否有一种方法可以更改Topojson文件中的投影



我正在尝试创建一个使用Geoalbersusa投射的topojson文件,该文件源自美国人口普查的ZCTA(本质上是邮政编码(Shapefile。我能够使用指定的地图成功地在出色的https://medium.com/@mbostock/@mbostock/@mbostock/@mbostock/@mbostock/@mbostock/@mbostock/@mbostock/command-cart-1-897aa8f8ca2c中成功浏览了示例,现在我尝试获得相同的结果,使用邮政编码级别的shapefiles。

由于文件的大小和文件中的字符串的长度,我一直陷入各种问题。虽然我能够创建一个Geojson文件和一个Topojson文件,但我无法将其提供给我想要的Geoalbersusa投影。我希望找到一些可以将当前的Topojson文件转换为带有Geoalbersusa投影的Topojson文件,但我无法找到任何方法。

我知道可以在浏览器中以编程方式进行操作,但是我阅读的所有内容都表明,如果首先可以在文件本身中完成尽可能多的性能。

尝试1:我能够使用shp2json成功地将zcta级的shapefile转换为geojson文件(如Mike Bostock的示例中(,但是当我尝试运行Geoproject(来自D3-Geo-Procotdoction(时,我会得到与错误相关的错误弦长的长度。在节点(使用NPM(中,我安装了D3-Geo预测(NPM安装-G D3-GEO预测(,然后运行以下内容:

geoproject" d3.Geoalbersusa(("<us_zips.geojson> us_zips_albersusa.json

我遇到错误,说"错误:无法创建比0x3fffffe7字符更长的字符串"

尝试2:我使用了ogr2ogr(https://gdal.org/programs/ogr2ogr.html(创建Geojson文件(而不是SHP2JSON(,然后跑步尝试运行与上面的相同的地理标准,并获得相同的地理位置代码错误。

尝试3:我使用ogr2ogr创建了geojson序列文件(而不是geojson文件(,然后运行geo2topo从geojsons文件中创建topojson文件。尽管这成功创建了topojson文件,但它仍然不包含geoalbersusa投影。

我从相当钝的ogr2ogr文档中得到可以使用-a_srs指定输出投影,但我无法确定自己的寿命,弄清楚如何指定能给我带来Geoalbersusa投影的东西。我发现此参考https://spatialreference.org/ref/sr-org/44/,但我认为这会让我成为Albers,它可能会砍掉阿拉斯加和夏威夷,这不是我想要的。

这里有什么建议吗?我希望我能找到一种方法来更改topojson文件本身中的投影。似乎这可能是可以在较早版本的topojson中完成的(请参阅投影topojson的方法吗?(,但我现在看不到任何方法。

不是一个答案,而是评论。

所以,我只谷歌搜索了" 0x3fffffe7",并在随机的github/nodejs项目上找到了此评论,并且基于阅读它,我的直觉是节点的东西和/或您使用的D3东西正在减少您的整个ZCTA级shapefile降至....存储在内存中的一个字符串!对于具有如此细微的细节的大陆规模地图,这是不好的。

此外,发表评论的人建议,在这种情况下,OP将需要另一种方法将其数据集介绍给客户。(我想哪个是浏览器?(在您的情况下,如果您查询每个州的Zips集合到单个shapefile中(ogr2ogr可以使用ogr-sql可以做到这一点(,它会给您5个不同的shapefiles。然后,对于每一个,将它们通过您的转换来获取JSON/GEAALBERS。要测试这个概念,请尝试仅导出一个状态,看看其他所有事物是否按预期工作。

话虽如此,我担心您对该项目的方法具有不可行的UI/架构期望:我只是认为您不能将那么多的Geodata放在浏览器Div中!我希望Div,全屏有多大?!?

我的建议是考虑另一种显示数据的方法。例如,一个插图到"选择您的状态",然后单击状态将主div缩放到该状态的较大视图,并同时拉下,并使用使用您准备的50个文件,并使用使用该文件准备的50个文件来撤下该状态的randers我上面提到的策略。这有意义吗?

这是我期望如何将OGR_SQL应用于您的方案的快速示例,适合:

ogr2ogr idaho_zcta.shp USA_zcta.shp -sql "SELECT * FROM USA_zcta WHERE STATE_NAME = 'ID'"

参数如下:

  • idaho_zcta.shp<这是您的新文件
  • USA_ZCTA.SHP<这是您的源shapefile
  • -sql<这标志着ogr_sql查询表达式

至于查询本身,一些提示。首先,将整个查询字符串用双报价包裹。如果发生了一些奇怪的事情,请尝试在查询的开始和结尾添加前导和尾随空间,例如..

" SELECT ... 'ID' "

我知道这很奇怪,但是我曾经有这样的情况。

第二,相对于查询,表名称与ShapeFile名称相同,仅没有" .shp"文件扩展名。我不记得ShapeFile名称和查询字符串的表名之间是否存在案例敏感性。如果您遇到问题,请给出ShapeFile和所有小写名称,并在SQL中使用小写。

至于您的投影转换 - 您自己在那里。Geoalbersusa看起来不是一个行业标准(即EPSG编码(,并且是D3特定的,专门用于浏览器。因此,OGR2OGR不会处理它。但是我同意事先转换数据的策略。希望您已经研究的转换管道可以使用,如果您只有更小的(即国家规模(数据集来浏览它。

祝你好运。

最新更新