如何使用Leaflet显示LineString?

时间:2014-10-31 01:07:32

标签: ruby-on-rails geocoding leaflet

我的数据库中有管道模型,它有几何属性(LineString)。我把它添加到pipes_controller.rb:

def index
  @pipes = Pipe.all
  @geojson = Array.new

  @pipes.each do |pipe|

    @geojson<< {
      type: "FeatureCollection",
      crs: { type: "name", properties: { name: "urn:ogc:def:crs:OGC:1.3:CRS84" } },
      features: [
        type: 'Feature', 
        properties: {
          geometry: {
            type: 'LineString',
            coordinates: pipe.get_coordinates
          },
          stroke: "#1087bf"
        } 
     ]}
    end
    respond_to do |format|
      format.html
      format.json { render json: @geojson }  # respond with the created JSON object
  end
end

这是pipes.js文件:

$(document).ready(function() {
  if ($("#pipes_map").length>0) {
    var geojson;
    var map = L.map('pipes_map', {
      center: [42.44, 19.26],
      zoom: 16
    });
    L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
      max_zoom: 22
    }).addTo(map);

    L.geoJson(geojson).addTo(map);
    $.ajax({
      dataType: 'text',
      url: 'http://localhost:3000/pipes.json',
      success: function(data) {
        var myStyle = {
          "color": "#ff7800",
          "weight": 5,
          "opacity": 0.65
        };
        geojson = $.parseJSON(data);
        L.geoJson(geojson).addTo(map);                  
      },
      error : function() {
        alert('Error!');
      }
    })
  }
})

但我的烟斗没有出现在地图上。我究竟做错了什么?也许我的pipes.json结构不合理?还是风格不对?

1 个答案:

答案 0 :(得分:0)

这就是控制器应该是这样的:

def index
@pipes = Pipe.all
@geojson = Array.new

@pipes.each do |pipe|

  @geojson<< {
    type: 'Feature', 
    properties: {
      :category=> pipe.category.name
    },
    geometry: {
      type: 'LineString',
      coordinates: pipe.get_coordinates
    }
  }
end
respond_to do |format|
  format.html
  format.json { render json: @geojson }  # respond with the created JSON object
end

其余的都很好。