2016-10-15 40 views
0

我有一層點和一層線。圖層由jbuilder創建,Leaflet顯示它。 我可以單獨創建和顯示圖層,但不能一起顯示。 對於一個層,map.js具有這部分用jbuilder構建多個圖層

var featureLayer = L.mapbox.featureLayer() 
        .loadURL('map/map_data.geojson') 
        .addTo(map); 
featureLayer.on('ready', function(e) { 
    map.fitBounds(featureLayer.getBounds()); 
}); 

map_controller.rb

def map_data 
    start = '1895-01-01' 
    start = start.to_date 
    finish = (start + 3.year) 
    @lines = RestoResidLine.where(resto_date: start..finish).select("id, person_id, resto_loc_id, resid_loc_id, resto_name, resto_date, title_resto, resid_date, title_resid, long_resto, lat_resto, long_resid, lat_resid") 
end 

map_data.json.jbuilder

json.type "FeatureCollection" 
json.features @lines do |line| 
    if (line.long_resto && line.long_resid) 
    json.type "Feature" 
    json.geometry do 
     json.type "LineString" 
     json.coordinates [[line.long_resto, line.lat_resto], [line.long_resid, line.lat_resid]] 
    end 
    end 
end 

map_data.json是可用的map.js。但是我不明白Rails的所有這些方面的魔力。

我想要第二個圖層。我首先嚐試在控制器中添加第二個json.features @points do |line|...end,調用@lines。但只有最後一個出現。我認爲他們可能會連接。我可以改變@ ...的定義以引入所有需要的信息,這將是一個解決方案;但邏輯會很難看。

所以,我試圖創建另一個文件point_data.json.jbuilder,並增加map.js

var featureLayer = L.mapbox.featureLayer() 
        .loadURL('map/point_data.geojson') 
        .addTo(map); 

果然point_data.json被建立,但它是一個2400行的HTML <title>Action Controller: Exception caught</title>map_data.json構建並正確顯示。

這是一個命名問題嗎?要麼?我對Rails,ActiveRecord和JavaScript Leaflet比較陌生。

代碼:https://bitbucket.org/MtnBiker/crores5/ 我會嘗試上傳該網站,以便您可以在(在)動作中看到它。在Heroku上沒有正確加載。

這不能那麼難。謝謝。

回答

0

我還沒有設置路線來找到point_data,顯然jbuilder需要這個。

get 'map' => 'map#index' 
get 'map/map_data', :defaults => { :format => 'json' } 
get 'map/point_data', :defaults => { :format => 'json' } 
get 'map/line_data', :defaults => { :format => 'json' } 

前兩個已經存在了,但我忘了補充後兩個。我現在正在使用後兩種。第一個是原始的,我將它分成這兩個。什麼幫助挖時,四周的地圖不同的工作Heroku上比在本地主機

部分忘了這件作品。