d3 Topojson 调试转换
d3 Topojson debugging transformations
是否有通用的 d3/topojson 调试提示?我对这种格式比较陌生,并且通过 d3 为美国各州制作了可视化。 JavaScript 和 d3 适用于我手头的 topojson 文件。但是,当将文件更改为具有更多描述的文件时,没有出现任何错误或问题,但我得到以下结果:
我不想 post 整个 json,因为它很大,但是在处理 d3 中的拓扑 json 可视化时,您是否推荐任何调试实践?我假设错误与转换有关,但我不确定如何处理和补救该问题。
var svg = d3.select("#map1");
var path = d3.geoPath();
svg.append("g")
.attr("class", "states")
.selectAll("path")
.data(topojson.feature(x, x.objects.states).features)
.enter()
更新:没有寻找任何人明确调试我的代码。我需要了解其他项目出了什么问题。但如果这有帮助,这里有一个非常小的整体拓扑样本json:
{"type":"Topology",
"arcs":[[[1071248,837478],[27,35],[64,83],[44,75],[38,57],[42,29],[32,-10],[38,-33],[35,-57],[32,-447],[-10,-33],[-28,6],[-216,188],[-85,81],[-13,26]],... ]
"transform":{"scale":[0.00008503679331736181,0.00005379922226014208],
"translate":[-179.148909,-14.548699000000001]},
"objects":{"states":{"type":"GeometryCollection",
"geometries":[ {"arcs":[[[0]],[[1]],[[2]],[[3]],[[4]],[[5]],[[6,7,8,9,10]]],
"type":"MultiPolygon",
"properties":{"STATEFP":"01",
"STUSPS":"AL",
"NAME":"Alabama"}},...
Update2:这是有效的拓扑json。
{"type":"Topology",
"bbox":[-56.77775821661018,12.469025989284091,942.7924311762474,596.9298966319916],
"transform":{"scale":[0.009995801851947097,0.005844667153098606],
"translate":[-56.77775821661018,12.469025989284091]},
"objects":{"states":{"type":"GeometryCollection","geometries":[{"type":"Polygon","arcs":[[0,1,2,3,4]],"id":"05089"},....
它们都是拓扑json格式,可以通过mapshaper.org验证,但略有不同。谁能解释一下区别。
显然转换属性刚刚关闭。生成的线条长度是我的 svg 尺寸应有的长度的 1/1000。因为线条有一定的粗细要求,看起来就是一些斑点;地图生成正确。
我想回答我自己的问题,只是尝试使用 topojson 属性,直到它类似于您想要的东西。如果 JavaScript 没有崩溃,则假设地图已正确加载(但可能不符合您的标准)
一般检查清单:
- 确保文件是正确的 topojson 格式(这可以在 mapshaper.org 上确认甚至转换)
- 确保 topojson 文件正确加载。这可以用一些
console.log
的 来测试
- 确保数据特征指向 topojson 的正确对象。对我来说,这是
x.objects.states
- 如果地图加载成功,但看起来不对,请考虑 'transform'
中的异常
是否有通用的 d3/topojson 调试提示?我对这种格式比较陌生,并且通过 d3 为美国各州制作了可视化。 JavaScript 和 d3 适用于我手头的 topojson 文件。但是,当将文件更改为具有更多描述的文件时,没有出现任何错误或问题,但我得到以下结果:
我不想 post 整个 json,因为它很大,但是在处理 d3 中的拓扑 json 可视化时,您是否推荐任何调试实践?我假设错误与转换有关,但我不确定如何处理和补救该问题。
var svg = d3.select("#map1");
var path = d3.geoPath();
svg.append("g")
.attr("class", "states")
.selectAll("path")
.data(topojson.feature(x, x.objects.states).features)
.enter()
更新:没有寻找任何人明确调试我的代码。我需要了解其他项目出了什么问题。但如果这有帮助,这里有一个非常小的整体拓扑样本json:
{"type":"Topology",
"arcs":[[[1071248,837478],[27,35],[64,83],[44,75],[38,57],[42,29],[32,-10],[38,-33],[35,-57],[32,-447],[-10,-33],[-28,6],[-216,188],[-85,81],[-13,26]],... ]
"transform":{"scale":[0.00008503679331736181,0.00005379922226014208],
"translate":[-179.148909,-14.548699000000001]},
"objects":{"states":{"type":"GeometryCollection",
"geometries":[ {"arcs":[[[0]],[[1]],[[2]],[[3]],[[4]],[[5]],[[6,7,8,9,10]]],
"type":"MultiPolygon",
"properties":{"STATEFP":"01",
"STUSPS":"AL",
"NAME":"Alabama"}},...
Update2:这是有效的拓扑json。
{"type":"Topology",
"bbox":[-56.77775821661018,12.469025989284091,942.7924311762474,596.9298966319916],
"transform":{"scale":[0.009995801851947097,0.005844667153098606],
"translate":[-56.77775821661018,12.469025989284091]},
"objects":{"states":{"type":"GeometryCollection","geometries":[{"type":"Polygon","arcs":[[0,1,2,3,4]],"id":"05089"},....
它们都是拓扑json格式,可以通过mapshaper.org验证,但略有不同。谁能解释一下区别。
显然转换属性刚刚关闭。生成的线条长度是我的 svg 尺寸应有的长度的 1/1000。因为线条有一定的粗细要求,看起来就是一些斑点;地图生成正确。
我想回答我自己的问题,只是尝试使用 topojson 属性,直到它类似于您想要的东西。如果 JavaScript 没有崩溃,则假设地图已正确加载(但可能不符合您的标准)
一般检查清单:
- 确保文件是正确的 topojson 格式(这可以在 mapshaper.org 上确认甚至转换)
- 确保 topojson 文件正确加载。这可以用一些
console.log
的 来测试
- 确保数据特征指向 topojson 的正确对象。对我来说,这是
x.objects.states
- 如果地图加载成功,但看起来不对,请考虑 'transform' 中的异常