Làm cách nào để tính tỷ lệ của Mức thu phóng hiện tại với các tham số như mức độ, độ phân giải?


8

Tôi đã nhận được các tham số sau:

Width and height of Map: 450px, 560px

units : 'meters'

maxExtent : new OpenLayers.Bounds(806677.9759,802420.9858,8876817.5647,853497.8186405064)

resolutions: [199.51887828322785, 99.75943914161392, 49.87971957080696, 
24.93985978540348, 12.46992989270174, 6.23496494635087, 3.117482473175435, 
1.5587412365877176, 0.7793706182938588, 0.3896853091469294, 0.1948426545734647, 
0.09742132728673235, 0.048710663643366174, 0.024355331821683087, 0.012177665910841544,
0.006088832955420772, 0.003044416477710386, 0.001522208238855193]

numZoomLevels: 18

OpenLayers.DOTS_PER_INCH = 90.71428571428572;

Ai truyền cảm hứng cho tôi cách tính tỷ lệ của Mức thu phóng hiện tại?

Câu trả lời:


14

Tỷ lệ bản đồ được định nghĩa là tỷ lệ displayed units / measured units. Trường hợp cụ thể của bạn khó hơn một chút khi chúng tôi phải đi qua hai thang đo và hai đơn vị khác nhau để đến các đơn vị trong thế giới thực.

Giả sử tỷ lệ ngang tương đương với tỷ lệ dọc, trước tiên chúng ta xem xét độ phân giải pixel ngang . Bằng cách này, chúng tôi đang cố gắng tìm pixel đơn vị được hiển thị:

scale = display / measured

      = feature / pixels

      = |(806677m - 876817m)| / 450px // I'm assuming you've made a typo with 8876817

      = 70140 / 450

      = 166.66 metres per pixel (inversely 0.006 pixels per metre)

Thứ hai, chuyển đổi tỷ lệ pixel để tìm khoảng cách màn hình trên mỗi pixel:

      = real distance / pixel distance

      = 2.54cm (1 inch) / 90 pixels

      = 0.028 ~0.03

Mang tất cả lại với nhau:

   0.028 cm per pixel = 166.66 metres / x

   x * 0.028 = 166.66

   x = 166.66 / 0.028

   x = 5952.1

Do đó, tỷ lệ bản đồ của bạn là khoảng 1: 6000.


Rất đánh giá cao cho mô tả cực kỳ chi tiết của bạn. Tôi sẽ tính toán theo cách của bạn. Cảm ơn.
Brady

Không vấn đề gì. Nếu bạn đang tính toán tỷ lệ nhiều lần, bạn có thể muốn ngưng tụ phương trình. Tôi chỉ xếp nó cho bạn đơn giản.
nagytech

Haha vâng! Trên thực tế, tôi muốn biết Mức thu phóng là gì đối với giá trị tỷ lệ '1: 3500'. Bởi vì một số lớp trong bản đồ của tôi chỉ hiển thị khi tỷ lệ hiện tại lớn hơn '1: 3500'. BTW, tôi là một người mới trong GIS.
Brady

1
Tất nhiên, có một sự phụ thuộc mạnh mẽ vào việc có được khoảng cách pixel phù hợp. Vì vậy, nó sẽ không cùng "tỷ lệ" trên máy tính xách tay của bạn và máy chiếu đính kèm.
BradHards

4
Có một lỗi trong câu trả lời của nagytech, bởi vì anh ta so sánh m trên pixel với cm trên pixel! Đầu tiên bạn phải chuyển đổi 0,028cm sang mét! Vậy bạn có 0.00028 mét và tỷ lệ x = 166.66 / 0.00028 = 595214!
marcel

9

Có một thông tin tốt trên trang web Peter Robins có thể giúp bạn dễ dàng với các trình mở.

Để tìm tỷ lệ mà độ phân giải đại diện, bạn phải biết pixel lớn như thế nào; CV không biết điều đó chắc chắn, nhưng đưa ra một số giả định hợp lý. Nếu bạn xem Util.js và tìm kiếm getScaleFromResolution (), bạn sẽ thấy rằng nó sử dụng 2 hằng số, INCHES_PER_UNIT và DOTS_PER_INCH và phép tính là "độ phân giải * OpenLayers.INCHES_PER_UNIT [đơn vị] Đối với độ, đây là độ phân giải * 4374754 * 72 (314.982.228), vì vậy tỷ lệ tối đa là 1: 442.943.843. Theo mét, thang đo tối đa là 156543.0339 * 39.3701 * 72 (2.834.6472) hoặc 1: 443.744.273.

vì vậy công thức:

 map.getResolutions * OpenLayers.INCHES_PER_UNIT[units] * OpenLayers.DOTS_PER_INCH

Tôi hy vọng nó sẽ giúp bạn...


Trong OpenLayers 2.14 map.getResolutions không hoạt động với tôi, nhưng nhận được độ phân giải của lớp cơ sở đã làm : map.baseLayer.resolutions. Tuy nhiên, hãy nhớ rằng điều này có thể dẫn đến nhiều giá trị hơn mức thu phóng ...
abettermap
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.