gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:06:45 25 4
gpt4 key购买 nike

我正在做@mbostock 的 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 命令无效,因为下载的文件没有“End-of-central-directory 签名”)

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

3) 使用 California Albers 进行 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 大得多(630 万)。在教程中使用的人口普查区 shapefile 中,文件大小从 10 M 增加到 14 M。

更新:问题似乎出在 shp2json 上步骤而不是 geoProject步。看着CaAirBasin.shp.xml,有两组边界,boundinglbounding.就我而言,lbounding教程中使用 100,000 秒范围内的坐标值而不是 (-180, 180),导致投影失败。

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

谢谢。

最佳答案

您的 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 指向下方。

关于d3.js - shp2json 生成边界和坐标不在​​ (-180,180) 范围内的 GeoJSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43416774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com