OpenLayers: Gunakan skala alih-alih resolusi

8

Berkeliaran di sekitar dalam OpenLayerskode sumber, sepertinya semua yang terkait dengan tingkat zoom dilakukan dengan menggunakan resolusi. Cukup adil karena ini terkait langsung dengan ruang layar.

Saya ingin menggunakan skala sebagai gantinya, dan lebih jauh lagi secara eksplisit mendefinisikan skala yang diizinkan.
- Apakah ini mungkin?

Sejauh ini saya telah membuat satu set skala yang saya ubah menjadi resolusi:

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,
    ...
});

Masalah saya adalah bahwa skala pertama dan terakhir dihormati, tetapi di antara resolusi saat ini diubah menjadi skala tidak termasuk yang saya tentukan.
- Apa yang saya lewatkan?

Chau
sumber

Jawaban:

18

Untuk menggunakan skala di peta Anda:

  • Atur hanya opsi 'skala'. Jangan atur maxResolution, minResolution, maxScale, minScale, numZoomLevels, atau properti terkait skala lainnya. Atur ke array penyebut skala (atau skala).
  • Mengkonfigurasi unit: perhatikan bahwa untuk meter, ini harus 'm', untuk derajat, 'derajat', dll.
  • Anda dapat mengatur maxExtent. Jangan atur minExtent.

Setelah Anda melakukan ini, skala tersebut harus digunakan pada peta Anda. (Perhatikan bahwa mereka akan dipesan dari denominator skala tertinggi yang paling diperbesar - hingga yang paling besar - denominator skala terkecil.)

Dalam kasus Anda, ini akan terlihat persis seperti:

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

Kemudian tambahkan layer Anda.

Perhatikan bahwa opsi resolusi berbasis layer akan 'mengontrol' peta; Anda biasanya hanya menentukan hal-hal ini pada peta atau layer, bukan keduanya.

Perhatikan bahwa lapisan dasar mengontrol skala keseluruhan peta; overlay akan sepenuhnya dikendalikan oleh lapisan dasar.

Perhatikan bahwa OpenLayers menggunakan asumsi DPI 72. Untuk mengontrol pengaturan DPI ini, Anda dapat mengatur OpenLayers.DOTS_PER_INCH sebelum membuat peta Anda. Nilai tipikal (digunakan oleh spesifikasi SLD) akan berbeda, jadi jika asumsi ini penting bagi Anda, Anda harus mengubah parameter konfigurasi ini agar sesuai dengan server Anda.

Christopher Schmidt
sumber
1
@Christopher : Terima kasih banyak. Itu persis apa yang saya cari dan berfungsi seperti pesona :) Namun saya kehilangan untuk menemukan scalesparameter di sumber atau dalam dokumen: dev.openlayers.org/docs/files/OpenLayers/Map-js.html
Chau
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);

Unit perlu diatur: unit: "derajat"

String - Unit untuk menampilkan layer.

Ini mempengaruhi perhitungan Skala-Resolusi.

Sumber resmi: http://trac.openlayers.org/wiki/SettingZoomLevels

Mapperz
sumber