Qual é a melhor maneira de exibir milhares de polígonos em Openlayers?

10

Estou tentando criar um mapa de Openlayers que exibirá milhares de polígonos. E quando o usuário clica em cada um, quero que alguns dos metadados sejam exibidos. Trabalhar com esse grande conjunto de dados parece desafiador. Mas estou tentando descobrir se existe uma maneira padrão de fazer isso. Neste ponto, acho que devo

  1. exibir meus polígonos com WMS e usar getfeatureinfo
  2. Exiba com WFS, Carregue com Strategy.BBOX e use GetFeature para obter dados de carne.

Existe uma maneira lógica que me falta para carregar todos esses dados em um mapa e ter uma boa velocidade. Eu estava olhando esta página e tentando descobrir o que eles fizeram: http://protectedplanet.net/

KyleK
fonte

Respostas:

5

Não gosto da estratégia BBOX, pois acho que pode ser lenta devido à quantidade de solicitações que podem ser geradas.

Eu usaria uma combinação das duas coisas que você mencionou.

exiba polígonos com o WMS e use getfeatureinfo ... depois use o WFS para carregar o esboço do recurso quando clicado e / ou obter mais informações do banco de dados.

protectedplanet.net não usa openlayers apenas no Google Maps. Eles provavelmente estão armazenando todas as informações em um KML / KMZ.

CaptDragon
fonte
Great Thanks! Acho que estou no caminho certo então. Mas eu estou querendo saber se protectedplanted está usando KML, devo fazer isso por sua velocidade? E esses dados KML estão sendo servidos pelo WFS?
KyleK
Não sei ao certo se é KML, apenas um palpite. Mas, se for, não está sendo atendido pelo WFS porque o WFS usa GML. A questão sobre o uso de APIs e KML do Google é que você precisa desse KML em um URL público onde TODOS possam vê-lo. Se isso não for um problema, talvez você possa tentar. Isso ocorre porque o Google absorve esse KML em seus servidores e o retorna de volta à API. Por esses dois motivos, não posso usar a API do google maps devido à sensibilidade de alguns projetos.
CaptDragon
Você pode limitar o acesso ao seu URL KML público para permitir apenas um agente de usuário que apresente a sequência do analisador do Google KML.
Sarge
3

A principal abordagem aqui é separar a rasterização com a interação. Uma abordagem (pela qual sou parcialmente responsável) é o UTFGrid , que foi usado pela NPR, etc. e é integrado ao TileMill e ao Mapnik . Também é usado pelo CartoDB e o Google Maps usa uma abordagem semelhante para o Fusion Tables.

O planeta protegido também usa blocos de varredura (por exemplo, este:) http://184.73.201.235/blue/8/78/93e possui um servidor ativo para consultas baseadas em pontos (por exemplo, este ).

Re: CaptDragon: não há WFS ou KML envolvidos.

O WMS e o WFS não oferecem um desempenho suficientemente bom para um site público. A estratégia BBOX não funcionará se você permitir que os usuários aumentem o zoom.

tmcw
fonte
FYI: você pode armazenar em cache um serviço raster WMS que fornecerá blocos.
CaptDragon
1
Sim, mas esse não é o principal problema aqui, é a interatividade. Você não pode armazenar em cache da maneira que o WFS / WMS GetFeature funciona, porque eles não foram projetados para serem armazenados em cache da mesma forma.
tmcw
Eu cache meus resultados CSW, WFS e WMS GetFeature, GetRecord, etc o tempo todo. Esses são apenas padrões de formato para interoperabilidade e não determinam onde a fonte, em cache ou não, é armazenada.
CaptDragon
Uma solicitação típica GetFeature do WFS é uma solicitação para uma única coordenada; um cache para essa solicitação é bom apenas para correspondências exatas - que são raras em termos de interação do usuário. Alternativas como UTFGrid armazenam em cache blocos de dados e podem preenchê-lo de maneira otimista, diferentemente de um cache para milhões de coordenadas únicas. Dessa maneira, o padrão determina sua compatibilidade com o cache.
tmcw
Uau- Obrigado por toda a ajuda. Sendo que estou usando o OpenLayers e meu mapa está em 4326 (que não é suportado pelo TileMill), você recomendaria o CartoDB como um meio de armazenar e acessar meus dados?
KyleK