Interface para Operações Espaciais em Banco de Dados Geográficos

geoinfo.info

Interface para Operações Espaciais em Banco de Dados Geográficos

SDO_GEOMETRY (2003, NULL, NULL,SDO_ELEM_INFO_ARRAY (1, 1005, 8, 1,2, 2, 5, 2, 1, 9, 2, 2, 13, 2,1, 15, 2, 2, 19, 2, 1, 23, 2, 2,27, 2, 1),SDO_ORDINATE_ARRAY (18, 17, 19, 18,18, 19, 16.4142136, 19,14.7071068, 20.7071068, 14, 21,13.2928932, ...., 15.6173166,17.0761205, 16, 17, 18, 17))O objeto espacial SDO_GEOMETRY do OracleSpatial é composto por dois vetores:SDO_ORDINATES_ARRAY, que contém ascoordenadas dos elementos que compõem o objeto; eSDO_ELEM_INFO_ARRAY, que contém informaçõessobre o tipo de cada elemento e como cada um deve serinterpretado. A função SDO_BUFFER do OracleSpatial retorna um SDO_GEOMETRY do tipoPOLYGON, que é formado por um conjunto deelementos, onde cada elemento pode ser do tipopolígono simples (cujos vértices são conectados porlinhas retas), polígono circular (cujos vértices sãoformados por arcos circulares) ou polígono composto(formado por alguns vértices conectados por linhas retase outros por arcos circulares).Assim, a operação Buffer doTeOracleSpatial deve interpretar o objetoSDO_GEOMETRY retornado pelo Oracle Spatial egerar um polígono em memória, ou seja, uma estruturado tipo TePolygon da TerraLib.Um arco circular no Oracle Spatial é representadoapenas por três pontos e o tipo TePolygon daTerraLib é formado por pontos conectados porsegmentos de linha reta. Portanto, para representar umpolígono composto do Oracle Spatial no TePolygon,para cada arco desse polígono é necessário gerar pontosintermediários que, ao serem ligados por segmentos delinha reta, se aproximem de um arco. Para isso, foinecessário implementar uma função que gera um arcoformado por n pontos intermediários a partir de trêspontos de um arco retornados pelo Oracle Spatial.Essa função, chamada TeGenerateArc, foiimplementada na TerraLib e recebe como argumentostrês pontos (pt 1 , pt 2 e pt 3 ) e o número n de pontosintermediários que devem ser gerados. Como resultado,essa função gera um arco formado por esses n pontosque passa pelos três pontos de entrada [19].5 Operações sobre dados matriciaisAs operações sobre dados matriciais da API,Zonal e Mask, foram implementadas somente comométodos da classe TeDatabase, pois nenhumaextensão espacial oferece recursos para tratar este tipode dado. Portanto, esses métodos são utilizados portodos os SGBDs que possuem uma interface com aTerraLib, como Access, MySQL, PostgreSQL e OracleSpatial.A classe da TerraLib específica para representardados matriciais é chamada TeRaster. Essa classe,juntamente com outras estruturas da biblioteca, é capazde manipular um dado matricial armazenado tanto emarquivos de diferentes formatos, como JPEG e geoTIFF,quanto em SGBDs [14].Como essas duas operações são executadas sobreregiões específicas de um dado raster delimitadas porpolígonos, foi necessário implementar um mecanismoque percorresse esse dado somente na região interna ouexterna a um polígono. Esse mecanismo foiimplementado como um iterador, chamadoiteratorPoly, sobre a classe TeRaster. Esseiterador é capaz de percorrer um dado raster segundoalguma estratégia e um polígono limitante. O polígonolimitante define a área de interesse e a estratégia depercorrimento define se o iterador percorrerá a áreaexterna ou interna desse polígono.Iteradores são uma generalização de ponteiros; sãoobjetos que apontam para outros objetos [20]. SegundoStroustrup [21], um iterador é uma abstração da noçãode um ponteiro para uma sequência. O conceito deiterador é muito importante para a programaçãogenérica, pois fornece uma interface entre as estruturasde dados e os algoritmos, permitindo assim umdesacoplamento entre os dois [22]. Esse desacoplamentoé essencial para a implementação de algoritmosgenéricos e reusáveis [23].A operação Mask da API consiste em recortar umdado matricial a partir de uma máscara definida por umpolígono. O recorte pode ser feito a partir da regiãointerna ou externa ao polígono, dependendo daestratégia escolhida. O resultado dessa operação é umoutro objeto do tipo TeRaster que contém o rasterrecortado.A operação Zonal consiste em calcular asestatísticas de uma determinada região ou zona de umdado matricial delimitada por um polígono. O resultadodessa operação é um conjunto de estatísticas referentes àregião ou zona. As estatísticas calculadas são: contagem,valor mínimo e máximo, soma, média, desvio padrão,variância, assimetria, curtose, amplitude, mediana,coeficiente de variação e moda.Como exemplo dessas operações sobre dadosmatriciais, são mostradas as figuras a seguir. A Figura5.1 mostra uma imagem de Brasília e um polígono,pintado de branco, que define uma região de interesse.Esse polígono será usado como uma máscara naoperação Mask e como uma zona de interesse na


[10] Ramsey, P., PostGis Manual. 2002.[11] Câmara, G.S., R. C. M.; Pedrosa, B.; Vinhas, L.;Monteiro A. M.; Paiva, J. A. C. P.; Gattas, M. TerraLib:Technology in Support of GIS Innovation. in IIWorkshop Brasileiro de Geoinformática. 2000. Curitiba,PR.[12] Ferreira, K.R.Q., G. R.; Paiva, J. A. C.; Souza, R.C. M.; Câmara, G. Arquitetura de Software paraConstrução de Bancos de Dados Geográficos comSGBD Objeto-Relacionais. in XVII Simpósio Brasileirode Banco de Dados. 2002. Gramado, RS.[13] Roff, J.T., ADO: ActiveX Data Objects. 1 st ed.2001: O´Reilly & Associates. 672.[14] INPE, TerraLib. 2003.[www.terralib.org][15] Korth, F.H.S., A., Sistemas de Bancos de Dados.1994, São Paulo: McGraw-Hill. 693.[16] Tomlin, C.D., Geographic Information Systemsand Cartographical Modeling. 1990, New York:Prentice-Hall.[17] ESRI, ArcSDE. 2003.[http://arcsdeonline.esri.com/index.htm][18] Egenhofer, M.F., R., On the Equivalence ofTopological Relations. International Journal ofGeographical Information Systems, 1995. 9(2): p. 133-152.[19] University, D., The Math Forum. 2003.[20] Austern, M.H., Generic Programming and the STL:Using and Extending the C++ Standard TemplateLibrary. 1998, Massachusetts: Addison-Weslwy. 548.[21] Stroustrup, B., The C++ Programming Language.1999: USA: Addison-Wesley.[22] Köthe, U., STL-Style Generic Programming withImages, in C++ Report Magazine. 2000.[23] Vinhas, L.Q., G. R.; Ferreira, K. R.; Câmara, G.;Paiva, J. A. C. Programação Genérica Aplicada aAlgoritmos Geográficos. in IV Simpósio Brasileiro deGeoInformática. 2002. Caxambu, MG.

More magazines by this user
Similar magazines