Banco de Dados Espaciais Sistema de Informações Geográficas 2006.2 Prof. Cláudio Baptista.

Post on 07-Apr-2016

216 views 0 download

Transcript of Banco de Dados Espaciais Sistema de Informações Geográficas 2006.2 Prof. Cláudio Baptista.

Banco de Dados Espaciais

Sistema de Informações Geográficas2006.2Prof. 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: PontoINSERT 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_METADATAVALUES ( '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 ONDistritosSP(SPATIAL_DATA) INDEXTYPE ISMDSYS.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.BAIRROFROM BairrosSP t1, BairrosSP t2WHERE 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, 99 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 PauloCREATE 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 drenagemCREATE 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_spWHERE '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.nomemunicpFROM grande_sp d1, grande_sp d2WHERE 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 espacialSELECT d2.nomemunicpFROM distritossp d1, distritossp d2WHERE 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.nomemunicpFROM distritossp, grande_spWHERE 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 polWHERE 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.nomemunicpFROM grande_sp, drenagemspWHERE intersects(buffer(drenagemsp.spatial_data,

3000), grande_sp.spatial_data)AND drenagemsp.cod = 59;

PostGIS-PostgreSQL – Consultas Consulta 5: SELECT b1.bairroFROM bairrossp b1, bairrossp b2WHERE (distance(b1.spatial_data, b2.spatial_data)< 3000)AND b1.bairro <> 'BOACAVA'AND b2.bairro = 'BOACAVA' order by b1.bairro;

Oracle Spatial - Consultas