2012-11-29 61 views
0

我特林繪製使用以GeoJSON d3.js地圖,但路徑產生看起來像這樣:爲什麼在嘗試使用D3.js繪製地圖時獲取NAN數組?

<path d="MNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,‌​NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,N‌​aNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,Na‌​NLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaN‌​LNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNL‌​NaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLN‌​aN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNLNaN,NaNZ"> 

的代碼和數據是在該要點: https://gist.github.com/4157853

我可以加載QGIS的數據很好。

有沒有人知道是什麼原因造成的?

回答

3

您在墨卡託投影中指定偏移量的方式看起來不正確。該projection.translate方法需要兩個元素的數組:

https://github.com/mbostock/d3/wiki/Geo-Projections#wiki-mercator_translate

所以不是:

proj.translate(-43.8,-23.2).scale(10); 

你需要說:

proj.translate([-43.8,-23.2]).scale(10); 

- 編輯 -

查看projection.translate的來源:https://github.com/mbostock/d3/blob/3.0/src/geo/projection.js#L139

projection.translate = function(_) { 
    if (!arguments.length) return [x, y]; 
    x = +_[0]; 
    y = +_[1]; 
    return reset(); 
    }; 

如果參數_不是數組然後+_[0]將返回NaN因此xy將變得NaN秒。 (這是因爲試圖從數字中獲得一個元素(例如213 [0])返回undefined並且將undefined轉換爲數字(例如+未定義)將產生NaN。)

+0

感謝提示,但這並不能解釋NANs – fccoelho

+0

爲什麼它不解釋NaN?投影函數參與將GeoJSON結構轉換爲路徑字符串;所以如果配置錯誤,它將對路徑字符串產生影響。將偏移參數更改爲2元素數組時發生了什麼?當我拿走你的代碼並做出這些改變時,它產生了有效的路徑;在你的情況下,它沒有? – nautat

+0

在編輯的答案中查看更多詳細信息爲什麼你會在字符串中看到NaN。 – nautat

-1

如果您在要點中發佈的代碼是您嘗試運行的所有內容,那麼您在data.json中顯示的數據不會在任何地方加載。無論如何,您的draw函數正在處理由變量map(第16行)定義的數據,該變量指的是未在任何位置設置的變量simulation。即使這樣做,第34行然後引用作爲json傳入的對象的features屬性,map不具有此屬性。

總之,您需要將您在要點中發佈的JSON傳遞給繪圖函數。那麼它可能會工作。如果您沒有將有效數據傳遞給d3 SVG幫助程序,那麼您會得到一堆NaN

+0

這不是顯而易見的。這是Web應用程序的一部分,如果仔細觀察,您會看到插入了JSON的模板標記。我修改了要點並添加了最終生成的HTML,以便您可以檢查JSON。 – fccoelho

+0

爲了進一步壓制任何疑惑,我可以檢查firebug中的變量* map *,並且看到它實際上被解釋爲具有期望結構的對象。 – fccoelho

相關問題