shp2json生成GeoJSON,其边界和坐标不在​​(-180,180)范围内

时间:2017-04-14 18:00:11

标签: d3.js geojson topojson

我在命令行制图上做@ mbostock' s tutorial 1.这就是我所做的:

1)下载zip文件

wget https://www.arb.ca.gov/ei/gislib/gislib.htm/ca_air_basins.zip (来自California Air Resources Board site

2)点击.zip文件手动解压缩unzip命令不起作用,因为下载的文件没有'中心目录签名')

2)将shapefile转换为GeoJSON shp2json CaAirBasin.shp -o ca.json

3)使用California Albers(在CaAirBasin.prj文件中指定)进行GeoJSON投影:

geoproject 'd3.geoConicEqualArea().parallels([34, 40.5]).rotate([120, 0]).fitSize([960, 960], d)' < ca.json > ca-albers.json

结果: 我得到的ca-albers.json(223M)比ca.json(6.3M)大得多。在本教程中使用的人口普查区shapefile中,文件大小从10增加到14 M.

更新: 问题似乎是shp2json步而不是geoProject步。查看CaAirBasin.shp.xml,有两组边界,boundinglbounding.在我的情况下,使用lbounding和100,000s范围内的坐标值,而不是( - { - 1}} 180,180)在教程中,使投影失败。

有什么好的下一步 - 是否有shp2json的替代方案可以适用于我的案例?或者如何将我的边界/坐标转换为适当的(-180,180)?

谢谢。

1 个答案:

答案 0 :(得分:6)

您的shapefile已经投射过了。通过d3.geoConicEqualArea传递它,你将它投射两次; d3.geoConicEqualArea期望WGS84(以度为单位的经度和纬度)作为输入,但是你给它投影坐标。

你可以通过查看PRJ文件或者通过查看shp2json生成的几何体的坐标来判断你的shapefile是否被投射:第一点是[-298228.39936644124,437516.87775637675],这远远超出预期的范围经度和纬度的[±180°,±90°]。

不是将几何体重新投影到新投影,最简单的方法就是使用它已经存在的投影。您需要做的就是平移和缩放以适应所需的960×960显示尺寸。您可以使用d3.geoIdentity

geoproject 'd3.geoIdentity().reflectY(true).fitSize([960, 960], d)' < ca.json > ca-albers.json

设置identity.reflectY也将修复几何体的垂直方向:GIS约定是+ y 指向,但Canvas和SVG约定是+ y 指出。