Bagaimana cara menghitung skala Level Zoom saat ini dengan parameter seperti tingkat, resolusi?

8

Saya mendapat parameter berikut:

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;

Siapa yang menginspirasi saya bagaimana menghitung skala Tingkat Zoom saat ini?

Brady
sumber

Jawaban:

14

Skala peta didefinisikan sebagai rasio displayed units / measured units. Kasing khusus Anda sedikit lebih sulit mengingat bahwa kita harus melintasi dua skala dan dua unit yang berbeda untuk sampai ke unit dunia nyata.

Dengan asumsi skala horizontal setara dengan skala vertikal, pertama-tama kita melihat resolusi piksel horizontal . Dengan ini, kami berupaya menemukan satuan piksel yang ditampilkan:

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)

Kedua, mengonversi skala piksel untuk menemukan jarak layar per piksel:

      = real distance / pixel distance

      = 2.54cm (1 inch) / 90 pixels

      = 0.028 ~0.03

Menyatukan semuanya:

   0.028 cm per pixel = 166.66 metres / x

   x * 0.028 = 166.66

   x = 166.66 / 0.028

   x = 5952.1

Oleh karena itu, skala peta Anda sekitar 1: 6000.

nagytech
sumber
Sangat dihargai atas deskripsi Anda yang sangat rinci. Saya akan menghitungnya mengikuti jalan Anda. Terima kasih.
Brady
Tidak masalah. Jika Anda menghitung skala berulang kali, Anda mungkin ingin menyingkat persamaannya. Saya hanya melapisinya untuk Anda karena kesederhanaan.
nagytech
Haha iya! Sebenarnya, saya ingin tahu apa Level Zoom untuk nilai skala '1: 3500'. Karena beberapa layer di peta saya hanya ditampilkan ketika skala saat ini lebih besar '1: 3500'. BTW, saya baru di GIS.
Brady
1
Ada (tentu saja) ketergantungan yang kuat untuk mendapatkan jarak piksel yang tepat. Jadi itu tidak akan menjadi "skala" yang sama pada notebook Anda dan proyektor yang terpasang.
BradHards
4
Ada kesalahan dalam jawaban nagytech, karena dia membandingkan m per pixel ke cm per pixel! Pertama, Anda harus mengonversi 0,028cm ke meter! Jadi, Anda memiliki 0,00028 meter dan skala x = 166,66 / 0,00028 = 595214!
Marcel
9

Ada informasi yang bagus di situs web Peter Robins yang dapat membantu Anda dengan mudah dengan openlayers.

Untuk menemukan skala yang diwakili resolusi, Anda harus tahu seberapa besar pikselnya; OL tidak tahu pasti, tetapi membuat beberapa asumsi yang masuk akal. Jika Anda melihat Util.js, dan mencari getScaleFromResolution (), Anda akan menemukan bahwa ia menggunakan 2 konstanta, INCHES_PER_UNIT dan DOTS_PER_INCH, dan perhitungannya adalah "resolusi * OpenLayers.INCHES_PER_UNIT [unit] * OpenLayers.DOTS_PER_INCH". Untuk derajat, ini adalah resolusi * 4374754 * 72 (314.982.288), sehingga skala maksimumnya adalah 1: 442.943.843. Dalam meter, skala maksimum adalah 156543.0339 * 39.3701 * 72 (2.834.6472) atau 1: 443.744.273.

jadi formule:

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

Saya harap ini membantu Anda ...

Aragon
sumber
Dalam OpenLayers 2.14 map.getResolutions tidak bekerja untuk saya, tapi mendapatkan resolusi dari lapisan dasar melakukan: map.baseLayer.resolutions. Perlu diingat, bagaimanapun, ini dapat menghasilkan lebih banyak nilai daripada tingkat zoom ...
abettermap