Tờ rơi: Tọa độ container so với tọa độ lớp?


17

Sự khác biệt giữa tọa độ container bản đồ và tọa độ lớp là gì?

Từ những gì tôi thu thập được, tọa độ bộ chứa bản đồ luôn liên quan đến chế độ xem bản đồ và trong khi tọa độ lớp luôn bắt đầu với cùng các giá trị như các cuộn chứa , chúng sẽ thay đổi khi bản đồ được quét.

API đề cập đến tọa độ / điểm:

Câu trả lời:


21

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])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 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>.


1
Man - nếu tôi có thể nâng cấp, bạn sẽ được nâng cấp 100 lần.
Saad Malik

0

EDIT: hóa ra tôi đã sai. Các tọa độ vùng chứa dường như dành cho khung có thể nhìn thấy trong khi tọa độ lớp dành cho diện tích lớn hơn vùng nhìn thấy. Câu hỏi này cần một người hiểu biết hơn tôi để trả lời nó.


1
Alex - Tôi không tin đó là chính xác. Các tọa độ vùng chứa và tọa độ lớp đều được chỉ định bằng pixel từ gốc (phía trên bên trái) của vùng chứa. Tuy nhiên, khi tôi bắt đầu xoay bản đồ, tọa độ / điểm của điểm đánh dấu vẫn giữ nguyên trong khi tọa độ / điểm cho điểm đánh dấu được cập nhật tương ứng với điểm gốc trên cùng bên trái.
Saad Malik

Xin chào @ SimFox3, bạn đã đúng. Và tôi nên đã thử nó trước khi nói bất cứ điều gì! Bây giờ tôi cho rằng điểm lớp là tọa độ được xác định tương đối với một loại 'cửa sổ' được giữ, lớn hơn màn hình. Nó giống như một chế độ xem được lưu trữ trong bộ nhớ cache hơn màn hình. Đó là lý do tại sao tọa độ điểm lớp thay đổi, nhưng không thường xuyên và chỉ khi 'cửa sổ' được di chuyển. Các tọa độ điểm chứa dường như luôn bị giới hạn trong các tọa độ so với chế độ xem hiển thị. Đã nói tất cả những điều đó, rõ ràng tôi không biết nhiều hơn bạn, vì vậy sẽ thật tuyệt nếu một nhà phát triển Tờ rơi. có thể chip trong!
Alex Leith
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.