Openlayers 3 Max Extent


15

Tôi muốn hạn chế nơi người dùng có thể di chuyển trên bản đồ, nhưng dường như tôi không thể tìm thấy bất kỳ tài nguyên nào cho biết cách đặt phạm vi tối đa của chế độ xem bản đồ trong OpenLayers 3. Tôi biết có một giải pháp trong OpenLayers 2. Is nó có thể trong phiên bản mới?

Câu trả lời:


18

Điều này có thể được thực hiện đơn giản bằng cách định nghĩa extenttrong đối tượng View. ví dụ

var view = new ol.View({
    ...
    extent: [minx,miny,maxx,maxy]
    ...
});
var map = new ol.Map({
    ...
    view: view,
    ...
});

Nhưng trong openlayers.org/en/v3.0.0/apidoc/ol.View.html không có tùy chọn như vậy
Daviddd

Rất nhiều thứ không được ghi lại hoặc thử nghiệm và chỉ hiển thị khi không được kiểm tra ổn định
CJStuart

4
Đây không phải là một mức độ thực sự. Nó chỉ giữ cho phạm vi trong tầm nhìn, có nghĩa là có khoảng trắng xấu xí xung quanh.
Ingram Ingram

Trong khi đó, extentđã trở thành một tính năng được ghi lại đúng cách: openlayers.org/en/latest/apidoc/module-ol_View-View.html (khi viết, "mới nhất" = v5.3.0)
Christallkeks

3

Một lựa chọn khác là:

...
var map = new ol.Map({
          layers: [...],
          overlays: [...],
          target: document.getElementById('map'),
          view: new ol.View({
             center: ol.proj.transform([minx,miny,maxx,maxy], 
                     'EPSG:4326', 'EPSG:3857'),
             zoom: ...,    
             maxZoom: ..., 
             minZoom: ..., 
             extent: ol.proj.transform([minx-n,miny-n,maxx+n,maxy+n], 
                     'EPSG:4326', 'EPSG:3857')
             })
        });
...

1

Giống như Ragnagord đã chỉ ra rằng cần phải thiết lập extenttrong của bạn ol.view.

Tùy thuộc vào những gì bạn muốn đề cập đến cách dễ nhất là lấy phạm vi trực tiếp từ phép chiếu ( ol.proj.Projection) hoặc lớp (bất kỳ lớp nào ol.layer) của bạn bằng cách sử dụng getExtent()hàm. Trong trường hợp của EPSG: 3857, công việc này:

var map = new ol.Map({
    ...
    view: new ol.View({
        ...
        extent: ol.proj.get("EPSG:3857").getExtent()
  })
});

1

Tôi phải chỉ ra nếu chúng ta xem xét phép chiếu bản đồ, trong trường hợp của tôi giữa WGS84 và Spherical Mercator, có một sự thay thế với ol.proj.transformExtent. Một câu trả lời đã được tìm thấy ở đây . Mức độ được chỉ định như sau:

var map = new ol.Map({
   .
   .
   .
   view: new ol.View({
        extent:  ol.proj.transformExtent([minx, miny, maxx, maxy], 'EPSG:4326', 'EPSG:3857');
         .
         .
         .
        )}
)}
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.