Esta seção discute a construção de consultas espaciais que usam funções e predicados espaciais.
O DB2 Spatial Extender inclui funções que executam várias operações nos dados espaciais. Os exemplos nesta seção mostram como usar as funções espaciais para construir suas próprias consultas espaciais.
A Tabela 3 fornece uma lista das funções espaciais e os tipos de
operações que elas podem executar.
Tabela 3. Operações e funções espaciais
Tipo de função | Exemplo de operação |
---|---|
Cálculo | Cálculo da distância entre 2 pontos |
Comparação | Localiza todos os clientes localizados dentro de uma zona de inundação |
Permuta de dados | Converte dados nos formatos suportados |
Transformação | Inclui um raio de cinco milhas em um ponto |
Para obter mais informações sobre as funções espaciais, consulte Geometrias e funções espaciais associadas e Funções espaciais para consultas SQL.
A seguinte consulta localiza a distância média do cliente a cada estabelecimento. As funções espaciais usadas neste exemplo são ST_Distance e ST_Within.
SELECT s.id, AVG(db2gse.ST_Distance(c.location,s.location)) FROM customers c, stores s WHERE db2gse.ST_Within(c.location,s.zone)=1 GROUP BY s.id
A seguinte consulta procura as localizações de clientes que vivem na Área da Baía de São Francisco (San Francisco Bay Area). As funções espaciais utilizadas neste exemplo são ST_AsText (permuta de dados) e ST_Within. ST_AsText converte os dados espaciais na coluna c.location no formato OGC TEXT.
SELECT db2gse.ST_AsText(c.location,cordref(1)) FROM customers c WHERE db2gse.ST_Within(c.location,:BayArea)=1
A seguinte consulta procura todas as ruas maiores que 10.5 milhas. A função espacial utilizada neste exemplo é a ST_Length.
SELECT s.name,s.id FROM street s WHERE db2gse.ST_Length(s.path) > 10.5
Esta consulta localiza os clientes que vivem dentro de uma área de inundação ou dentro de 2 milhas do limite da zona de inundação. As funções espaciais utilizadas neste exemplo são ST_Buffer (transformação) e ST_Within.
SELECT c.name,c.phoneNo,c.address FROM customers c WHERE db2gse.ST_Within(c.location,ST_Buffer(:floodzone,2))=1