2013-05-30 37 views
8

Tôi có hai lớp geoJson đang được tải - cả hai lớp đều giống nhau cho mục đích thử nghiệm, nhưng được lấy từ hai tệp json khác nhau. Khi tôi bật và tắt các lớp trong bộ điều khiển lớp, thứ tự vẽ của các lớp thay đổi.Thay đổi thứ tự lớp khi bật/tắt lớp

Mọi ý tưởng tại sao điều này xảy ra?

Tôi đã đặt mã của tôi vào một JSFiddle: http://jsfiddle.net/lprashad/ph5y9/10/ và JS là dưới đây:

//styling for watersheds_copy 
var Orange = { 
    "color": "#ff7800", 
     "weight": 5, 
     "opacity": 0.65 
}; 

var Water_Orange = L.geoJson(watersheds_copy, { 
    style: Orange 
}); 

Water_Orange.addData(watersheds_copy); 

//these are blue 
var Water_blue = L.geoJson(watersheds, {}); 
Water_blue.addData(watersheds); 

//This sets the inital order - last in layer list being on top. Except minimal - tile layer is always on bottom 
var map = L.map('map', { 
    center: [41.609, -74.028], 
    zoom: 8, 
    layers: [minimal, Water_Orange, Water_blue] 
}); 

var baseLayers = { 
    "Minimal": minimal, 
     "Night View": midnight 
}; 

//This controls the order in the layer switcher. This does not change draw order 
var overlays = { 
    "Water_Orange": Water_Orange, 
     "Water_blue": Water_blue 
}; 
L.control.layers(baseLayers, overlays).addTo(map); 

LP

+0

Tôi không thấy bất cứ điều gì trên jsfiddle của bạn. –

+0

JSFiddle của bạn không hoạt động. Tuy nhiên, các lớp của bạn không nên thay đổi thứ tự khi bật/tắt bằng điều khiển Lớp. Xem tùy chọn 'autoZIndex' trong phần L.Control.Layers trong API: http://leafletjs.com/reference.html#control-layers. Có cơ hội nào bạn đang thay đổi các lớp ngoài tầm kiểm soát này không? –

+0

Tôi đã sửa JSFiddle: http://jsfiddle.net/lprashad/ph5y9/, cảm ơn bạn. Tôi cũng đã thử autoZindex được đặt thành true, nhưng điều này không giúp ích gì. Nếu bạn tắt cả hai lớp đầu nguồn, sau đó bật lớp màu xanh, sau đó là lớp màu da cam trong Kiểm soát lớp - bạn sẽ thấy các lớp kết thúc theo thứ tự vẽ khác với khi bản đồ khởi tạo. – Lee

Trả lời

0

Nó không cụ thể cho lớp L.GeoJson. Theo như tôi có thể nói, đó là sự thật của tất cả các lớp Leaflet với điều khiển lớp. Lớp cuối cùng được bật chỉ đơn giản là trên đầu trang. Tôi không nghĩ đây là lỗi. Đó là hành vi dự đoán mà tôi sử dụng và phụ thuộc vào thời điểm tôi thiết kế bản đồ với điều khiển lớp ...

+0

Tôi nghĩ rằng người dùng sẽ thấy rằng rất khó hiểu khi cố gắng nhấp vào các điểm nằm ở dưới cùng của đa giác. Các lớp trên cùng trong danh sách được mong đợi bởi người dùng để vẽ trên đầu (như trong một sản phẩm phần mềm máy tính để bàn GIS). – jbchurchill

1

Ít nhất là trên 0.7.2, tôi phải sử dụng bringToFront trong gọi lại map.on('overlayadd'). autoZIndex: false không hoạt động trong trường hợp của tôi. A comment on this issue có thể giải thích lý do.

2

Trong khi tìm kiếm tôi đã xảy ra khi trang web này cho thấy một số mã Tờ rơi: http://ruby-doc.org/gems/docs/l/leaflet-js-0.7.0.3/lib/leaflet/src/control/Control_Layers_js.html

Trong đó tôi thấy tình trạng này để áp dụng autoZIndex:

if (this.options.autoZIndex && layer.setZIndex) { 
      this._lastZIndex++; 
      layer.setZIndex(this._lastZIndex); 
    } 

TileLayer là loại lớp chỉ có chức năng setZIndex, vì vậy rõ ràng autoZIndex chỉ hoạt động ở đó.

Tôi không chắc điều này làm phiền tôi nhiều hơn. Hạn chế đáng kinh ngạc này hoặc thực tế là tài liệu của Leafet không chỉ ra nó.

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