我一直在關注「讓我們製作地圖」教程https://bost.ocks.org/mike/map/,但是在教程中間,繪製路徑失敗,出現關於topojson.feature()的錯誤不是函數。topojson.feature with topojson v2
的script.js:14未捕獲的類型錯誤:topojson.feature不是函數(...)
(匿名功能)@的script.js:14
(匿名功能)@ d3.min.js:6
叫@ d3.min.js:6個
機智小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>
\t <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>
本來我懷疑問題是與topojson文件我已經轉換Pathfile-GeoJSON的-TopoJSON,我已經將其命名爲uk.js按照教程進行測試。 如這裏的答覆中提到的另一種暗示: https://github.com/topojson/topojson/issues/236 但是改變發行後基本保持一致,並與代uk.json我creted自己後證實: https://bost.ocks.org/mike/map/uk.json
謝謝你的提醒,錯誤消失,雖然導致了另一個錯誤抱怨「道」沒有被定義,經過一番實驗,並補充說: var subunits = topojson.feature(uk,uk.objects.subunits); 在d3調用之前修復了「路徑未定義」錯誤,但開始抱怨未定義uk。 這些錯誤是否也是由topojson v2中的變化引起的? 請讓我知道如果我失去了一些東西。 –
您使用的是d3 v4嗎?在v4中有一些API更改,例如'd3.geo.path'現在是'd3.geoPath'。如果您的'd3.json'調用無法加載它,'uk'沒有被定義應該只是一個問題。你能用新代碼更新你的問題代碼嗎? –
是的,我目前使用的版本是4.4.0 爲了更好的格式,我已經在這裏上傳了代碼: http://jsfiddle.net/syj4jhes/11/ –