topojson.feature 使用 topojson v2

topojson.feature with topojson v2

我一直在关注 "let's make a map" 教程 https://bost.ocks.org/mike/map/,但是在教程进行到一半时,绘制路径失败并出现关于 topojson.feature() 不是函数的错误。

script.js:14 未捕获类型错误:topojson.feature 不是函数(…)
(匿名函数)@script.js:14
(匿名函数)@d3.min.js:6
呼叫@ d3.min.js:6
e@d3.min.js:6

script.js:

var width = 960,
    height = 1160;

var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);

d3.json("js/uk.json", function(error, uk) {
  if (error) return console.error(error);
  console.log(uk);
  
  svg.append("path")
  .datum(topojson.feature(uk, uk.objects.subunits))
  .attr("d", d3.geo.path().projection(d3.geo.mercator()));
});

HTML 包括脚本:

<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.0/d3.min.js"></script>
<!DOCTYPE html>
<html lang="en" >
    <head>
       <meta charset="utf-8" />
       <title>Map test</title>
    <link href="css/main.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
      <script src='js/jquery.js'></script>
      <script src='js/d3.min.js' charset="utf-8"></script>
      <script src='js/topojson.js'></script>
      <script src="js/script.js" type="text/javascript"></script>  
    </body>
</html>

最初我怀疑问题出在我转换 Pathfile-GeoJSON-TopoJSON 的 topojson 文件上,我将其命名为 uk.js 以便在遵循教程时进行测试。 此处回复中提到的另一个提示: https://github.com/topojson/topojson/issues/236 但是,更改后问题仍然存在,并在替换 uk.json 后得到确认,我认为自己是: https://bost.ocks.org/mike/map/uk.json

您缺少 topojson 客户端文件,这些文件已从 v2 中的基本 topojson 代码中分离出来。如果您在代码中包含以下脚本,它应该可以工作:

<script src="https://unpkg.com/topojson-client@2"></script>