2017-08-13 35 views
5

我有一些地理邊界,我have a GeoJSON endpoint for加入GeoJSON到另一個GeoJSON

我也有一些變量存儲在一個單獨的GeoJSON endpoint,它沒有座標,但確實有一個變量,我想稍後以D3爲主題設計一個地圖。這是每週更新一次。

這兩個響應中都有一個公用標識,名爲lga_name(本地政府區域名稱),我試圖加入該標識。似乎有很多關於如何使用CSV加入GeoJSON的示例,但GeoJSON與GeoJSON不兼容。

我曾試圖嘗試put together an app,但仍然掙扎着加入。

// Load LGAs from ArcGIS Online (The GeoJSON with geoms) 
d3.json("the url to the Geoms", function(error, data) { 

// Load Crash Stats from ArcGIS Online (the total persons involved, summarised down to LGA names) 
d3.json("the url to the table", function(error, data2) { 

     var lga = data.features; 
     var crashStats = data2.features; 

     // Not working 
     var joined = lga.forEach(function(item) { 
      item.properties.LGA_NAME = crashStats[item.properties.lga_name]; 
     }); 

任何人都可以給我一些指導,幫助讓我感動嗎?只是想了解更多關於D3和Javascript的更多信息。

回答

3

你的數據質量問題會引起一些麻煩:

  1. 名稱(lga_name)的特點是在一個JSON全部大寫,而不是功能的其他
  2. 名稱包括字符/短語,如「(」或「 - 」或「Greater」在一個json中,但不在另一箇中
  3. 在其他json中有功能但沒有條目(未合併的Vic)
  4. 似乎在json擁有非地理屬性(你已經聲明你想要j OIN,不總結的任何數據,我的解決辦法只能使用從屬性JSON一個條目(一個無座標))

你可以達到你的目的(使用2號JSON得到「變量,我想以後主題風格地圖」含)不同的方式,我將在這裏使用兩種不同的方法:

  1. 創建保存所有的功能和屬性
  2. 創建從座標JSON的特點之一有效GeoJSON的,和他們的風格基於json使用名稱作爲通用標識符的屬性。

創建保存所有的功能和屬性

使用d3.map(),我們可以輕鬆地添加非地理JSON的性質有一個有效GeoJSON的:

var lookup = d3.map(data.features, function(d) { return d.properties.lga_name; }); 

geographic.features.forEach(function(d) { 
    d.properties = lookup.get(d.properties.LGA_NAME).properties; 
}); 

現在你有一個以GeoJSON它具有一個json的屬性,以及另一個的座標。

由於您的標識符不是標準化的,我創建了一個函數來標準化兩個文件之間的名稱以使數據正常工作。我還添加了一個檢查來確保給定功能的屬性存在。看到這個block

創建要素有了一個JSON和風格基礎上的其他JSON

你並不需要真正加入該數據雖然實現了造型。使用d3.map(),您可以在樣式化時查看每個功能的屬性。例如,你可以風格填補:

var lookup = d3.map(data.features, function(d) { return d.properties.lga_name; }); 

regions.attr("fill",function(d) { 
    return color(lookup.get(d.properties.LGA_NAME).properties.total_pers); 
    }) 

同樣,因爲你的標識不規範,我創建了一個功能來規範這兩個文件的名稱。如上所述,還有一個檢查是否在非地理json中有一個特性(因此也可以使用與樣式配合使用的特性)。看到這個block

+0

非常感謝。這應該讓我在路上。這更像是一個自學的工作,我可能會找到兩個更清晰的數據源。 – Simon