OpenLayers: Sử dụng tỷ lệ thay vì độ phân giải


8

Mạo hiểm xung quanh trong OpenLayersmã nguồn, có vẻ như mọi thứ liên quan đến mức thu phóng đều được thực hiện bằng cách sử dụng độ phân giải. Đủ công bằng vì điều này liên quan trực tiếp đến không gian màn hình.

Mặc dù vậy, tôi muốn sử dụng các thang đo thay vào đó và xác định rõ hơn các tỷ lệ được phép.
- Điều này có thể không?

Cho đến nay tôi đã tạo ra một bộ thang đo mà tôi chuyển thành các độ phân giải:

var scales = [500, 1000, 2000, 4000, 10000, 25000, 50000];
var resolutions = [];
for(var i = 0; i < scales.length; i++) {
    resolutions.push(OpenLayers.Util.getResolutionFromScale(scales[i], units));
}

map = new OpenLayers.Map('', {                        
    ...
    minScale: scales[scales.length - 1],
    maxScale: scales[0],        
    resolution: resolutions,
    numZoomLevels: scales.length,
    ...
});

Vấn đề của tôi là thang đo đầu tiên và thang đo cuối cùng được tôn trọng, nhưng ở giữa độ phân giải hiện tại được chuyển đổi thành tỷ lệ không nằm trong số thang đo tôi đã chỉ định.
- Tôi đã bỏ lỡ điều gì?

Câu trả lời:


18

Để sử dụng tỷ lệ trên bản đồ của bạn:

  • Chỉ đặt tùy chọn 'quy mô'. Không đặt maxResolution, minResolution, maxScale, minScale, numZoomLevels hoặc bất kỳ thuộc tính quy mô nào khác. Đặt nó vào một mảng các mẫu số tỷ lệ (hoặc tỷ lệ).
  • Định cấu hình một đơn vị: lưu ý rằng đối với mét, giá trị này phải là 'm', đối với độ, 'độ', v.v.
  • Bạn có thể đặt maxExtent. Không đặt minExtent.

Khi bạn thực hiện việc này, tỷ lệ sẽ được sử dụng trên bản đồ của bạn. (Lưu ý rằng chúng sẽ được sắp xếp từ hầu hết thu nhỏ - mẫu số tỷ lệ cao nhất - đến hầu hết được phóng to - mẫu số tỷ lệ nhỏ nhất.)

Trong trường hợp của bạn, điều này sẽ trông giống như:

map = new OpenLayers.Map('map', {                        
  scales: scales,
  units: 'm' // or whatever       
});

Sau đó thêm lớp của bạn.

Lưu ý rằng các tùy chọn độ phân giải dựa trên lớp sẽ 'kiểm soát' bản đồ; bạn thường chỉ nên chỉ định những điều này trên bản đồ hoặc các lớp, không phải cả hai.

Lưu ý rằng lớp cơ sở kiểm soát tỷ lệ tổng thể của bản đồ; lớp phủ sẽ được kiểm soát hoàn toàn bởi các lớp cơ sở.

Lưu ý rằng OpenLayers sử dụng giả định DPI là 72. Để kiểm soát cài đặt DPI này, bạn có thể đặt OpenLayers.DOTS_PER_INCH trước khi tạo bản đồ của mình. Một giá trị điển hình (được sử dụng bởi thông số SLD) sẽ khác nhau, vì vậy nếu giả định này quan trọng với bạn, bạn nên thay đổi tham số cấu hình này để phù hợp với máy chủ của mình.


1
@Christopher : Cảm ơn rất nhiều. Đó chính xác là những gì tôi đang tìm kiếm và nó hoạt động như một bùa mê :) Tôi bỏ lỡ mặc dù tìm thấy scalestham số trong nguồn hoặc trong tài liệu: dev.openlayers.org/docs/files/OpenLayers/Map-js.html
Châu

1
 var options = { scales: [50000000, 30000000, 10000000, 5000000],
                resolutions: [1.40625,0.703125,0.3515625,0.17578125,0.087890625,0.0439453125],
                minScale: 50000000,
                maxResolution: "auto",
                maxExtent: new OpenLayers.Bounds(-180, -90, 180, 90),
                maxResolution: 0.17578125,
                maxScale: 10000000,
                minResolution: "auto",
                minExtent: new OpenLayers.Bounds(-1, -1, 1, 1),
                minResolution: 0.0439453125,
                numZoomLevels: 5,
                units: "degrees"
              };
map = new OpenLayers.Map( $('map') , options);

Đơn vị cần được đặt: đơn vị: "độ"

Chuỗi - Các đơn vị để hiển thị lớp.

Điều này ảnh hưởng đến tính toán Độ phân giải.

Nguồn chính thức: http://trac.openlayers.org/wiki/SettingZoomLevels

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.