2016-12-08 95 views
0

我一直在關注「讓我們製作地圖」教程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

回答

0

你缺少topojson客戶端文件,它們已經從v2中的基本topojson代碼中分離出來了。如果您在代碼中加入下面的腳本,它應該工作:

<script src="https://unpkg.com/[email protected]"></script> 
+0

謝謝你的提醒,錯誤消失,雖然導致了另一個錯誤抱怨「道」沒有被定義,經過一番實驗,並補充說: var subunits = topojson.feature(uk,uk.objects.subunits); 在d3調用之前修復了「路徑未定義」錯誤,但開始抱怨未定義uk。 這些錯誤是否也是由topojson v2中的變化引起的? 請讓我知道如果我失去了一些東西。 –

+0

您使用的是d3 v4嗎?在v4中有一些API更改,例如'd3.geo.path'現在是'd3.geoPath'。如果您的'd3.json'調用無法加載它,'uk'沒有被定義應該只是一個問題。你能用新代碼更新你的問題代碼嗎? –

+0

是的,我目前使用的版本是4.4.0 爲了更好的格式,我已經在這裏上傳了代碼: http://jsfiddle.net/syj4jhes/11/ –