Mais

Restringindo os níveis de zoom com base na disponibilidade do Bing Map?

Restringindo os níveis de zoom com base na disponibilidade do Bing Map?


Meu site é construído no ArcGIS Server 10 com JavaScript API 2.3 e usa o Bing Maps como mapeamento de fundo. Embora o site seja voltado para NSW, Austrália, permitimos que o usuário dê zoom em qualquer lugar do mundo, em qualquer uma das escalas suportadas (ou seja, o esquema de tiling conforme especificado no arquivo de ajuda do ArcGIS).

Os conjuntos de dados de estrada / satélite do Bing Maps estão disponíveis em faixas de escala variadas, com áreas povoadas suportando escalas maiores do que áreas rurais vazias. Ao aplicar zoom em algum lugar sem dados de mapa / satélite, um ícone de "câmera quebrada" é mostrado. Gostaríamos de evitar mostrar este ícone feio.

Como podemos restringir a escala máxima de zoom onde o mapa / satélite não está disponível, mas permitir zoom total onde estiver disponível?

O Google Maps faz isso muito bem - conforme você se move ao redor do mundo, pode ver o controle deslizante de zoom se expandir / contrair dependendo de quais conjuntos de dados estão disponíveis naquele local. Eles presumivelmente possuem metadados que mostram a presença / ausência de dados, então buscamos emular isso ao usar o Bing Maps, sem acesso aos metadados.


O Bing Maps é um mapa lado a lado, portanto, tem níveis de detalhe quando ampliado ou reduzido. Eu dispararia uma declaração condicional em cada mudança de extensão. Algo como: evento disparado: Extensão Alterar Condicional: se estilo de mapa = aéreo e (obter nível


Antes de aplicar zoom em um local, talvez obtenha os metadados da imagem para ver qual a melhor resolução disponível lá.

Determine a disponibilidade de imagens em um local com um nível de zoom especificado

Como a resposta contém zoomMin e zoomMax, suponho que você possa fazer a chamada apenas uma vez em um nível de zoom de baixa resolução e usar os valores daí, caso contrário, parece que você pode precisar fazer várias chamadas.


função getMapServerMetadata (Url) {var metadata = ""; esri.request ({url: Url + "? f = json", handleAs: "json", callbackParamName: "callback", load: function (response, io) {metadata + = "Map Name:" + response.mapName; metadados + = " n  nVersão atual:" + response.currentVersion; metadata + = " n  nDescrição do serviço:" + response.serviceDescription; metadata + = " n  nCopyright:" + response.copyrightText; metadados + = " n  nNúmero de camadas:" + response.layers.length; metadata + = " n  nNumber of Tables:" + response.tables.length; metadata + = " n  nReferência espacial:" + response.spatialReference .wkid; alert (metadados);}, erro: função (erro) {alert (error.message);}}); } // Objetos json disponíveis // currentVersion // serviceDescription // mapName // descrição // copyrightText // camadas // tabelas // spatialReference // singleFusedMapCache // tileInfo // initialExtent // fullExtent // units // supportedImageFormatTypes // documentInfo // capacidades // _ssl

por exemplo. tente usar o código acima com um url MapServer de mapa base regular do ESRI como: http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer

você também pode usar isso em subcamadas - para descobrir quais metadados estão lá, basta usar o url de base e adicionar? f = json para que uma representação json seja retornada e iterar por meio dos nomes de campo.


Assista o vídeo: Bing Maps 3D modely měst