Javascript D3.js-从版本2中的path.area更改为版本4
我正在尝试更新以使用D3.js版本4。到目前为止,一切都进展顺利——我刚刚更新了所有函数,以便将它们写入版本4的扁平名称空间中。例如,它不是Javascript D3.js-从版本2中的path.area更改为版本4,javascript,d3.js,topojson,cartogram,Javascript,D3.js,Topojson,Cartogram,我正在尝试更新以使用D3.js版本4。到目前为止,一切都进展顺利——我刚刚更新了所有函数,以便将它们写入版本4的扁平名称空间中。例如,它不是d3.geo.path(),而是d3.geoPath()。我还做了一些小改动,使代码能够与最新版本的配合使用。例如,它不是topojson.object(topology,geom).coordinates,而是topojson.feature(topology,geom).geometry.coordinates 但我遇到了一个似乎无法解决的问题。文件ca
d3.geo.path()
,而是d3.geoPath()
。我还做了一些小改动,使代码能够与最新版本的配合使用。例如,它不是topojson.object(topology,geom).coordinates
,而是topojson.feature(topology,geom).geometry.coordinates
但我遇到了一个似乎无法解决的问题。文件cartogram.js
有一行内容为var areas=objects.map(path.area)
,其中objects
是TopoJSON特性的集合<代码>路径.区域在D3.js版本2和4中有所不同,我似乎无法协调它们。如果我将其登录到每个版本中,看起来是这样的:
- 版本2:
function(n){返回n&&e.hasOwnProperty(n.type)→e[n.type](n):t}
- 版本4:
function(t){return U_uu(t,r(Ag)),Ag.result()}
在版本4中,它记录错误:
uncaughttypeerror:r不是函数
。当然,我已经在谷歌上搜索了错误以及我试图做的各种描述,但我没有任何运气。提前感谢您的帮助。正如Mark所建议的,您应该使用非精简代码进行调试。中的相关非精简代码如下所示:
path.area = function(object) {
stream(object, projectionStream(pathArea));
return pathArea.result();
};
您的错误表明projectionStream
不是一个函数;它可能没有定义。投影流由设置,如文档所述,您指定的投影必须实现。(设置投影时不会强制执行此错误。尝试使用路径时会延迟抛出此错误。)
这里的问题是D33.x的path.projection支持“回退投影”的概念,这只是一个简单的函数,将经纬度数组作为输入,并返回一个x-y数组作为输出。D33.x会隐式地将其包装在默认的投影对象中,以添加自适应采样和反媒体切割等功能。D3 4.0删除了此功能,迫使您显式:必须实现projection.stream才能使用D3.geoPath
Per:
“回退投影”(当您将函数而不是投影传递给时)不再受支持。对于地理投影,请使用或定义自定义投影。对于任意几何体变换,实现;另见
每当您寻求帮助时,我建议链接到一个演示您的问题的实例,因为一小段代码和描述通常不足以隔离问题。这里不清楚您试图在d3.geoPath中使用什么投影。对于平面变换,您很可能希望使用d3.geoTransform或d3.geointity。对于球面到平面的投影,您需要使用d3.geoProjection或d3.geoProjectionMutator。正如Mark所建议的,您应该使用非精简代码进行调试。中的相关非精简代码如下所示:
path.area = function(object) {
stream(object, projectionStream(pathArea));
return pathArea.result();
};
您的错误表明projectionStream
不是一个函数;它可能没有定义。投影流由设置,如文档所述,您指定的投影必须实现。(设置投影时不会强制执行此错误。尝试使用路径时会延迟抛出此错误。)
这里的问题是D33.x的path.projection支持“回退投影”的概念,这只是一个简单的函数,将经纬度数组作为输入,并返回一个x-y数组作为输出。D33.x会隐式地将其包装在默认的投影对象中,以添加自适应采样和反媒体切割等功能。D3 4.0删除了此功能,迫使您显式:必须实现projection.stream才能使用D3.geoPath
Per:
“回退投影”(当您将函数而不是投影传递给时)不再受支持。对于地理投影,请使用或定义自定义投影。对于任意几何体变换,实现;另见
每当您寻求帮助时,我建议链接到一个演示您的问题的实例,因为一小段代码和描述通常不足以隔离问题。这里不清楚您试图在d3.geoPath中使用什么投影。对于平面变换,您很可能希望使用d3.geoTransform或d3.geointity。对于球面到平面的投影,您需要使用d3.geoProjection或d3.geoProjectionMutator。有用的提示,加载未缩小版本的
d3
以便更好地了解您的错误…Harry,您是否最终为d3.js
版本4创建了一个工作版本的d3.cartogram
?还没有。忙着做其他事情。有用的提示,加载未缩小版本的d3
,以便更好地了解您的错误…哈利,您是否最终为d3.js
版本4创建了一个工作版本的d3.cartogram
?还没有。忙着做其他事情。