Post on 28-Jun-2020
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
SIGSIG
Operadores topológicos – SQLST_RELATE
Alisson Fernando Coelho do Carmo
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Arquitetura integradaArquitetura integrada
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
PostGIS + PostgreSQLPostGIS + PostgreSQL
PostGIS é uma extensão espacial para o PostgreSQL que implementa a especificação padrão OGC
Tipos de dados PostGIS:
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Tipos de dadosTipos de dados
Esses tipos possuem a seguinte representação textual:
Point: (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))
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Passos para construçãoPassos para construção
Construção do Banco de dados espacial
1- Planejamento do banco de dados
Esquematização (papel e lápis)
Definição das entidades e relacionamentos2 – Implementação do modelo (SQL)
Create table..., Foreign Key..., Primary key3 – Adição dos atributos espaciais
SELECT addGeometryColumn(....)4 – Inserção de dados
INSERT INTO...5 – Consulta e manipulação dos dados
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Planejamento do banco de dadosPlanejamento do banco de dados
Ex) Banco de dados para:
Registrar os dados e geometrias dos lotes
Registrar os dados e geometrias dos bairros
Definição dos atributos e tipos de dados
Esquematização lógica do banco de dados
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Implementação do modelo (SQL)Implementação do modelo (SQL)
Para instalar a extensão espacial POSTGIS:
– Download do instalador POSTGIS
– Instalar POSTGIS
– Criar a extensão no banco de dados:• CREATE EXTENSION POSTGIS;
Utilizar as funções do POSTGIS (instalado no public):
– SET SEARCH_PATH TO nome_usu, public;
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Consulta e manipulação dos dadosConsulta e manipulação dos dados
Operadores topológicos conforme a Matriz de 9-Interseções :
st_equals(geometry, geometry)
st_disjoint(geometry, geometry)
st_intersects(geometry, geometry)
st_touches(geometry, geometry)
st_crosses(geometry, geometry)
st_within(geometry, geometry)
st_overlaps(geometry, geometry)
st_contains(geometry, geometry)
Retornam a matriz de intersecção.
st_relate(geometry, geometry):
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Operadores topológicos (Todos)Operadores topológicos (Todos)
boolean ST_Relate(geometry geomA, geometry geomB, text intersectionMatrixPattern);
text ST_Relate(geometry geomA, geometry geomB);
SELECT ST_Relate(
ST_GeometryFromText('POINT(1 2)'),
ST_Buffer(ST_GeometryFromText('POINT(1 2)'),2)
);
0FFFFF212
SELECT ST_Relate(
ST_GeometryFromText('POINT(1 2)'),
ST_Buffer(ST_GeometryFromText('POINT(1 2)'),2),
'0FFFFF212');
t
DIMENSÕES0 => ponto1 => linha2 => áreaT => {0,1,2}F => vazio* => Qualquer
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Padrões da Padrões da DE-9IMDE-9IM
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Operadores topológicos (Todos)Operadores topológicos (Todos)
RESULTADO(RELATE)212101212
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Dados geométricosDados geométricos
A
B
(0,0) (10, 0) 20, 0 (27, 0)
(10, 0)
(20, 0) A(2, 18)(13, 18)(13, 7)(2, 7)
B(13, 18)(21, 18)(21, 2)(13, 2)
Fazer a DE-9IM:Interior, fronteira, exterior
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Inserção dos dadosInserção dos dados
Definição das coordenadas (sistema local)
A: (2, 18), (13, 18), (13, 7), (2, 7)
B: (13, 18), (21, 18), (21, 2), (13, 2)
Definição do SQL
SELECT ST_RELATE(
ST_GeomFromText('POLYGON((2 18, 13 18, 13 7, 2 7, 2 18))'),
ST_GeomFromText('POLYGON((13 18, 21 18, 21 2, 13 2, 13 18))')
);
"FF2F11212"
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Exemplos – operador topológicoExemplos – operador topológico
SELECT ST_RELATE(
ST_GeomFromText('POLYGON((2 2, 8 2, 8 4, 2 4, 2 2))'),
ST_GeomFromText('LINESTRING(1 1, 6 1)')
);
(2, 2)
(8, 4)
(1,1) (6,1)
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Exemplos – operador topológicoExemplos – operador topológico
SELECT ST_RELATE(
ST_GeomFromText('POLYGON((2 2, 8 2, 8 4, 2 4, 2 2))'),
ST_GeomFromText('LINESTRING(1 1, 6 1)')
);
(2, 2)
(8, 4)
(1,1) (6,1)
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Exemplos – operador topológicoExemplos – operador topológico
SELECT ST_RELATE(
ST_GeomFromText('POLYGON((1 1, 5 1, 5 4, 1 5, 1 1))'),
ST_GeomFromText('POLYGON((3 2, 9 2, 9 5, 3 5, 3 2))')
);
(1, 1)
(9, 5)
(5, 4)
(3, 2)
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Exemplos – operador topológicoExemplos – operador topológico
SELECT ST_RELATE(
ST_GeomFromText('POLYGON((1 1, 5 1, 5 4, 1 5, 1 1))'),
ST_GeomFromText('POLYGON((3 2, 9 2, 9 5, 3 5, 3 2))')
);
(1, 1)
(9, 5)
(5, 4)
(3, 2)
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Exemplos – operador topológicoExemplos – operador topológico
ST MakeBox2D ( ST Point ( 1 , 1 ) , ST Point ( 7 , 3 ) ) ,
ST MakeBox2D ( ST Point ( 3 , 3 ) , ST Point ( 9 , 5 ) )
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Exemplos – operador topológicoExemplos – operador topológico
ST MakeBox2D ( ST Point ( 1 , 1 ) , ST Point ( 7 , 3 ) ) ,
ST MakeBox2D ( ST Point ( 3 , 3 ) , ST Point ( 9 , 5 ) )
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Exemplos – operador topológicoExemplos – operador topológico
ST MakeBox2D ( ST Point ( 1 , 1 ) , ST Point ( 9 , 5 ) ) ,
ST MakeBox2D ( ST Point ( 2 , 2 ) , ST Point ( 8 , 4 ) )
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Exemplos – operador topológicoExemplos – operador topológico
ST MakeBox2D ( ST Point ( 1 , 1 ) , ST Point ( 9 , 5 ) ) ,
ST MakeBox2D ( ST Point ( 2 , 2 ) , ST Point ( 8 , 4 ) )
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Exemplos – operador topológicoExemplos – operador topológico
ST MakeBox2D ( ST Point ( 1 , 1 ) , ST Point ( 4 , 3 ) ) ,
ST MakeBox2D ( ST Point ( 6 , 3 ) , ST Point ( 9 , 5 ) )
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Exemplos – operador topológicoExemplos – operador topológico
ST MakeBox2D ( ST Point ( 1 , 1 ) , ST Point ( 4 , 3 ) ) ,
ST MakeBox2D ( ST Point ( 6 , 3 ) , ST Point ( 9 , 5 ) )
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Exemplos – operador topológicoExemplos – operador topológico
SELECT ST_RELATE(
ST_GeomFromText('POLYGON((2 2, 8 2, 8 4, 2 4, 2 2))'),
ST_GeomFromText('point(5 1)')
);
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Exemplos – operador topológicoExemplos – operador topológico
SELECT ST_RELATE(
ST_GeomFromText('POLYGON((2 2, 8 2, 8 4, 2 4, 2 2))'),
ST_GeomFromText('point(5 1)')
);
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Operadores topológicosOperadores topológicos
EXEMPLO com o TOCAR
boolean ST_Touches(geometry g1, geometry g2);
SELECT ST_Touches(
ST_GeomFromText('LINESTRING(0 0, 1 1, 0 2)'),
ST_GeomFromText('POINT(2 2)')
);
f
SELECT ST_Touches(
ST_GeomFromText('LINESTRING(0 0, 1 1, 0 2)'),
ST_GeomFromText('POINT(0 2)')
);
t
FALSE
TRUE
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
SFS – Simple Feature Specification
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Funções PostGIS - SFSFunções PostGIS - SFS
Especificação definida e bem documentada
Padrão OGC
É uma especificação criada pelo OGC que trata das seguintes
questões:
Armazenamento da componente espacial vetorial de dados geográficosem bancos de dados
Fornecimento de interface de acesso a esses dados:• SQL, CORBA e COM
• Versões: 1.1.0 e 1.2.0
Na prática:• SQL: PostgreSQL/PostGIS ou Oracle Spatial
• SQL + Linguagem: TerraLib+MySQL ou ARCSDE+SQLServer
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Funções PostGIS - SFSFunções PostGIS - SFS
Simple Feature Access - Part 1: Common Architecture
http://www.opengeospatial.org/standards/sfa
Modelo Geométrico
Operadores Espaciais
Simple Feature Access - Part 2: SQL Option
http://www.opengeospatial.org/standards/sfs
SQL
CORBA
COM
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Funções PostGIS - SFSFunções PostGIS - SFS
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Funções PostGIS - SFSFunções PostGIS - SFS
Dimensionalidade da figura geométrica:
0-dimensional: ponto
1-dimensional: linha
2-dimensional: polígono
Dimensionalidade do espaço onde está inserida a figura
geométrica:
2D: plano cartesiano
3D: espaço tridimensional
2D+M: plano cartesiano com uma medida associada
3D+M: espaço tridimensional com uma medida associada
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Tipos de dados espaciaisTipos de dados espaciais
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Integridade das geometriasIntegridade das geometrias
De acordo com SFS:
Todas as geometrias devem ser simples e válidas
(0-dim e 1-dim) Uma geometria é simples se:• Não possuir pontos anômalos
• Auto-intersecções
• Auto-tangência
Ponto:– É inerentemente simples (0-dim)
Multipoint:– Não possuir dois pontos iguais (mesma coord.)
– (2-dim) Verificar se uma geometria é válida
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Integridade das geometriasIntegridade das geometrias
LINESTRING
Não passa sobre o mesmo ponto (exceto extremos)
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Integridade de geometriasIntegridade de geometrias
MULTILINESTRING
Todas as linhas devem ser simples
Não existem Intersecções entre as linhas (exceto nos extremos)
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Integridade das geometriasIntegridade das geometrias
POLYGON
A fronteira pode interceptar apenas em ponto (não linhas)
Os anéis internos não podem se sobrepor
Anéis internos devem estar inteiramente contido no anel externo
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Integridade das geometriasIntegridade das geometrias
MULTIPOLYGON
Todos os polígonos devem ser válidos
Interior de dois polígonos não se interceptam
As fronteiras podem se tocar, mas apenas em pontos finitos
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Funções PostGIS - SFSFunções PostGIS - SFS
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Observação importante: a especificação é clara ao dizer que ainda que estejam previstas as geometrias no espaço tridimensional (3D), os operadores só são definidos no espaço bidimensional (2D). É deixado a cargo de cada implementador a definição dos operadores no espaço 3D
Funções 3D ainda não estão totalmente desenvolvidas
Manipulação não tão madura quanto as implementações 2D
Especificação <> Implementação
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Integridade dos dadosIntegridade dos dados
Validando geometrias antes de inseri-las no BDGeoST_ISVALID()
Valida as coordenadas de uma geometria
Exemplo:
SELECT ST_ ISVALID ('LINESTRING(0 0, 1 1)'), t
ST_ISVALID ('LINESTRING(0 0,0 0)'); f
Opção default é não validar a entrada das geometrias
Para validar deve-se adicionar uma restrição à tabela
ALTER TABLE parks ADD CONSTRAINT geo_valid_chk
CHECK (ST_ISVALID ( park_geom)) ;
Alisson FCCAlisson FCC
SIG - 2017SIG - 2017
Contato:alisondocarmo@gmail.com
SIGSIG