[Gvsig_desarrolladores] problema con geometrías

Fernando González Cortés discoduro2 en terra.es
Jue Dic 22 19:55:08 CET 2005


Defino un par de términos y empiezo:
borde = aro externo de un polígono 
agujero = aro interno que define un agujero dentro de un borde

Corregidme si me equivoco:

En gvSIG representais los polígonos de la misma manera que el shapefile:
El orden de los vértices es contrario a las agujas del reloj para los
agujeros y al revés para los bordes. Esto lo entiende así el FConverter,
así que toda capa de polígonos que no siga este modelo fallará al
realizar alguna operación que requiera JTS. 

Lo primero es que todo formato deberá devolver los polígonos y
multipolígonos según ese modelo y que por tanto los que vengan de dxf,
postgis, etc tendrán que transformarse ya que en postgis por lo menos no
es necesario almacenar los polígonos con los vértices en un orden
determinado. Incluso tendrán que transformarse algunos shapefiles que no
sigan estrictamente la especificación.

Lo segundo es que creo que en la especificación de shapefile te viene
una serie de aros. De estos, sabes cuál es un agujero y cual es un borde
por la orientación de los polígonos. Lo que no sabes es qué agujero
pertenece a qué borde si no compruebas la relación topológica. Aun
comprobandola, puede ser que un agujero pueda pertenecer a varios bordes
si estos se solapan. La consecuencia de esto es que no se puede
almacenar sin pérdida de información un multipolígono con agujeros en
shapefiles. Esto me parece raro, siendo el shapefile tan usado... Pero
leyendo la especificación es lo que me viene a la cabeza. Una dato que
me parece importante es que JTS no da como válido un multipolígono cuyos
polígonos tengan varios puntos en común, igual esto responde a alguna
especificación y shapefile se basa en ésta. Basándose en esto los bordes
no podrían solapar y sí se podría averiguar qué agujero pertenece a qué
borde.

Y lo tercero es un detalle del FConverter, que devuelve Polygon de JTS
si es un multipolígono de un elemento y Multipolygon de JTS si es un
multipolígono de varios polígonos. Esto es debido en parte al código de
FConverter y en parte a que no se distingue polígonos de multipolígonos

Saludos a todos
Fernando




Más información sobre la lista de distribución gvSIG_desarrolladores