GML, KML, GeoJSON - Velocidade de renderização de 3109 polígonos?

12

Estou trabalhando com o Geoserver, atendendo 48 municípios dos Estados Unidos inferiores a camadas abertas (3109 polígonos - muito mais vértices). Os condados são carregados em um banco de dados postgis. Estou curioso sobre a experiência do desenvolvedor ao tentar enviar essa quantidade de vértices para o cliente.

Em qual formato WFS você obteve os melhores resultados? Foi utilizado ajuste adicional para o Geoserver?

Sei que o WMS lado a lado seria mais rápido, mas quero permitir alterações dinâmicas em um mapa de coroas usando openLayers, por exemplo. o usuário envia um formulário, um script Python é chamado e novos compartimentos de dados são retornados para os openlayers recarregarem a div do mapa. Também quero tentar isso em formato de resolução total antes de reduzir a complexidade do polígono nos openlayers.

Jay Laura
fonte

Respostas:

4

Talvez isso desencadeie novas idéias: eu tenho um aplicativo em execução no qual os usuários podem editar um mapa com muitos elementos.

Em vez de enviar todos os dados como WFS, uso mapas WMS e, quando o usuário clica ou faz uma seleção, busco os itens selecionados como WFS .

Depois de enviar uma atualização de volta ao servidor, atualizo a camada WMS.

Existem alguns exemplos de OpenLayers que demonstram como você pode fazer isso. Você provavelmente precisará ajustá-lo um pouco, mas o OpenLayers + GeoServer resolverá a parte mais difícil para você. Os dados são enviados compactados, de modo que o formato original não é tão importante; não é o gargalo. Deixe o OpenLayers e o GeoServer descobrirem qual formato eles usam para trocar informações.

Essa abordagem escala muito bem. Até pessoas com conexões lentas e computadores lentos podem usá-lo para editar o mapa. A busca de centenas de elementos é muito rápida, e você provavelmente não precisará mais do que isso ao mesmo tempo para editar.

Finalmente .. off-topic, mas como você pretende fazer coisas do lado do cliente com dados do mapa: Lembre-se de que o IE7 e inferiores serão problemáticos se você quiser desenhar polígonos com o OpenLayers. O OpenLayers usa SVG para desenho do lado do cliente, e o IE7 e inferior não têm suporte embutido. Esses usuários deverão fazer o download de um plug-in antigo e ruim. Todos os outros navegadores estão bem.

Wouter van Nifterick
fonte
IE8 será quase tão ruim. O OpenLayers possui vários renderizadores e, para navegadores que não suportam Canvas ou SVG, recorrerão ao VML, que o IE7 suporta. Os diferentes renderizadores oferecem desempenho melhor e pior em locais diferentes, por exemplo, renderização versus detecção de mouse e clique em #
tomfumb
3

GEOJSON é, na minha opinião, o melhor formato, é fácil de ler, fácil de usar em javascript e geralmente menor em tamanho que GML / KML. Pode até conter informações sobre estilo, veja aqui .

Não é um padrão oficial, mas é suportado em folhetos e em openlayers e em muitos aplicativos de desktops como o qgis.

Warrieka
fonte
2

O uso do GeoJSON é um bom começo para acelerar o sistema, mas pode não ser suficiente. Você deve criar várias versões da sua camada de dados, uma por camada de zoom, e aplicar métodos de generalização / simplificação a cada versão. O cliente deve solicitar a camada relevante, dependendo do nível de zoom selecionado. Isso garantiria que o nível de detalhe dos dados trocados entre o servidor e o cliente fosse adequado e aumentaria significativamente a transferência de rede e a renderização. Para ir além, você pode estender seu sistema com ladrilhos vetoriais e indexação espacial, conforme descrito neste documento , mas não tenho certeza de que openlayers e geoserver possam lidar com isso ... ainda!

Com certeza: esqueça o GML.

julien
fonte
Este é o meu método de fallback quando o WFS de resolução total é muito lento. Estou interessado em problemas desse tamanho e quero poder relatar a velocidade total da resolução e, se necessário, a velocidade reduzida.
Jay Laura
2

Por que não usar seu script python para criar um novo arquivo SLD e enviá-lo ao servidor WMS com sua solicitação.

Há um exemplo aqui .

Ian Turton
fonte
Eu considerei isso e provavelmente testarei essa opção quanto à velocidade. Isso não é para desenvolvimento, mas para pesquisa, então quero experimentar o WFS.
Jay Laura
1

Já andei por uma estrada semelhante duas vezes e a renderização do lado do cliente por algo além de um pequeno número de pontos ou polígonos realmente simples simplesmente não é uma boa ideia. Depois de se vincular a essa arquitetura, é caro voltar atrás e, em qualquer projeto, é provável que você veja uma alteração nos requisitos ou um aumento no volume de dados à medida que várias partes interessadas / supervisores começam a ver do que o seu sistema é capaz. A abordagem de renderização do lado do cliente baseada no navegador não é dimensionada.

Se você deseja renderização dinâmica, eu uso a abordagem da @iant. Descrevi anteriormente várias opções para um problema diferente, mas relacionado aqui . Também usei a generalização de polígonos para ajudar na renderização do lado do cliente e, embora definitivamente ajude, gera problemas mais difíceis, como se você deseja puxar o polígono não generalizado à medida que o usuário aumenta o zoom.

Mesmo se você estiver trabalhando com uma plataforma conhecida - por exemplo, você conhece o hardware, a versão do navegador e os plugins de todos os clientes - o que é improvável, você não tem idéia de que tipo de carga esses clientes estão sujeitos. Esse tipo de abordagem exige que o navegador consiga bastante tempo de CPU para manter a experiência do usuário fluida e qualquer outra coisa que possa incomodar seus usuários.

tomfumb
fonte