Mais

Césio 3D - Determinando a escala do mapa do globo visualizado


Estou trabalhando com o Césio 3D no momento e quero determinar em qual escala de mapa equivalente o globo está sendo visualizado.

Consigo obter a altitude de visualização em metros em que a câmera está, mas de acordo com essa discussão, eu precisaria da distância do olho da superfície também, e eu não entendo isso.

Meu objetivo final é determinar a escala do mapa, convertê-la em um nível de zoom do Openlayers 2 para que eu possa sincronizar as duas visualizações (aproximadamente)


Atualização, março de 2016: Césio 1.19 foi lançado com uma nova função, Camera.computeViewRectangle, que faz um trabalho tão bom quanto pode ser feito computando o retângulo de visão, dadas as advertências abaixo. Agora, recomendo usá-lo em vez de farejar os blocos de imagens, conforme mostrado aqui. Estou mantendo a resposta original abaixo porque ela explica os problemas de calcular um retângulo de visão simples em uma visão 3D do globo.

Resposta original: Não há um mapeamento fácil de um globo 3D para um nível de zoom 2D. Em um globo redondo, blocos diferentes estão a distâncias diferentes da câmera 3D: alguns blocos estão dispostos no horizonte ou vistos em ângulos íngremes. A câmera pode estar abaixada perto de um ponto no solo, mas olhando em direção ao horizonte, para que possa ver os blocos de alto nível no primeiro plano e os de baixo nível no fundo.

Você pode ver isso em ação, graficamente, usando o Inspetor de Césio.

  1. Clique no minúsculo+assinar próximo a+ Terrenona parte inferior do Inspetor de césio.
  2. Em seguida, marqueMostrar as coordenadas dos blocos.
  3. Aproxime a câmera e observe a mudança das peças.

Para uma compreensão ainda mais profunda, faça o acima e, em seguida, continue:

  1. Aproxime a câmera de uma cidade ou local no solo.
  2. Use o arrasto do meio (ou ctrl-left-drag) para inclinar a vista em direção ao horizonte.
  3. Coloque uma marca de verificação emSuspender atualização de LOD.
  4. Endireite a câmera e recue um pouco para ver os ladrilhos flutuando no espaço. Observe que aqueles que estavam perto da câmera (quando o nível de detalhe estava suspenso) são pequenos e de alto nível, mas os que estavam visíveis à distância são grandes e de baixo nível.

Agora que você viu que vários níveis de ladrilho diferentes contribuem para uma única visualização da câmera, compartilharei alguns códigos altamente não oficiais. O Inspetor de césio está usando alguns pontos API privados para espionar os blocos que estão sendo carregados e, como esse é um código aberto, você também pode espionar esses blocos. O uso de APIs privadas não é compatível e pode ser interrompido em qualquer versão futura do Césio. Preparar? Abra uma cópia do Cesium Sandcastle e cole o seguinte código:

// Este código relata os valores mínimo / máximo de QUALQUER bloco sendo considerado para renderização. // Os valores serão alterados de forma assíncrona conforme o servidor envia blocos de nível superior. var viewer = novo Cesium.Viewer ('cesiumContainer'); var oeste, sul, leste, norte; var barra de ferramentas = document.getElementById ('barra de ferramentas'); viewer.clock.onTick.addEventListener (function () {west = south = 999; east = north = -999; // CUIDADO: O acesso a variáveis ​​_private não é oficialmente suportado e // a API pode falhar a qualquer momento sem aviso. var tilesToRender = viewer.scene.globe._surface.tileProvider._tilesToRenderByTextureCount; if (Cesium.defined (tilesToRender)) {var numArrays = tilesToRender.length; for (var j = 0; j  900) {toolbar.innerHTML = 'Location not known.';} else {toolbar.innerHTML = 'West:' + Cesium.Math.toDegrees (west) .toFixed (4) + '
'+' Sul: '+ Césio.Math.toDegrees (sul) .toFixado (4) +'
'+' Leste: '+ Césio.Math.toDegrees (leste) .toFixado (4) +'
'+' Norte: '+ Césio.Math.toDegrees (norte) .toFixado (4); }});

Se você mover a câmera nesta demonstração, poderá detectar os problemas com esse método. Quando a câmera está longe o suficiente da Terra, as coordenadas relatadas são o planeta inteiro, mas conforme você se aproxima de um local específico, as coordenadas relatadas diminuem para apenas alguns blocos ao redor desse local. No entanto, se você inclinar a câmera em direção ao horizonte, as coordenadas relatadas incluem blocos que se estendem além desse horizonte, e a câmera termina perto de um dos lados ou cantos dessas coordenadas, não do centro. Ainda assim, pode haver aplicações em que seja útil ter uma ideia aproximada de quais blocos são visíveis na cena 3D.


Assista o vídeo: Conhecendo os países do globo terrestre (Outubro 2021).