2017-04-14 146 views
3

我做@ mbostock的tutorial在命令行制图1.这是我做了什么:shp2json产生GeoJSON的与边界和(-180,180)没有坐标范围

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)转换shape文件到GeoJSON的 shp2json CaAirBasin.shp -o ca.json

3)请使用加州阿尔伯斯一个GeoJSON的投影(在CaAirBasin.prj文件中指定):

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)大得多。在教程中使用的人口普查shape文件,从10至14 M.

更新文件大小增加: 看来问题是与shp2json步骤代替geoProject步骤。看看CaAirBasin.shp.xml,有两套边界,boundinglbounding.在我的情况下,lbounding和100000s范围内的坐标值被用来作为教程中的(-180,180),使投影失败。

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

谢谢。

回答

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约定是+ Ÿ点,但Canvas和SVG的约定是+ Ÿ百分点。

+0

它的工作原理!感谢您的及时帮助! = d – mlimb