Post on 11-Jan-2016
description
Banco de Dados Espaciais
Sistema de Informações Geográficas
2006.2
Prof. Cláudio Baptista
Oracle Spatial
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: Um esquema MDSYS que provê o tipo de dado geométrico; Um mecanismo de indexação espacial; Um conjunto de operadores e funções para executar consultas
espaciais, junções espaciais e outras operações de análise espacial;
Utilitários administrativos
Oracle Spatial
Modelo de dados 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 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 SDO_RELATE- Operadores topológicos
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 O tipo SDO_Geometry é definido como:
CREATE TYPE sdo_geometry AS OBJECT ( SDO_GTYPE NUMBER, SDO_SRID NUMBER, SDO_POINT SDO_POINT_TYPE,SDO_ELEM_INFO 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;
Existem outros tipos para lidar com GeoRaster, GeoCoding e Topologia e Redes
Oracle Spatial – Tipos de Dados Espaciais O atributo SDO_GTYPE indica o tipo da
geometria (segue OGC Simple Feature for SQL. Possui 4 dígitos no formato dltt, onde
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 – MultiPoint, 06 – MultiLine, 07 – MultiPolygon
Ex. 2003 => Polígono em 2-dimensões
Oracle Spatial – Tipos de Dados Espaciais 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 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 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: SDO_STARTING_OFFSET: indica qual a posição da primeira
coordenada do elemento no SDO_ORDINATES; SDO_ETYPE: indica o tipo do elemento; SDO_INTERPRETATION: indica como o elemento deve ser
interpretado juntamente com o SDO_ETYPE.
SDO_ORDINATES: contém os pontos que compõem a geometria
Oracle Spatial – Tipos de Dados Espaciais Exemplo: Para o retângulo ao lado:
SDO_GEOMETRY: 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, 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 -- Cartesian-coordinate data ) );
Oracle Spatial – Tipos de Dados Espaciais Ex2: Figure 2-3 Polygon with a Hole
Oracle Spatial – Tipos de Dados Espaciais Para o Ex2 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 19a. 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,10, 10,5, 7,5).
Oracle Spatial – Tipos de Dados Espaciais Comando SQL para o EX2.:
INSERT INTO cola_markets VALUES( 10, 'polygon_with_hole', SDO_GEOMETRY( 2003, -- two-dimensional polygon NULL, 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,10, 10,5, 7,5) ) );
Oracle Spatial – Tipos de Dados Espaciais Ex.3: Ponto SDO_GEOMETRY:
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));
Oracle Spatial – Metadados
Existem duas visões no esquema MDSYS: 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 VARCHAR2(32),
COLUMN_NAME VARCHAR2(32),
DIMINFO SDO_DIM_ARRAY,
SRID NUMBER
);
Oracle Spatial – Metadados
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. 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 VARCHAR2(64),
SDO_LB NUMBER, SDO_UB NUMBER, SDO_TOLERANCE NUMBER);
SRID: Sistema de referência espacial
Oracle Spatial – Metadados
Exemplo:
INSERT INTO USER_SDO_GEOM_METADATA VALUES ( 'cola_markets', 'shape', SDO_DIM_ARRAY( -- 20X20 grid SDO_DIM_ELEMENT('X', 0, 20, 0.005), SDO_DIM_ELEMENT('Y', 0, 20, 0.005) ), NULL -- SRID );
Oracle Spatial - Exemplos
Dos distritos de São Paulo, mostrados na fig ao lado
CREATE TABLE DistritosSP (
cod NUMBER(32) NOT NULL ,
sigla VARCHAR2(20),
denominacao VARCHAR2(200),
spatial_data MDSYS.SDO_GEOMETRY, PRIMARY KEY (cod))
Oracle Spatial - Exemplos
Dos bairros de São Paulo, mostrados na fig ao lado.
CREATE TABLE BairrosSP (
geom_id NUMBER(32) NOT NULL,
bairro VARCHAR2(200),
distr VARCHAR2(200),
spatial_data MDSYS.SDO_GEOMETRY,
PRIMARY KEY (geom_id))
Oracle Spatial - Exemplos
Do mapa de drenagem, mostrado na fig. ao lado.
CREATE TABLE DrenagemSP (
geom_id NUMBER(32) NOT NULL,
classe VARCHAR2(100) NULL,
spatial_data MDSYS.SDO_GEOMETRY,
PRIMARY KEY (geom_id))
Oracle Spatial - Exemplos
Inserindo dados:INSERT INTO DistritosSP (cod, sigla, denominacao,spatial_data) VALUES (1, 'VMR', 'VILA MARIA'MDSYS.SDO_GEOMETRY(2003, NULL, NULL,MDSYS.SDO_ELEM_INFO_ARRAY( 1, 1003, 1 ),MDSYS.SDO_ORDINATE_ARRAY(6,10, 10,1,
14,10, 10,14, 6,10)))
OBS.: Num polígono o primeiro ponto é igual ao último
Oracle Spatial - Exemplos
INSERT INTO DrenagemSP ( geom_id, classe, spatial_data) VALUES (1, 'RIO',
MDSYS.SDO_GEOMETRY(2002, NULL, NULL,MDSYS.SDO_ELEM_INFO_ARRAY( 1, 2, 1 ),MDSYS.SDO_ORDINATE_ARRAY(10,10, 10,14, 6,10,
14,10)))
INSERT INTO BairrosSP ( 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))
Oracle Spatial - Exemplos
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 ( 'DistritosSP' ,'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;
Exemplo:
CREATE INDEX DistritosSP_IDX ON
DistritosSP(SPATIAL_DATA) INDEXTYPE IS
MDSYS.SPATIAL_INDEX
Oracle Spatial - Consultas
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 - ConsultasPrincipais 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 (geometry1 SDO_GEOMETRY,geometry2 SDO_GEOMETRY)
SDO_RELATE Avalia se as geometrias possuem uma determinada relação topológica. Sintaxe: SDO_RELATE (geometry1 SDO_GEOMETRY, geometry2 SDO_GEOMETRY,param VARCHAR2). Param pode serEQUAL, 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 (geometry1 SDO_GEOMETRY, aGeom SDO_GEOMETRY,params VARCHAR2);
SDO_NN: Identifica os n vizinhos mais próximos de umaGeometria. Sintaxe: SDO_NN (geometry1 SDO_GEOMETRY, aGeom SDO_GEOMETRY, param VARCHAR2, [, number NUMBER]);
Oracle Spatial - Consultas
As funções fornecidas pelo Spatial podem ser agrupadas em: Relação (verdadeiro/falso) entre duas geometrias:
RELATE e WITHIN_DISTANCE. Validação:
VALIDATE_GEOMETRY_WITH_CONTEXT,VALIDATE_LAYER_WITH_CONTEXT.
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. 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ãoPaulo que são vizinhos ao município de São Paulo.
SELECT t1.nomemunicpFROM MunicipiosSP t1, MunicipiosSP t2WHERE SDO_RELATE (t1.spatial_data,t2.spatial_data, 'mask=TOUCH') = 'TRUE'AND t2.nomemunicp = 'SAO PAULO'
Ou, usando o operador TOUCH diretamente:SELECT t1.nomemunicpFROM MunicipiosSP t1, MunicipiosSP t2WHERESDO_TOUCH (t1.spatial_data, t2.spatial_data) ='TRUE' AND t2.nomemunicp = 'SAO PAULO'
Oracle Spatial - Consultas
Consulta 2: Recuperar o nome de todos os municípios da grande SãoPaulo que são vizinhos ao distrito Anhanguera da cidade de São Paulo
SELECT t1.nomemunicpFROM MunicipiosSP t1, DistritosSP t2WHERE SDO_RELATE (t1.spatial_data, t2.spatial_data,'mask= TOUCH') = 'TRUE'AND t2.denominacao = 'ANHANGUERA'
Ou usando TOUCH:SELECT t1.nomemunicpFROM MunicipiosSP t1, DistritosSP t2WHERE SDO_TOUCH (t1.spatial_data, t2.spatial_data) = 'TRUE'AND t2.denominacao = 'ANHANGUERA'
Oracle Spatial - Consultas
Consulta 3:Recuperar o número de bairros contidos no distritoGrajaú
SELECT COUNT(*)FROM BairrosSP t1, DistritosSP t2WHERE SDO_RELATE (t1.spatial_data, t2.spatial_data,'mask=INSIDE') = 'TRUE'AND t2.denominacao = 'GRAJAU'
Ou usando SDO_INSIDE:SELECT COUNT(*)FROM BairrosSP t1, DistritosSP t2WHERE SDO_INSIDE (t1.spatial_data, t2.spatial_data) ='TRUE' AND t2.denominacao = 'GRAJAU'
Oracle Spatial - Consultas
Consulta 4: Recuperar todos os distritos que estão num raio de 3km de um determinado rio
SELECT t1.denominacaoFROM DistritosSP t1, DreanagemSP t2,user_sdo_geom_metadata mWHERE SDO_RELATE
(t1.spatial_data,SDO_GEOM.SDO_BUFFER(t2.spatial_
data, m.diminfo, 3000),'mask=INSIDE+TOUCH+
OVERLAPBDYINTERSECT')= 'TRUE'AND m.table_name = ' DreanagemSP 'AND m.column_name = 'spatial_data'AND t2.geom_id = 55
Oracle Spatial - Consultas
Consulta 5: Recuperar todos os bairros que estejam a menos de 3 Km do bairro Boacava
SELECT t1.BAIRRO
FROM BairrosSP t1, BairrosSP t2
WHERE SDO_GEOM.SDO_DISTANCE (t1.spatial_data, t2.spatial_data, 0.00005) < 3000 AND t2.bairro = 'BOACAVA'
Oracle Spatial – Outras Características GeoRaster: para lidar com dados raster GeoCoding: endereçamento reverso Spatial Topology and Network Spatial Analysis and Mining
PostGIS-PostgreSQL
PostGIS é uma extensão espacial para o PostgreSQL que implementa a especificação padrão OGC
Tipos de dados PostGIS:
PostGIS-PostgreSQL
Esses tipos possuem a seguinte representação textual: Point: (0 0 0) LineString: (0 0, 1 1, 2 2) Polygon: ((0 0 0, 4 0 0, 4 4 0, 0 4 0, 0 0 0), ( 1 0 0, ...), ...) MultiPoint: (0 0 0, 4 4 0) MultiLineString: ((0 0 0, 1 1 0, 2 2 0), (4 4 0, 5 5 0, 6 6 0)) MultiPolygon: (((0 0 0, 4 0 0, 4 4 0, 0 4 0, 0 0 0), (...), ...), ...) GeometryCollection: (POINT(2 2 0), LINESTRING((4 4 0, 9
9 0))
PostGIS-PostgreSQL
Dos distritos de São Paulo,
CREATE TABLE distritossp
( cod SERIAL, sigla VARCHAR(10), denominacao VARCHAR(50),
PRIMARY KEY (cod) );
SELECT AddGeometryColumn(‘BDEspacial', 'distritossp', 'spatial_data', -1, 'POLYGON', 2);
PostGIS-PostgreSQL
Adicione uma coluna espacial à tabela usando a função OpenGIS "AddGeometryColumn".
A sintaxe é:AddGeometryColumn(<schema_name>, <table_name>,<column_name>, <srid>, <type>,<dimension>) Ou, usando o esquema corrente:AddGeometryColumn(<table_name>, <column_name>, <srid>,
<type>,<dimension>) Exemplo1: SELECT AddGeometryColumn(’public’,
’roads_geom’, ’geom’, 423, ’LINESTRING’, 2) Exemplo2: SELECT AddGeometryColumn( ’roads_geom’,
’geom’, 423, ’LINESTRING’, 2)
PostGIS-PostgreSQL
Dos bairros de São Paulo
CREATE TABLE bairrossp
( cod SERIAL,
bairro VARCHAR(40),
distr VARCHAR(40),
PRIMARY KEY (cod));
SELECT AddGeometryColumn(‘BDEspacial',
'bairrossp', 'spatial_data', -1, 'POINT', 2);
PostGIS-PostgreSQL
Do mapa de drenagem
CREATE TABLE drenagemsp
( cod SERIAL,
classe VARCHAR(255) NULL,
PRIMARY KEY (cod)
);
SELECT AddGeometryColumn(‘BDEspacial', 'drenagemsp', 'spatial_data', -1, 'LINESTRING', 2);
PostGIS-PostgreSQL
Tabela de metadados
The Well-Known Text representation of the Spatial Reference System. An example of a WKTnSRS representation is:
PROJCS["NAD83 / UTM Zone 10N", GEOGCS["NAD83", 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]]
PostGIS-PostgreSQL
Tabela de metadados Geometry_Columns
PostGIS-PostgreSQL – Inserção de DadosINSERT INTO bairrossp (bairro, spatial_data)VALUES('JARDIM DOS EUCALIPTOS',GeometryFromText('POINT(321588.628426 7351166.969244)',-1));
INSERT INTO drenagemsp (classe, spatial_data)VALUES('RIOS',GeometryFromText('LINESTRING(344467.895137 7401824.476217,344481.584686 7401824.518728, 344492.194756 7401825.716359,…)’, -1));
INSERT INTO distritossp (denominacao, sigla, spatial_data)VALUES('MARSILAC', ‘MAR’,GeometryFromText('POLYGON((335589.530575 7356020.721956,335773.784959 7355873.470174, …))', -1));
PostGIS-PostgreSQL – Inserção de DadosCarregando dados de um Shapefile:
# shp2pgsql shaperoads myschema.roadstable | psql -d roadsdb
PostGIS-PostgreSQL – Index
Sintaxe: CREATE INDEX sp_idx_name ON nome_tabela USING GIST (coluna_geometrica GIST_GEOMETRY_OPS);
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)
PostGIS-PostgreSQL – Index
Forçando o uso do index numa consulta através do operador &&::
SELECT * FROM grande_sp
WHERE 'BOX3D(438164.882699 7435582.150681,
275421.967006 7337341.000355)'::box3d
&& spatial_data);
PostGIS-PostgreSQL – Consultas Operadores topológicos conforme a Matriz de 9-
Interseções : 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.
PostGIS-PostgreSQL – Consultas 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:
intersection(geometry, geometry) geomUnion(geometry, geometry) difference(geometry, geometry)
PostGIS-PostgreSQL – Consultas Operadores Métricos:
distance(geometry,geometry) area(geometry)
Centróide de geometrias: Centroid(geometry)
•Validação (verifica se a geometria possui auto-interseções): isSimple(geometry)
PostGIS-PostgreSQL – Consultas Consulta 1:
SELECT d2.nomemunicp
FROM grande_sp d1, grande_sp d2
WHERE touches(d1.spatial_data, d2.spatial_data)
AND (d2.nomemunicp <> 'SAO PAULO')
AND (d1.nomemunicp = 'SAO PAULO');
PostGIS-PostgreSQL – Consultas Consulta 1: Usando o índice espacial
SELECT d2.nomemunicp
FROM distritossp d1, distritossp d2
WHERE touches(d1.spatial_data, d2.spatial_data)
AND (d2.nomemunicp <> 'SAO PAULO')
AND (d1.spatial_data && d2.spatial_data)
AND (d1.nomemunicp = 'SAO PAULO');
PostGIS-PostgreSQL – 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');
PostGIS-PostgreSQL – 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';
PostGIS-PostgreSQL – 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;
PostGIS-PostgreSQL – Consultas Consulta 5:
SELECT b1.bairro
FROM bairrossp b1, bairrossp b2
WHERE (distance(b1.spatial_data, b2.spatial_data)
< 3000)
AND b1.bairro <> 'BOACAVA'
AND b2.bairro = 'BOACAVA' order by b1.bairro;
Oracle Spatial - Consultas