2013-08-02 14 views
23

Tôi đang sử dụng plugin https://github.com/Leaflet/Leaflet.draw và tôi đang cố gắng tìm hiểu cách tôi có thể truy xuất loại lớp của lớp đã chỉnh sửa.Leaflet.draw truy xuất loại lớp khi vẽ: sự kiện đã chỉnh sửa

Trên sự kiện draw:created, tôi có layerlayerType, nhưng trên draw:edited (Được kích hoạt khi lưu tất cả chỉnh sửa), tôi nhận được danh sách các lớp đã được chỉnh sửa.

Các draw:created kiện

map.on('draw:created', function (e) { 
    var type = e.layerType, 
     layer = e.layer; 

    if (type === 'marker') { 
     // Do marker specific actions 
    } 

    // Do whatever else you need to. (save to db, add to map etc) 
    map.addLayer(layer); 
}); 

Các draw:edited kiện

map.on('draw:edited', function (e) { 
    var layers = e.layers; 
    layers.eachLayer(function (layer) { 
     //do stuff, but I can't check which type I'm working with 
     // the layer parameter doesn't mention its type 
    }); 
}); 

Cảm ơn bạn đã dành thời gian.

Trả lời

29

Bạn có thể sử dụng instanceof(docs here).

map.on('draw:edited', function (e) { 
    var layers = e.layers; 
    layers.eachLayer(function (layer) { 
     if (layer instanceof L.Marker){ 
      //Do marker specific actions here 
     } 
    }); 
}); 
17

Cẩn thận khi sử dụng instanceof. Leaflet.draw plugin sử dụng tiêu chuẩn Leaflet's L.Rectangle. Hình chữ nhật của Leaflet mở rộng Polygon. Đa giác mở rộng Polyline. Do đó, một số hình dạng có thể cung cấp cho bạn kết quả không mong muốn bằng cách sử dụng phương pháp này.

var drawnItems = new L.FeatureGroup(); 
map.addLayer(drawnItems); 

... add layers to drawnItems ... 

// Iterate through the layers  
drawnItems.eachLayer(function(layer) { 

    if (layer instanceof L.Rectangle) { 
     console.log('im an instance of L rectangle'); 
    } 

    if (layer instanceof L.Polygon) { 
     console.log('im an instance of L polygon'); 
    } 

    if (layer instanceof L.Polyline) { 
     console.log('im an instance of L polyline'); 
    } 

}); 

Làm cách nào để tìm ra loại hình dạng?

var getShapeType = function(layer) { 

    if (layer instanceof L.Circle) { 
     return 'circle'; 
    } 

    if (layer instanceof L.Marker) { 
     return 'marker'; 
    } 

    if ((layer instanceof L.Polyline) && ! (layer instanceof L.Polygon)) { 
     return 'polyline'; 
    } 

    if ((layer instanceof L.Polygon) && ! (layer instanceof L.Rectangle)) { 
     return 'polygon'; 
    } 

    if (layer instanceof L.Rectangle) { 
     return 'rectangle'; 
    } 

}; 
+1

Không nên tốt hơn để đảo ngược thứ tự? test Rectangle -> return, test Polygon -> return, test Polyline -> return – Don

+0

Cảm ơn bạn đời !! Đã bị mắc kẹt, tự hỏi tại sao Polyline của tôi được tìm thấy là một Đa giác .. Tôi hiểu tại sao! Thanksssssssss –

Các vấn đề liên quan