Restringindo o mapa base em extensão específica na API do ArcGIS para JavaScript 3?

8

Atualmente, estou usando o ArcGIS JS API ver 3.3 / 3.5 no meu aplicativo.

Quero restringir o mapa base apenas para os EUA. Por exemplo, é possível usar os recursos de navegação padrão, como aumentar o zoom, diminuir o zoom apenas para o país dos EUA.

Tentando o seguinte:

  1. Eu defini o código de extensão dos EUA no meu aplicativo, mas quando diminuo o zoom, posso ver o mapa do mundo inteiro. Quero restringi-lo apenas em certa medida

  2. Passando por esta pergunta: Restringir panorâmica e zoom na API Javascript do ArcGIS?

  3. Restringindo o mapa base das ruas usando esta pergunta, mas incapaz de restringir o mapa: Usando o próprio mapa base com a API do ArcGIS para Javascript?

  4. Estou usando este mapa de amostra no meu aplicativo.

Sunil
fonte

Respostas:

4

Aqui está um exemplo de uma maneira de fazer isso: http://jsfiddle.net/gh/gist/library/pure/6050806/

CLJ
fonte
4

Aqui está um exemplo do código que eu costumava fazer isso. Isso funcionará no seu caso se você definir a extensão inicial do mapa para mostrar os EUA:

//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);
        }
    });
}

Aqui está um exemplo de jsFiddle em funcionamento: http://jsfiddle.net/sirhcybe/aL1p24xy/

Chris
fonte