首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在GeoJson v4中呈现的D3文件不合适。

在GeoJson v4中呈现的D3文件不合适。
EN

Stack Overflow用户
提问于 2017-04-12 20:45:30
回答 1查看 339关注 0票数 2

我试图使用GeoJSON数据呈现一个覆盖的地图。我已经将数据加载到QGIS和mapshaper中,并且它正确地呈现;但是,我的JavaScript代码并没有呈现我所期望的结果(整个SVG都被填充了,这使我认为这是一个缩放问题)。

我相信我计算比额表的代码是准确的。

代码语言:javascript
复制
var bounds = path.bounds(us),
        scale = .95 / Math.max((bounds[1][0] - bounds[0][0]) / width, (bounds[1][1] - bounds[0][1]) /height),
        translation = [(width - scale * (bounds[1][0] + bounds[0][0])) / 2, (height - scale * (bounds[1][1] + bounds[0][1])) / 2];

我已经将我的示例项目上传到柱塞https://plnkr.co/edit/jzXRaOs2xXpZuJraMq3p

预期结果应该如下所示:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-12 22:54:14

问题在于你的地理位置:

代码语言:javascript
复制
... coordinates":[[[1983816.6475302426,681422.0990409602], ...

这个数据是投影数据,也就是说它使用二维笛卡儿坐标系。D3投影使用lat长对(三维地球上的点),其值不超过东西向180度和南北90度。D3中lat长对应该使用的特定椭球是在WGS84基准中定义的。D3期望地理数据位于这个坐标空间内。

如果您想使用您在问题中引用的自动缩放函数,那么您将需要重新设计数据,使其位于WGS84中(或者,找到已经使用此空间参考系统的美国geojson )。像映射器这样的工具可以帮助在线转换数据(尽管在应用任何转换之前,您可能需要指定数据使用的空间引用系统)。

另一种选择是使用geoTransform (geo.transform in v3)来缩放您已经预测的数据。由于您的数据在笛卡儿平面上已经是二维的,所以您可以简单地创建一个函数来缩放它以匹配您的svg坐标空间。我还没有考虑过使用自动标度函数,但这应该是可能的。geo.transform的一个例子在这里找到(具有类似的地理特征集):

https://bl.ocks.org/andrew-reid/496078bd5e37fd22a9b43fd6be84b36b

(由于mapshaper和qGIS预期有多个不同的空间参考系统,如果在数据中指定了投影,或者将投影指定为普通x,y数据,它们通常会显示这些数据,这就是为什么它似乎在其他平台上工作,但在假定所有数据都是长对的d3投影中不起作用)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43379342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档