Mais

FeatureLayer fullExtent está sendo restringido pelo painel lateral Dojo ContentPane

FeatureLayer fullExtent está sendo restringido pelo painel lateral Dojo ContentPane


Eu tenho um aplicativo ArcGIS JavaScript que exibe um único FeatureLayer em um mapa que está em um modelo Dojo BorderContainer / ContentPane semelhante ao mostrado aqui. Estou tentando inicializar o mapa para fullExtent do único FeatureLayer. Eu faço isso assim:

map.on ("camadas-adicionar-resultado", função (evt) {map.setExtent (evt.layers [0] .layer.fullExtent)});

No entanto, estou descobrindo que os pontos nos extremos do mapa estão cortados. Especificamente, esta é uma camada de pontos no leste e no meio-oeste dos Estados Unidos, mas há alguns pontos na Califórnia e um na França. Os pontos em CA e França estão fora da extensão do mapa.

Meu palpite era que a extensão é definida assumindo que não há painel lateral do ContentPane, e então forçada para a janela de visualização menor quando o ContentPane é renderizado. Testei essa teoria criando um mapa que abrange 100% da largura da página. Com certeza, o problema foi embora.

Como posso garantir quemap.setExtent ()leva em consideração os painéis laterais do ContentPane? Já estou exigindodomReady!e chamandoparser.parse (). Mais alguma coisa que estou perdendo?

Editado com mais detalhes em 24/02

Esqueci de acrescentar que tenho um FeatureTable que basicamente serve como a tabela de atributos para os pontos no FeatureLayer. Eu configurei o mapa para diminuir o zoom em toda a extensão quando a seleção de FeatureTable for desmarcada. Quando essa redução ocorre, o mapa aumenta o zoom para as extensões corretas e inclui todos os pontos. Isso reforça minha teoria de que a chamada inicial para map.setExtent não está "ciente" da janela de visualização menor do mapa quando a página é carregada inicialmente, mas é mais tarde, quando a página estiver totalmente carregada.


Tente ligarmap.resize ()depois que o ContentPane é renderizado e o div do mapa redimensionado. Você também pode ter que usarmap.reposition ()dependendo se o div foi movido ou não.

Editar, em resposta ao seu comentário sobre como garantir que ele siga a reposição do ContentPane:

Colocá-lo após window.onload garantirá que ele seja acionado depois que todo o resto estiver completamente carregado:

window.onload = function () {map.resize (); função para definir sua extensão}

Dessa forma, tudo será carregado, incluindo os painéis que fazem com que o div do mapa seja redimensionado e, em seguida, você redimensiona o mapa e aplica o zoom na extensão desejada.


Entrei em contato com o suporte técnico da Esri sobre esta questão. Eles me lembraram que osetExtentfunção leva duas variáveis ​​de entrada:setExtent (extensão, ajuste?). Oem formavariável está definida parafalsopor padrão, mas de acordo com a documentação da função, ele garante que qualquer mapa com camadas de serviço de mapa em mosaico irá "caber" na tela.

Portanto, consegui corrigir esse problema e obter o resultado desejado com o seguinte ajuste no código original:

Antigo (errado)

map.on ("camadas-adicionar-resultado", função (evt) {map.setExtent (evt.layers [0] .layer.fullExtent)});

Novo (correto)

map.on ("camadas-adicionar-resultado", função (evt) {map.setExtent (evt.layers [0] .layer.fullExtent, true)});