Selecionando pela caixa delimitadora com PostGIS


12

Eu tenho um grande conjunto de dados em um banco de dados PostGIS. Estou visualizando-o através de uma interface da web que carrega os dados como GeoJSON. Há muitos dados para fornecer ao cliente de uma só vez (10s de MBs no valor ...), então eu gostaria de obter uma área de dados dentro da caixa delimitadora formada pelas bordas da janela (a linha pontilhada na imagem abaixo ) Obter as coordenadas para os pontos f e g é fácil.

Pergunta 1: Essa é uma boa maneira de fazer as coisas? Devo pensar em colocá-los em cache como blocos ou esse método provavelmente será eficiente o suficiente?

Pergunta 2: Como recupero apenas os dados nessa caixa delimitadora?

Pergunta 3: Se uma forma se sobrepõe à borda da caixa delimitadora (por exemplo, forma A abaixo), existe uma maneira simples de cortá-la, como é consultada, como na segunda imagem?

insira a descrição da imagem aqui


Qual visualizador você está executando no cliente?
Underdark

Mapstraction. Atualmente, estou usando o OpenLayers como provedor.
21811 Mr_Chimp

Respostas:


8

basta alterar a ordem das perguntas e você tem um procedimento:

2) Selecione apenas o que cruza a bbox ( ST_Intersects).
3) Interseccione-o com a bbox para cortar os polígonos ( ST_Intersection).
1) Crie uma nova tabela com os resultados ( CREATE TABLE newtable AS SELECT...).

Os documentos ST_Intersection contêm um exemplo de código. Você precisará adaptá-lo e usar ST_PolygonFromText como bbox.


4

Eu acho que a maioria (todos) os clientes da web (e os gis de desktop também) estão fazendo isso. Você não pode enviar o conjunto de dados inteiro.

Se você deve configurar algum tipo de armazenamento em cache, depende se seus dados variam de forma estática ou se estão sendo alterados.

Para marcar esta caixa delimitadora, os dados serão muito rápidos (se você tiver um índice espacial), mas é claro que não é de graça. Você pagará com algum poder de CPU.

Como dito anteriormente: Para encontrar os polígonos dentro da sua extensão, você usa ST_Intersects.

Para obter apenas a parte dentro da sua extensão, use ST_Intersection, mas não faça isso. ST_Intersection é um processo caro. A menos que você tenha polígonos extremamente grandes, acho melhor enviar os polígonos inteiros.

Mas acho que você quer fazer isso rapidamente, em vez de colocá-lo em uma mesa

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.