Câu trả lời ngắn
Các phương thức containerPoint bắt đầu từ một yêu cầu tính năng trở lại vào năm 2012 và ngày nay, chúng hơi khó hiểu.
Câu trả lời tốt nhất là mô tả của người duy trì tờ rơi Vladimir Agafonkin:
"layerPoint thực sự là một điểm liên quan đến lớp bản đồ (div chứa gạch và điểm đánh dấu), không phải là thùng chứa bản đồ bên ngoài. Cái bạn cần là map.layerPointToContainerPoint. Nhưng tôi đồng ý rằng không có phương pháp thuận tiện nào để có được nó ngay lập tức, vì vậy hãy lên lịch cho phiên bản tiếp theo. "
Câu trả lời dài
Chi tiết hơn:
Các phương thức chuyển đổi công khai cốt lõi trong Leaflet, mặc dù hiếm khi được các nhà phát triển ứng dụng sử dụng, L.Map.project(latlng [, zoom])
và L.Map.unproject(point [, zoom])
.
Bản đồ web được chia thành một lưới các ô, mỗi ô có cùng số pixel. Ở các mức thu phóng cao hơn, bản đồ được chia thành số lượng ô lớn hơn, với số lượng pixel lớn hơn tương ứng. Do đó, kích thước pixel của bản đồ phụ thuộc vào mức thu phóng.
Điều này có nghĩa là nếu bạn đang loay hoay với cửa sổ demo Leaflet trong trình duyệt của mình, thì đầu ra của L.Map.project` cho một latlng nhất định sẽ chỉ thay đổi nếu bạn phóng to và thu nhỏ.
Kể từ phiên bản mới nhất của Tờ rơi (0.7.3), định nghĩa về các lần L.Map.latLngToLayerPoint
đọc:
latLngToLayerPoint: function (latlng) {
var projectedPoint = this.project(L.latLng(latlng))._round();
return projectedPoint._subtract(this.getPixelOrigin());
}
Ngược lại, L.Map.latLngToContainerPoint
đọc:
latLngToContainerPoint: function (latlng) {
return this.layerPointToContainerPoint(this.latLngToLayerPoint(L.latLng(latlng)));
}
với L.Map.layerPointToContainerPoint
định nghĩa là:
layerPointToContainerPoint: function (point) {
return L.point(point).add(this._getMapPanePos());
}
Phương thức bản đồ riêng _getMapPanePos()
trả về phần bù giữa vị trí bản đồ hiện tại và vị trí của nó khi nó được tạo lần đầu tiên. Điều này chỉ thay đổi trong một pan bản đồ (không phải trong quá trình thu phóng), do đó, sự khác biệt giữa layerPoint và containerPoint tương ứng với một latlng nhất định là layerPoint là vị trí của latlng trong vùng chứa bản đồ <div>
với vị trí ban đầu , trong khi containerPoint là vị trí hiện tại của latlng trong vùng chứa bản đồ <div>
.