使用jbuilder构建多个图层

时间:2016-10-15 00:51:27

标签: ruby-on-rails json leaflet mapbox jbuilder

我有一层点和一层线。该层由jbuilder创建,Leaflet显示它。 我可以单独创建和显示图层,但不能一起创建和显示图层。 对于一个图层,map.js部分包含此内容

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上无法正确加载。

这可能很难。谢谢。

1 个答案:

答案 0 :(得分: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上的工作方式与在本地主机上的工作方式不同时,有一部分帮助就是挖掘。

忘了这件作品。