Número máximo de recursos de ponto em uma camada vetorial OpenLayers

27

Na sua experiência, quantos recursos de ponto podem ser adicionados a uma camada de vetor OpenLayers (novo OpenLayers.Layer.Vector ("Point Layer")) antes de ficar inutilmente lento?

Meu caso de uso é exibir pontos de uma tabela de banco de dados. O usuário pode decidir qual período de tempo visualizar. Portanto, o resultado pode variar de muito poucos a potencialmente 100.000 pontos. Gostaria de introduzir um limite razoável e avisar o usuário se sua consulta retornaria mais recursos.

underdark
fonte
Existe um navegador padrão sendo usado? O limite provavelmente será diferente dependendo do navegador que você estiver usando.
Derek Swingley
Principalmente Firefox. Ele não precisa funcionar em IEs antigos.
underdark
1
Em vez de avisar um usuário, você pode mudar de solicitar dados vetoriais para retornar os pontos como WMS / imagem.
geographika
@geographika: Normalmente eu faria isso. Mas o usuário também decide a qual banco de dados se conectar. Eu precisaria conhecer todos os bancos de dados possíveis e tê-los disponíveis através de um WMS. Eles nem têm o PostGIS instalado, apenas busco colunas lat / lon.
Underdark

Respostas:

38

Eu não tenho uma resposta definitiva para você, mas você montou uma página onde você pode brincar com diferentes números de pontos em um mapa OL: http://derekswingley.com/lab/olpts/

Derek Swingley
fonte
5
Derek deve ter o distintivo 'Ótima resposta com exemplo prático' para isso. É bom ver as diferenças de velocidade nos pontos sobrepostos.
Mapperz
3
Muito interessante! Isso me faz pensar no geoipsum. Alternativamente, pode ser utilizado, bem como para o desempenho no teste: craigmmills.com/geoipsum (I não sei se há um limite de número de polígonos)
simo
1
@ So4ne que o site do Google App Engine morreu em algum momento, o mesmo (cerca de 5 anos de idade) código é aqui: derekswingley.com/lab/olpts
Derek Swingley
1
fallout @nospor de mudar para https, atualizado e o site está de volta.
Derek Swingley
1
@DerekSwingley Fiz amostras atualizados com base na sua ideia usando Folheto, MapboxGL JS & OpenLayers 4 medium.com/@ThomasG77/... Coloquei créditos para sua amostra
ThomasG77
5

Se a exibição ficar lenta devido ao número de recurso muito alto, isso significa que os dados a serem exibidos não são adequados para o nível de zoom. Geralmente, quando a densidade dos recursos fica muito alta, a tela não pode mais ser legível (veja este exemplo ). Mesmo se não houvesse limite de processamento e todos os dispositivos de exibição pudessem exibir os recursos 1000000000000 em 0,001s em uma tela pequena, a visualização permaneceria impossível.

A lei do radix de Töpfer afirma que a densidade do recurso deve permanecer abaixo de um limite constante, independentemente do nível de zoom. Uma maneira de resolver esse problema e adaptar os dados à escala de visualização é transformá-lo usando operações de generalização como esta ou esta .

julien
fonte
Sobre o mesmo tópico: gis.stackexchange.com/q/4096/162
julien
2
Muito verdadeiro. E em relação ao Openlayers, ele usa a estratégia de cluster para lidar com isso. Veja o exemplo: openlayers.org/dev/examples/strategy-cluster.html
simo
1
Para o meu aplicativo atual, simplesmente conectei os pontos (GPS) às linhas (trilhas). Isso já melhora consideravelmente o tempo de renderização.
Subterrâneo
3

Eu não acho que não seja possível dar uma resposta sólida para esta pergunta. O ponto de renderização / polígonos depende totalmente do navegador e do hardware (CPU e memória), não dos OpenLayers. Eu tive um problema com o Openlayers e o IE6 para uma das renderizações do Lake (Polygon). mas, ele carregou bem no Firefox. E a melhor opção seria monitorar o uso de memória e CPU com o Chrome ou algumas ferramentas seriam melhores.

Senthil
fonte
1

Como outros, não tenho resposta em relação a essa pergunta, mas a aplicação de uma estratégia BBox pode ajudá-lo a manter apenas os dados necessários, pois exibe apenas os recursos localizados na caixa delimitadora.

simo
fonte
1

No OpenLayers 6, existe um renderizador de pontos WebGL que deve permitir a renderização de centenas de milhares de recursos, com filtragem baseada em tempo. Você pode conferir a versão mais recente do workshop oficial em https://openlayers.org/workshop/en/webgl/ .

Com o OpenLayers 2, que eu realmente não recomendo, o máximo para a taxa de quadros aceitável será apenas algumas centenas de recursos.

ahocevar
fonte
0

Eu tropecei em um caso de uso semelhante, não tenho certeza se ele atenderá às necessidades mencionadas acima, mas Clusteringno OL 5 é o que eu adotei.

O agrupamento, como as palavras sugerem, pega um grupo de pontos e os mescla em um único ponto. Por exemplo, você tem 100 pontos em determinada cidade. Todos os pontos serão visíveis como um ponto de um zoom de digamos, 4mas como pontos individuais de um zoom de digamos diga 10que o que você pode fazer é quando o zoom é que 4você pode unir esses pontos como um, o que isso ajuda a reduzir o número de pontos a serem renderizados em uma área específica.

Em outras palavras, digamos que você tenha 10.000 pontos a serem renderizados no mapa e eles estejam muito próximos um do outro, para que você possa criar agrupamentos deles e reduzir a renderização, e quando o usuário aproxima o zoom, você quebra os agrupamentos. Isso garantirá que você tenha menos renderização e melhor desempenho.

Satisfação no desempenho. Link para exemplos de cluster em Openlayers

Jashanpreet Bhullar
fonte
Você poderia adicionar um breve resumo da página vinculada? Os links podem quebrar com o tempo, deixando sua resposta inútil como é agora.
Kantan