Membatasi peta dasar pada batas tertentu di ArcGIS API untuk JavaScript 3?

8

Saat ini saya menggunakan ArcGIS JS API ver 3.3 / 3.5 di aplikasi saya.

Saya ingin membatasi basemap hanya untuk AS. Misalnya, seseorang dapat menggunakan fitur navigasi standar seperti memperbesar, memperkecil untuk Negara AS saja.

Mencoba hal-hal berikut:

  1. Saya telah menetapkan kode sejauh AS dalam aplikasi saya tetapi ketika saya memperkecil maka saya dapat melihat seluruh peta dunia. Saya ingin membatasi hanya sampai batas tertentu saja.

  2. Melewati pertanyaan ini: Batasi panci dan perbesar di ArcGIS Javascript API?

  3. Membatasi basemap jalan menggunakan pertanyaan ini, tetapi tidak dapat membatasi peta: Menggunakan basemap sendiri dengan ArcGIS API untuk Javascript?

  4. Saya menggunakan peta contoh ini di aplikasi saya.

Sunil
sumber

Jawaban:

4

Berikut adalah contoh salah satu cara untuk melakukan ini: http://jsfiddle.net/gh/gist/library/pure/6050806/

CLJ
sumber
4

Berikut adalah contoh kode yang saya gunakan untuk melakukan ini. Ini akan berfungsi untuk kasing Anda jika Anda menetapkan batas awal peta untuk menunjukkan kepada AS:

//This function limits the extent of the map to prevent users from scrolling 
//far away from the initial extent.
function limitMapExtent(map) {
    var initialExtent = map.extent;
    map.on('extent-change', function(event) {
        //If the map has moved to the point where it's center is 
        //outside the initial boundaries, then move it back to the 
        //edge where it moved out
        var currentCenter = map.extent.getCenter();
        if (!initialExtent.contains(currentCenter) && 
            event.delta.x !== 0 && event.delta.y !== 0) {

            var newCenter = map.extent.getCenter();

            //check each side of the initial extent and if the 
            //current center is outside that extent, 
            //set the new center to be on the edge that it went out on
            if (currentCenter.x < initialExtent.xmin) {
                newCenter.x = initialExtent.xmin;
            }
            if (currentCenter.x > initialExtent.xmax) {
                newCenter.x = initialExtent.xmax;
            }
            if (currentCenter.y < initialExtent.ymin) {
                newCenter.y = initialExtent.ymin;
            }
            if (currentCenter.y > initialExtent.ymax) {
                newCenter.y = initialExtent.ymax;
            }
            map.centerAt(newCenter);
        }
    });
}

Berikut ini adalah contoh jsFiddle yang berfungsi: http://jsfiddle.net/sirhcybe/aL1p24xy/

Chris
sumber