Banco de Dados Espaciais Sistema de Informaes Geogrficas
Banco de Dados Espaciais Sistema de Informações Geográficas 2006. 2 Prof. Cláudio Baptista
Oracle Spatial n n n Provê um esquema SQL e funções que facilitam o armazenamento, recuperação, atualização, e consulta de coleções de feições espaciais num Oracle database. Um geo-objeto é definido como um atributo de tipo SDO_GEOMETRY (antigo MDSYS. SDO_GEOMETRY) de uma tabela OR. Consiste dos seguintes componentes: q Um esquema MDSYS que provê o tipo de dado geométrico; q Um mecanismo de indexação espacial; q Um conjunto de operadores e funções para executar consultas espaciais, junções espaciais e outras operações de análise espacial; q Utilitários administrativos
Oracle Spatial n Modelo de dados q q q Element (point, polygon, linestring) Geometria (geometry object): representação de uma feição espacial modelado com um conjunto de elementos primitivos. Layer: coleção de geometrias com o mesmo conjunto de atributos Coordinate System (também chamado Spatial Reference System) Tolerance: reflete a distância que dois pontos podem estar para ainda serem considerados o mesmo ponto (útil em correção de erro).
Oracle Spatial – Operações Espaciais n n n SDO_RELATE: usa um critério espacial, implementando o modelo de 9 -interseções, com os relacionamentos topológicos (disjoint, touches, equals, inside, etc. ) SDO_WITHIN_DISTANCE: implementa um buffer. Indica se geo-objetos estão a uma certa distância um do outro SDO_NN: indica os vizinhos mais próximos (Nearest Neghbor) de um geo-objeto.
Oracle Spatial – Operações Espaciais n SDO_RELATE- Operadores topológicos q q q DISJOINT : as bordas e interiores não se interceptam TOUCH: as bordas interceptam mais os interiores não. OVERLAPBDYDISJOINT – uma linha origina-se for a de um polígono mas termina dentro OVERLAPBDYINTERSECT – insterseção de borda com interior EQUAL – dois objetos têm a mesma borda e mesmo interior. CONTAINS – o interior e borda de um objeto está completamente contido no interior do outro objeto. COVERS -- o interior de um objeto está completamente contidono interior ou borda de outro objeto e suas bordas se interceptam. INSIDE – o oposto de CONTAINS. A INSIDE B implica que B CONTAINS A. COVEREDBY – o oposto de COVERS ON -- o interior e borda de um objeto está na borda de outro objeto ( e o segundo objeto cobre o primeiro objeto). Por exemplo, quando uma linha está na borda de um polígono. ANYINTERACT – os objetos são non-disjoint
Oracle Spatial – Operações Espaciais
Oracle Spatial – Tipos de Dados Espaciais n O tipo SDO_Geometry é definido como: CREATE TYPE sdo_geometry AS OBJECT ( SDO_GTYPE NUMBER, SDO_SRID NUMBER, SDO_POINT_TYPE, SDO_ELEM_INFO_ARRAY, SDO_ORDINATES SDO_ORDINATE_ARRAY); CREATE TYPE sdo_point_type AS OBJECT ( X NUMBER, Y NUMBER, Z NUMBER); CREATE TYPE sdo_elem_info_array AS VARRAY (1048576) of NUMBER; CREATE TYPE sdo_ordinate_array AS VARRAY (1048576) of NUMBER; n Existem outros tipos para lidar com Geo. Raster, Geo. Coding e Topologia e Redes
Oracle Spatial – Tipos de Dados Espaciais n O atributo SDO_GTYPE indica o tipo da geometria (segue OGC Simple Feature for SQL. Possui 4 dígitos no formato dltt, onde q q d: indica o número de dimensões (2, 3 ou 4) l: usado em geometrias 3 -dimensões. Colocar 0 para default. tt: indica o tipo da geometria (00 a 07) (00 – Unknown geometry, 01 – Point, 02 – Line ou Curve, 03 – Polygon, 04 – Collection, 05 – Multi. Point, 06 – Multi. Line, 07 – Multi. Polygon Ex. 2003 => Polígono em 2 -dimensões
Oracle Spatial – Tipos de Dados Espaciais n n O atributo SDO_SRID identifica um sistema de coordenadas (spatial reference system) para geometria. Se não null, deve conter um valor da coluna SRID da tabela MDSYS. CS_SRS Todos os valores de uma geometria devem ter o mesmo SRID
Oracle Spatial – Tipos de Dados Espaciais n n O atributo SDO_POINT é do tipo SDO_POINT_TYPE que possui 3 number X, Y, Z: OBS. : usado para armazenar pontos, neste caso os arrays SDO_ELEM_INFO e SDO_ORDINATES devem ser null
Oracle Spatial – Tipos de Dados Espaciais n SDO_ELEM_INFO : é um vetor de tamanho variável que armazena as características dos elementos que compõem a geometria. As coordenadas de cada elemento são armazenadas em um vetor variável chamado SDO_ORDINATES e são interpretadas através de três números armazenados no SDO_ELEM_INFO: q SDO_STARTING_OFFSET: indica qual a posição da primeira coordenada do elemento no SDO_ORDINATES; q SDO_ETYPE: indica o tipo do elemento; q SDO_INTERPRETATION: indica como o elemento deve ser interpretado juntamente com o SDO_ETYPE. n SDO_ORDINATES: contém os pontos que compõem a geometria
Oracle Spatial – Tipos de Dados Espaciais n Exemplo: Para o retângulo ao lado: n SDO_GEOMETRY: q q q SDO_GTYPE = 2003 ( 2 indica 2 -dimensões, e 03 indica um polígono. SDO_SRID = NULL. SDO_POINT = NULL. SDO_ELEM_INFO = (1, 1003, 3). O último 3 indica que é um retângulo. SDO_ORDINATES = (1, 1, 5, 7). Identificam as coordenadas lower-left e upper-right do retângulo.
Oracle Spatial – Tipos de Dados Espaciais Comando SQL para o ex. do retângulo: INSERT INTO cola_markets VALUES( 1, 'cola_a', SDO_GEOMETRY( 2003, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), -- one rectangle (1003 = exterior) SDO_ORDINATE_ARRAY(1, 1, 5, 7) -- only 2 points needed to -- define rectangle (lower left and upper right) with -- Cartesiancoordinate data ) ); n
Oracle Spatial – Tipos de Dados Espaciais n Ex 2: Figure 2 -3 Polygon with a Hole
Oracle Spatial – Tipos de Dados Espaciais n n n n Para o Ex 2 temos: SDO_GTYPE = 2003. O 2 indica 2 -dimensões, e o 3 indica um polígono. SDO_SRID = NULL. SDO_POINT = NULL. SDO_ELEM_INFO = (1, 1003, 1, 19, 2003, 1). Há duas triplas: 1, 1003, 1 e 19, 2003, 1. 1003 indica que o elementoé um exterior polygon ring; 2003 indica que elemento é um interior polygon ring. 19 indica que a coordenada do segundo elemento (interior polygon ring) inicia na 19 a. Posição do array SDO_ORDINATES array (isto é, 7, ou seja o primeiro ponto é 7, 5). SDO_ORDINATES = (2, 4, 4, 3, 10, 3, 13, 5, 13, 9, 11, 13, 5, 13, 2, 11, 2, 4, 7, 5, 7, 10, 10, 5, 7, 5).
Oracle Spatial – Tipos de Dados Espaciais Comando SQL para o EX 2. : INSERT INTO cola_markets VALUES( 10, 'polygon_with_hole', SDO_GEOMETRY( 2003, -- two-dimensional polygon NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 19, 2003, 1), -- polygon with hole SDO_ORDINATE_ARRAY(2, 4, 4, 3, 10, 3, 13, 5, 13, 9, 11, 13, 5, 13, 2, 11, 2, 4, 7, 5, 7, 10, 10, 5, 7, 5) ) ); n
Oracle Spatial – Tipos de Dados Espaciais n n Ex. 3: Ponto SDO_GEOMETRY: q n n n SDO_GTYPE = 2001. O 2 indica 2 -dimensões, e o 1 indica um único ponto. SDO_SRID = NULL. SDO_POINT = SDO_POINT_TYPE(12, 14, NULL). O atributo SDO_POINT é definedo usando o SDO_POINT_TYPE object type, porque esta é uma geometria de ponto. SDO_ELEM_INFO e SDO_ORDINATES são ambos NULL.
Oracle Spatial – Tipos de Dados Espaciais Comando SQL para o Ex. 3: Ponto INSERT INTO cola_markets VALUES( 90, 'point_only', SDO_GEOMETRY( 2001, NULL, SDO_POINT_TYPE(12, 14, NULL), NULL, NULL)); n
Oracle Spatial – Metadados n Existem duas visões no esquema MDSYS: q q q USER_SDO_GEOM_METADATA contém metadata para todas as tabelas espaciais possuidas pelo esquema do usuário. Cada coluna espacial deve ter uma linha inserida nesta view. ALL_SDO_GEOM_METADATA contém metadata para todas tabelas espaciais nas quais o usuário tem permissão SELECT. Existem também metadados para index: USER_SDO_INDEX_METADATA e ALL_SDO_INDEX_INFO
Oracle Spatial – Metadados A visão tem a seguinte estrutura: ( TABLE_NAME VARCHAR 2(32), COLUMN_NAME VARCHAR 2(32), DIMINFO SDO_DIM_ARRAY, SRID NUMBER ); n
Oracle Spatial – Metadados n n n TABLE_NAME: contém o nome da tabela COLUMN_NAME: nome da coluna do tipo SDO_GEOMETRY DIMINFO: é um array de tamanho variável de um object type, ordenado por dimension, e tem uma entrada para cada dimensão. q Definido da seguinte forma: Create Type SDO_DIM_ARRAY as VARRAY(4) of SDO_DIM_ELEMENT; Create Type SDO_DIM_ELEMENT as OBJECT ( SDO_DIMNAME VARCHAR 2(64), SDO_LB NUMBER, SDO_UB NUMBER, SDO_TOLERANCE NUMBER); n SRID: Sistema de referência espacial
Oracle Spatial – Metadados Exemplo: INSERT INTO USER_SDO_GEOM_METADATA VALUES ( 'cola_markets', 'shape', SDO_DIM_ARRAY( - 20 X 20 grid SDO_DIM_ELEMENT('X', 0, 20, 0. 005), SDO_DIM_ELEMENT('Y', 0, 20, 0. 005) ), NULL -- SRID ); n
Oracle Spatial - Exemplos n Dos distritos de São Paulo, mostrados na fig ao lado CREATE TABLE Distritos. SP ( cod NUMBER(32) NOT NULL , sigla VARCHAR 2(20), denominacao VARCHAR 2(200), spatial_data MDSYS. SDO_GEOMETRY, PRIMARY KEY (cod))
Oracle Spatial - Exemplos n Dos bairros de São Paulo, mostrados na fig ao lado. CREATE TABLE Bairros. SP ( geom_id NUMBER(32) NOT NULL, bairro VARCHAR 2(200), distr VARCHAR 2(200), spatial_data MDSYS. SDO_GEOMETRY, PRIMARY KEY (geom_id))
Oracle Spatial - Exemplos n Do mapa de drenagem, mostrado na fig. ao lado. CREATE TABLE Drenagem. SP ( geom_id NUMBER(32) NOT NULL, classe VARCHAR 2(100) NULL, spatial_data MDSYS. SDO_GEOMETRY, PRIMARY KEY (geom_id))
Oracle Spatial - Exemplos Inserindo dados: INSERT INTO Distritos. SP (cod, sigla, denominacao, spatial_data) VALUES (1, 'VMR', 'VILA MARIA' MDSYS. SDO_GEOMETRY(2003, NULL, MDSYS. SDO_ELEM_INFO_ARRAY( 1, 1003, 1 ), MDSYS. SDO_ORDINATE_ARRAY(6, 10, 1, 14, 10, 14, 6, 10))) n OBS. : Num polígono o primeiro ponto é igual ao último
Oracle Spatial - Exemplos INSERT INTO Drenagem. SP ( geom_id, classe, spatial_data) VALUES (1, 'RIO', MDSYS. SDO_GEOMETRY(2002, NULL, MDSYS. SDO_ELEM_INFO_ARRAY( 1, 2, 1 ), MDSYS. SDO_ORDINATE_ARRAY(10, 10, 14, 6, 10, 14, 10))) n INSERT INTO Bairros. SP ( geom_id, bairro, distr, spatial_data) VALUES ( 1, 'JARDIM SHANGRILA', 'GRAJAU' MDSYS. SDO_GEOMETRY(2001, NULL, MDSYS. SDO_POINT_TYPE(32. 628, 736. 944, NULL ), NULL, NULL)) n
Oracle Spatial - Exemplos n Após criar e inserir os dados em uma tabela espacial, o usuário deve registrar seu metadado. INSERT INTO USER_SDO_GEOM_METADATA VALUES ( 'Distritos. SP' , 'spatial_data' , MDSYS. SDO_DIM_ARRAY( MDSYS. SDO_DIM_ELEMENT('X', 275. 9670, 429. 567, 0. 0005), MDSYS. SDO_DIM_ELEMENT('Y', 833. 0355, 582. 15, 0. 0005)), NULL)
Oracle Spatial - Exemplos Criando índices (RTREE): CREATE INDEX index_name ON table_name (spatial_column_name) INDEXTYPE IS MDSYS. SPATIAL_INDEX; n Exemplo: CREATE INDEX Distritos. SP_IDX ON Distritos. SP(SPATIAL_DATA) INDEXTYPE IS MDSYS. SPATIAL_INDEX
Oracle Spatial - Consultas n n n O Oracle Spatial utiliza um modelo de consulta baseado em duas etapas, chamadas de primeiro e segundo filtro. O primeiro filtro considera as aproximações das geometrias, pelo critério do mínimo retângulo envolvente (MBR), para reduzir a complexidade computacional. Este filtro é de baixo custo computacional e seleciona um subconjunto menor de geometrias candidatas, que será passado para o segundo filtro. O segundo filtro trabalha com as geometrias exatas, por isso é computacionalmente mais caro e só é aplicado ao subconjunto resultante do primeiro filtro. Retorna o resultado exato da consulta.
Oracle Spatial - Consultas Principais operadores: SDO_FILTER: Implementa o primeiro filtro do modelo de consulta, ou seja, verifica se os mínimos retângulos envolventes das geometrias têm alguma interação entre si. Sintaxe: SDO_FILTER (geometry 1 SDO_GEOMETRY, geometry 2 SDO_GEOMETRY) SDO_RELATE Avalia se as geometrias possuem uma determinada relação topológica. Sintaxe: SDO_RELATE (geometry 1 SDO_GEOMETRY, geometry 2 SDO_GEOMETRY, param VARCHAR 2). Param pode ser. EQUAL, DISJOINT, TOUCH, INSIDE, COVERS, COVERREDBY, OVERLAPBDYINTERSECT, ON, CONTAINS, OVERLAPBDYDISJOINT e ANYINTERACT SDO_WITHIN_DISTANCE: Verifica se duas geometrias estão dentro de uma determinada distância. Sintaxe: SDO_WITHIN_DISTANCE (geometry 1 SDO_GEOMETRY, a. Geom SDO_GEOMETRY, params VARCHAR 2); SDO_NN: Identifica os n vizinhos mais próximos de uma Geometria. Sintaxe: SDO_NN (geometry 1 SDO_GEOMETRY, a. Geom SDO_GEOMETRY, param VARCHAR 2, [, number NUMBER]);
Oracle Spatial - Consultas n As funções fornecidas pelo Spatial podem ser agrupadas em: q Relação (verdadeiro/falso) entre duas geometrias: RELATE e WITHIN_DISTANCE. q Validação: VALIDATE_GEOMETRY_WITH_CONTEXT, VALIDATE_LAYER_WITH_CONTEXT. q Operações sobre uma geometria: SDO_ARC_DENSIFY, SDO_AREA, SDO_BUFFER, SDO_CENTROID, SDO_CONVEXHULL, SDO_LENGTH, SDO_MAX_MBR_ORDINATE, SDO_MIN_MBR_ORDINATE, SDO_MBR, SDO_POINTONSURFACE. q Operações sobre duas geometrias: SDO_DISTANCE, SDO_DIFFERENCE, SDO_INTERSECTION, SDO_UNION, SDO_XOR.
Oracle Spatial - Consultas Consulta 1: Recuperar o nome de todos os municípios da grande São Paulo que são vizinhos ao município de São Paulo. n SELECT t 1. nomemunicp FROM Municipios. SP t 1, Municipios. SP t 2 WHERE SDO_RELATE (t 1. spatial_data, t 2. spatial_data, 'mask=TOUCH') = 'TRUE' AND t 2. nomemunicp = 'SAO PAULO' Ou, usando o operador TOUCH diretamente: SELECT t 1. nomemunicp FROM Municipios. SP t 1, Municipios. SP t 2 WHERE SDO_TOUCH (t 1. spatial_data, t 2. spatial_data) = 'TRUE' AND t 2. nomemunicp = 'SAO PAULO'
Oracle Spatial - Consultas Consulta 2: Recuperar o nome de todos os municípios da grande São Paulo que são vizinhos ao distrito Anhanguera da cidade de São Paulo n SELECT t 1. nomemunicp FROM Municipios. SP t 1, Distritos. SP t 2 WHERE SDO_RELATE (t 1. spatial_data, t 2. spatial_data, 'mask= TOUCH') = 'TRUE' AND t 2. denominacao = 'ANHANGUERA' Ou usando TOUCH: SELECT t 1. nomemunicp FROM Municipios. SP t 1, Distritos. SP t 2 WHERE SDO_TOUCH (t 1. spatial_data, t 2. spatial_data) = 'TRUE' AND t 2. denominacao = 'ANHANGUERA'
Oracle Spatial - Consultas Consulta 3: Recuperar o número de bairros contidos no distrito Grajaú n SELECT COUNT(*) FROM Bairros. SP t 1, Distritos. SP t 2 WHERE SDO_RELATE (t 1. spatial_data, t 2. spatial_data, 'mask=INSIDE') = 'TRUE' AND t 2. denominacao = 'GRAJAU' Ou usando SDO_INSIDE: SELECT COUNT(*) FROM Bairros. SP t 1, Distritos. SP t 2 WHERE SDO_INSIDE (t 1. spatial_data, t 2. spatial_data) = 'TRUE' AND t 2. denominacao = 'GRAJAU'
Oracle Spatial - Consultas n Consulta 4: Recuperar todos os distritos que estão num raio de 3 km de um determinado rio SELECT t 1. denominacao FROM Distritos. SP t 1, Dreanagem. SP t 2, user_sdo_geom_metadata m WHERE SDO_RELATE (t 1. spatial_data, SDO_GEOM. SDO_BUFFER(t 2. spatial_ data, m. diminfo, 3000), 'mask=INSIDE+TOUCH+ OVERLAPBDYINTERSECT') = 'TRUE' AND m. table_name = ' Dreanagem. SP ' AND m. column_name = 'spatial_data' AND t 2. geom_id = 55
Oracle Spatial - Consultas Consulta 5: Recuperar todos os bairros que estejam a menos de 3 Km do bairro Boacava SELECT t 1. BAIRRO FROM Bairros. SP t 1, Bairros. SP t 2 WHERE SDO_GEOM. SDO_DISTANCE (t 1. spatial_data, t 2. spatial_data, 0. 00005) < 3000 AND t 2. bairro = 'BOACAVA' n
Oracle Spatial – Outras Características n n Geo. Raster: para lidar com dados raster Geo. Coding: endereçamento reverso Spatial Topology and Network Spatial Analysis and Mining
Post. GIS-Postgre. SQL n n Post. GIS é uma extensão espacial para o Postgre. SQL que implementa a especificação padrão OGC Tipos de dados Post. GIS:
Post. GIS-Postgre. SQL Esses tipos possuem a seguinte representação textual: n Point: (0 0 0) n Line. String: (0 0, 1 1, 2 2) n Polygon: ((0 0 0, 4 4 0, 0 0 0), ( 1 0 0, . . . ) n Multi. Point: (0 0 0, 4 4 0) n Multi. Line. String: ((0 0 0, 1 1 0, 2 2 0), (4 4 0, 5 5 0, 6 6 0)) n Multi. Polygon: (((0 0 0, 4 4 0, 0 0 0), (. . . ), . . . ) n Geometry. Collection: (POINT(2 2 0), LINESTRING((4 4 0, 9 9 0)) n
Post. GIS-Postgre. SQL Dos distritos de São Paulo, CREATE TABLE distritossp ( cod SERIAL, sigla VARCHAR(10), denominacao VARCHAR(50), PRIMARY KEY (cod) ); SELECT Add. Geometry. Column(‘BDEspacial', 'distritossp', 'spatial_data', -1, 'POLYGON', 2);
Post. GIS-Postgre. SQL Adicione uma coluna espacial à tabela usando a função Open. GIS "Add. Geometry. Column". n A sintaxe é: Add. Geometry. Column(<schema_name>, <table_name>, <column_name>, <srid>, <type>, <dimension>) n Ou, usando o esquema corrente: Add. Geometry. Column(<table_name>, <column_name>, <srid>, <type>, <dimension>) n Exemplo 1: SELECT Add. Geometry. Column(’public’, ’roads_geom’, ’geom’, 423, ’LINESTRING’, 2) n Exemplo 2: SELECT Add. Geometry. Column( ’roads_geom’, ’geom’, 423, ’LINESTRING’, 2) n
Post. GIS-Postgre. SQL Dos bairros de São Paulo CREATE TABLE bairrossp ( cod SERIAL, bairro VARCHAR(40), distr VARCHAR(40), PRIMARY KEY (cod)); SELECT Add. Geometry. Column(‘BDEspacial', 'bairrossp', 'spatial_data', -1, 'POINT', 2); n
Post. GIS-Postgre. SQL Do mapa de drenagem CREATE TABLE drenagemsp ( cod SERIAL, classe VARCHAR(255) NULL, PRIMARY KEY (cod) ); SELECT Add. Geometry. Column(‘BDEspacial', 'drenagemsp', 'spatial_data', -1, 'LINESTRING', 2); n
Post. GIS-Postgre. SQL n Tabela de metadados
The Well-Known Text representation of the Spatial Reference System. An example of a WKTn. SRS representation is: PROJCS["NAD 83 / UTM Zone 10 N", GEOGCS["NAD 83", DATUM["North_American_Datum_1983", SPHEROID["GRS 1980", 6378137, 298. 257222101] ], PRIMEM["Greenwich", 0], UNIT["degree", 0. 0174532925199433] ], PROJECTION["Transverse_Mercator"], PARAMETER["latitude_of_origin", 0], PARAMETER["central_meridian", -123], PARAMETER["scale_factor", 0. 9996], PARAMETER["false_easting", 500000], PARAMETER["false_northing", 0], UNIT["metre", 1] ] n
Post. GIS-Postgre. SQL n Tabela de metadados Geometry_Columns
Post. GIS-Postgre. SQL – Inserção de Dados INSERT INTO bairrossp (bairro, spatial_data) VALUES('JARDIM DOS EUCALIPTOS', Geometry. From. Text('POINT(321588. 628426 7351166. 969244)', -1)); INSERT INTO drenagemsp (classe, spatial_data)VALUES('RIOS', Geometry. From. Text('LINESTRING(344467. 895137 7401824. 476217, 344481. 584686 7401824. 518728, 344492. 194756 7401825. 716359, …)’, -1)); INSERT INTO distritossp (denominacao, sigla, spatial_data) VALUES('MARSILAC', ‘MAR’, Geometry. From. Text('POLYGON((335589. 530575 7356020. 721956, 335773. 784959 7355873. 470174, …))', -1));
Post. GIS-Postgre. SQL – Inserção de Dados Carregando dados de um Shapefile: # shp 2 pgsql shaperoads myschema. roadstable | psql -d roadsdb
Post. GIS-Postgre. SQL – Index Sintaxe: CREATE INDEX sp_idx_name ON nome_tabela USING GIST (coluna_geometrica GIST_GEOMETRY_OPS); n Exemplos: CREATE INDEX sp_idx_bairros ON bairrossp USING GIST (SPATIAL_DATA GIST_GEOMETRY_OPS) CREATE INDEX sp_idx_bairros ON distritossp USING GIST (SPATIAL_DATA GIST_GEOMETRY_OPS) n
Post. GIS-Postgre. SQL – Index Forçando o uso do index numa consulta através do operador &&: : SELECT * FROM grande_sp WHERE 'BOX 3 D(438164. 882699 7435582. 150681, 275421. 967006 7337341. 000355)': : box 3 d && spatial_data); n
Post. GIS-Postgre. SQL – Consultas n Operadores topológicos conforme a Matriz de 9 Interseções : q q q q q n equals(geometry, geometry) disjoint(geometry, geometry) intersects(geometry, geometry) touches(geometry, geometry) crosses(geometry, geometry) within(geometry, geometry) overlaps(geometry, geometry) contains(geometry, geometry) relate(geometry, geometry): retornam a matriz de intersecção.
Post. GIS-Postgre. SQL – Consultas n n n Operador de construção de mapas de distância: buffer(geometry, double, [integer]) Operador para construção do Fecho Convexo: convexhull(geometry) Operadores de conjunto: q q q intersection(geometry, geometry) geom. Union(geometry, geometry) difference(geometry, geometry)
Post. GIS-Postgre. SQL – Consultas n Operadores Métricos: q q n Centróide de geometrias: q n distance(geometry, geometry) area(geometry) Centroid(geometry) • Validação (verifica se a geometria possui autointerseções): q is. Simple(geometry)
Post. GIS-Postgre. SQL – Consultas Consulta 1: SELECT d 2. nomemunicp FROM grande_sp d 1, grande_sp d 2 WHERE touches(d 1. spatial_data, d 2. spatial_data) AND (d 2. nomemunicp <> 'SAO PAULO') AND (d 1. nomemunicp = 'SAO PAULO'); n
Post. GIS-Postgre. SQL – Consultas Consulta 1: Usando o índice espacial SELECT d 2. nomemunicp FROM distritossp d 1, distritossp d 2 WHERE touches(d 1. spatial_data, d 2. spatial_data) AND (d 2. nomemunicp <> 'SAO PAULO') AND (d 1. spatial_data && d 2. spatial_data) AND (d 1. nomemunicp = 'SAO PAULO'); n
Post. GIS-Postgre. SQL – Consultas Consulta 2: SELECT grande_sp. nomemunicp FROM distritossp, grande_sp WHERE touches(distritossp. spatial_data, grande_sp. spatial_data) AND (distritossp. spatial_data && grande_sp. spatial_data) AND (distritossp. denominacao = 'ANHANGUERA'); n
Post. GIS-Postgre. SQL – Consultas Consulta 3: SELECT COUNT(*) FROM bairrossp pt, distritossp pol WHERE contains(pol. spatial_data, pt. spatial_data) AND (pol. spatial_data && pt. spatial_data) AND pol. denominacao = 'GRAJAU'; n
Post. GIS-Postgre. SQL – Consultas Consulta 4: SELECT grande_sp. nomemunicp FROM grande_sp, drenagemsp WHERE intersects(buffer(drenagemsp. spatial_data, 3000), grande_sp. spatial_data) AND drenagemsp. cod = 59; n
Post. GIS-Postgre. SQL – Consultas Consulta 5: SELECT b 1. bairro FROM bairrossp b 1, bairrossp b 2 WHERE (distance(b 1. spatial_data, b 2. spatial_data) < 3000) AND b 1. bairro <> 'BOACAVA' AND b 2. bairro = 'BOACAVA' order by b 1. bairro; n
Oracle Spatial - Consultas
- Slides: 61