• Nenhum resultado encontrado

4.3 Operac¸˜oes do TAD VagueGeometry

4.3.1 Func¸˜oes de Entrada e Sa´ıda

Apesar de ser poss´ıvel definir atributos do tipo VagueGeometry, somente com as definic¸˜oes j´a mostradas at´e aqui, n˜ao ´e poss´ıvel inserir ou recuperar objetos espaciais vagos do tipo Va- gueGeometry. Nesse sentido, para manipular esse tipo de dado ´e necess´ario definir func¸˜oes de entrada e sa´ıda. Existem dois tipos de func¸˜oes de entrada e sa´ıda. A primeira usa a representac¸˜ao textual, enquanto a segunda usa a representac¸˜ao bin´aria. Em geral, a func¸˜ao de entrada trans- forma a representac¸˜ao textual ou bin´aria para a representac¸˜ao interna, e a func¸˜ao de sa´ıda reali- zada a transformac¸˜ao inversa.

Visando auxiliar na definic¸˜ao das representac¸˜oes textuais e bin´arias, ´e necess´ario definir as seguintes func¸˜oes auxiliares: name, id, WKT, GML, KML, GeoJSON, WKB e binary. As func¸˜oes name e id recebem como parˆametro um objeto do tipo VagueGeometry A. Assim,

name(A) extra´ı a palavra chave VAGUEPOINT quando A ´e um ponto vago, VAGUELINESTRING quando A ´e uma linha vaga,VAGUEPOLYGON quando A ´e uma regi˜ao vaga, VAGUEMULTIPOINT quando A ´e um multiponto vago,VAGUEMULTILINESTRING quando A ´e uma multilinha vaga e VAGUEMULTIPOLYGON quando A ´e uma regi˜ao complexa vaga. J´a id(A) extra´ı o identificador num´erico 1 quando A ´e um ponto vago, 2 quando A ´e uma linha vaga, 3 quando A ´e uma regi˜ao vaga, 4 quando A ´e um multiponto vago, 5 quando A ´e uma multilinha vaga e 6 quando

A ´e uma regi˜ao complexa vaga. As func¸˜oes WKT, GML, KML, GeoJSON e WKB recebem como parˆametro um objeto espacial crisp o e extra´ı a sua respectiva representac¸˜ao textual. Por exemplo, WKT(o) extra´ı a representac¸˜ao WKT de o, enquanto WKB(o) extra´ı a representac¸˜ao WKB de o. Finalmente, binary extra´ı o formato bin´ario a partir de um n´umero inteiro.

Os poss´ıveis formatos textuais de um objeto VagueGeometry s˜ao: (i) Vague Well-Known

Text- VWKT (baseado no formato WKT), (ii) Vague Geographic Markup Language - VGML (baseado no formato GML), (iii) Vague Keyhole Markup Language - VKML (baseado no for- mato KML) e (iv) Vague Geographic JavaScript Object Notation - vGeoJSON (baseado no

4.3 Operac¸˜oes do TAD VagueGeometry 67

formato GeoJSON). O formato bin´ario de um objeto VagueGeometry ´e o Vague Well-Known

Binary(baseado no formato WKB).

Tais formatos s˜ao definidos como segue. Seja um objeto espacial vago A, do tipo Vague- Geometry, o qual pode assumir seis diferentes tipos de dados (Figura 4.1), formado por um n´ucleo Ane conjectura Ac (i.e. objetos espaciais crisp), os formatos VWKT, VGML, VKML,

vGeoJSON e VWKB s˜ao definidos, respectivamente, como

(i) VWKT(A) = name(A)(WKT(An); WKT(Ac))

(ii) VGML(A) = <vgml:name(A)> <vgml:Kernel> GML(An) </vgml:Kernel> <vgml:Conjecture> GML(Ac) </vgml:Conjecture> </vgml:name(A)> (iii) VKML(A) = <vkml:name(A)>

<vkml:Kernel> KML(An) </vkml:Kernel> <vkml:Conjecture> KML(Ac) </vkml:Conjecture> </vkml:name(A)> (iv) vGeoJSON(A) = {“type”: “name(A)”,

“kernel”: GeoJSON(An),

“conjecture”: GeoJSON(Ac)

}

(v) VWKB(A) = endianess + binary(id(A)) + WKB(An) + WKB(Ac)

´

E importante notar que na representac¸˜ao VWKB, o s´ımbolo de soma ´e usado para denotar a uni˜ao entre os dados serializados e n˜ao para realizar a soma aritm´etica. Al´em disso, endia-

4.3 Operac¸˜oes do TAD VagueGeometry 68

quais podem ser big-endian ou little-endian, seguindo as especificac¸˜oes da representac¸˜ao WKB. Ademais, ´e poss´ıvel adicionar o SRID na representac¸˜ao VWKB, formando assim o Extended- VWKB (EVWKB), de forma semelhante como ´e feito na representac¸˜ao EWKB do PostGIS.

Com relac¸˜ao a representac¸˜ao VWKT, existem dois tipos de variac¸˜oes. A primeira delas ´e a possibilidade de adicionar o SRID em sua representac¸˜ao, tal como ´e feito na representac¸˜ao EWKT do PostGIS. Assim, como resultado, o Extended-VWKT (EVWKT) ´e criado. A outra variac¸˜ao ´e a possibilidade de uma representac¸˜ao mais reduzida de um objeto espacial vago, removendo os nomes dos tipos de dados crisp das representac¸˜oes WKT. Isto ´e poss´ıvel uma vez que um objeto espacial vago ´e constru´ıdo a partir de dois objetos espaciais crisp do mesmo tipo, e por isso os tipos de dados do n´ucleo e conjectura s˜ao previamente conhecidos. Por exemplo, um objeto espacial vago do tipo VAGUEPOINT, ´e representado de forma completa como VAGUEPOINT(POINT(10 10); POINT(5 5)), j´a a sua forma simplificada ´e representada como VAGUEPOINT(10 10; 5 5).

Tais representac¸˜oes foram definidas para que diversas aplicac¸˜oes de diferentes contex- tos possam utilizar o TAD VagueGeometry. Por exemplo, aplicac¸˜oes baseadas em XML ou servic¸os web que utilizem XML como comunicac¸˜ao, podem utilizar as representac¸˜oes VGML ou VKML. Ainda, aplicac¸˜oes baseadas na web que utilizem visualizac¸˜oes de mapas em nave- gadores, podem utilizar a representac¸˜ao vGeoJSON, a qual facilita o acesso aos dados por meio da linguagem JavaScript. Aplicac¸˜oes que manipulam arquivos bin´arios ou que efetuam trocas de informac¸˜oes em baixo n´ıvel, podem fazer uso da representac¸˜ao VWKB, que pode apresentar ganhos mais efetivos do que as representac¸˜oes textuais. Por fim, outras aplicac¸˜oes podem fazer uso do VWKT para visualizar de forma mais compacta objetos espaciais vagos.

Com as representac¸˜oes textuais e bin´arias definidas, ´e poss´ıvel inserir e visualizar dados espaciais vagos por meio de func¸˜oes espec´ıficas. As assinaturas das func¸˜oes que transformam as representac¸˜oes VWKT, EVWKT, VGML, VKML, vGeoJSON, VWKB e EVWKB para o formato interno s˜ao listadas respectivamente a seguir

(i) VG VagueGeomFromText(text VWKT, integer SRID)→ VagueGeometry (ii) VG VagueGeomFromEVWKT(text EVWKT)→ VagueGeometry

(iii) VG VagueGeomFromVGML(text VGML)→ VagueGeometry (iv) VG VagueGeomFromVKML(text VKML)→ VagueGeometry

4.3 Operac¸˜oes do TAD VagueGeometry 69

(vi) VG VagueGeomFromVWKB(bytea VWKB, integer SRID)→ VagueGeometry (vii) VG VagueGeomFromEVWKB(bytea EVWKB)→ VagueGeometry

Al´em dessas representac¸˜oes, existe a possibilidade da criac¸˜ao de objetos espaciais vagos utilizando objetos do PostGIS. A func¸˜ao VG MakeVagueGeom cria um objeto espacial vago a partir de dois objetos Geometry (i.e. objetos do PostGIS), desde que eles sejam disjuntos ou adjacentes. Caso exista sobreposic¸˜ao nos objetos Geometry, a func¸˜ao VG EnforceMakeVague-

Geom pode ser utilizada, a qual realiza a operac¸˜ao de diferenc¸a entre a conjectura (segundo parˆametro) e o n´ucleo (primeiro parˆametro), garantindo assim a consistˆencia da representac¸˜ao do objeto espacial vago. Estas func¸˜oes s˜ao interessantes quando aplicac¸˜oes tˆem objetos es- paciais vagos representados em colunas distintas, ou seja, n´ucleo e conjectura armazenados separadamente. Tais func¸˜oes possuem as seguintes assinaturas

(i) VG MakeVagueGeom(Geometry n, Geometry c)→ VagueGeometry

(ii) VG EnforceMakeVagueGeom(Geometry n, Geometry c)→ VagueGeometry

Outra possibilidade de criac¸˜ao de objetos espaciais vagos ´e a utilizac¸˜ao do programa

shp2vaguegeom, para carregar arquivos shapefiles, que contenham representac¸˜oes separadas

de n´ucleo e conjectura. Um arquivo shapefile ´e uma representac¸˜ao bin´aria de objetos espaciais

crisppara interoperabilidade entre SIGs e SGBDEs (ESR, 1998). O programa shp2vaguegeom

pode ser inclu´ıdo ao TAD VagueGeometry no momento de sua instalac¸˜ao e obtido na documentac¸˜ao do TAD VagueGeometry (Sec¸˜ao 4.1).

As func¸˜oes de sa´ıda, retornam as representac¸˜oes definidas nessa sec¸˜ao (VWKT, EVWKT, VGML, VKML, vGeoJSON, VWKB e EVWKB) e suas respectivas assinaturas s˜ao

(i) VG AsText(VagueGeometry vg)→ text (ii) VG AsEVWKT(VagueGeometry vg)→ text (iii) VG AsVGML(VagueGeometry vg)→ text (iv) VG AsVKML(VagueGeometry vg)→ text

(v) VG AsVGeoJSON(VagueGeometry vg)→ text (vi) VG AsVWKB(VagueGeometry vg)→ bytea (vii) VG AsEVWKB(VagueGeometry vg)→ bytea

4.3 Operac¸˜oes do TAD VagueGeometry 70