12.05.2013 Views

Fundamentos de análisis geográfico con SEXTANTE - La Salle

Fundamentos de análisis geográfico con SEXTANTE - La Salle

Fundamentos de análisis geográfico con SEXTANTE - La Salle

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

332 CAPÍTULO 20. PROGRAMACIÓN DE MÓDULOS DE <strong>SEXTANTE</strong><br />

Igualmente, para comprobar si una celda <strong>con</strong>tiene valor <strong>de</strong> sin datos, no compruebes directamente<br />

el valor, sino utiliza el siguiente método<br />

virtual bool is_NoData (int x, int y)<br />

En ocasiones, pue<strong>de</strong>s necesitar algún grid accesorio a<strong>de</strong>más <strong>de</strong> los que introduce el usuario<br />

(por ejemplo, para usarlo como grid intermedio don<strong>de</strong> almacenar información temporal<br />

<strong>de</strong> una operación. Para ello, pue<strong>de</strong>s usar algunas <strong>de</strong> las diferentes formas <strong>de</strong> la función<br />

API Create Grid() (no es un método <strong>de</strong> CGrid. Puesto que lo más habitual es que necesites un<br />

grid <strong>de</strong> las mismas dimensiones y características que uno que ya tienes (uno <strong>de</strong> los introducidos<br />

por el usuario), la forma más frecuente es la <strong>de</strong>finida en el siguiente prototipo<br />

CGrid* API_Create_Grid (<strong>con</strong>st CGrid &Grid);<br />

20.4. Manejando capas vectoriales. <strong>La</strong> clase CShapes<br />

Si se <strong>con</strong>oce bien la jerarquía <strong>de</strong> las capas vectoriales tal y como en su momento fue<br />

explicada, manejar internamente capas vectoriales es sencillo. Para acce<strong>de</strong>r a cada uno <strong>de</strong> los<br />

elementos <strong>de</strong> una capa vectorial existen métodos apropiados <strong>de</strong> uso intuitivo, y el trabajo<br />

tanto <strong>con</strong> las propias capas como <strong>con</strong> sus tablas <strong>de</strong> atributos no es en absoluto complejo.<br />

Empezando por el nivel más alto <strong>de</strong> la jerarquía en<strong>con</strong>tramos la clase CShapes, que almacena<br />

una serie <strong>de</strong> objetos <strong>de</strong> la clase CShape, siguiendo esa jerarquía que ya <strong>con</strong>ocemos. Existen<br />

4 clases que heredan <strong>de</strong> CShape, y que sirven para los cuatro tipos <strong>de</strong> entida<strong>de</strong>s vectoriales<br />

que ya hemos visto: CShape Polygon, CShape Line y CShape Points. Todas ellas no <strong>de</strong>jan <strong>de</strong><br />

ser sino <strong>con</strong>juntos <strong>de</strong> puntos, y para el manejo <strong>de</strong> éstos tienen una serie <strong>de</strong> funciones comunes.<br />

Para <strong>con</strong>ocer las coor<strong>de</strong>nadas <strong>de</strong> el punto i <strong>de</strong> la parte j <strong>de</strong> una entidad (es <strong>de</strong>cir, un objeto<br />

<strong>de</strong> clase CShape), usa el método Get Point() en una llamada como la siguiente.<br />

TGEO_Point pt = Get_Point(i,j);<br />

<strong>La</strong> estructura TGEO Point simplemente tiene dos valores, x e y, que pue<strong>de</strong>s <strong>con</strong>sultar para<br />

saber las coor<strong>de</strong>nadas <strong>de</strong>l punto en ambos ejes.<br />

Para ver un ejemplo práctico <strong>de</strong> cómo crear entida<strong>de</strong>s y cómo leer la información <strong>de</strong> otra<br />

ya existente, el siguiente bloque <strong>de</strong> código toma una capa <strong>de</strong> polígonos (a partir <strong>de</strong> un puntero<br />

pInput) y crea otra (en pOutput) igual. Creo que esta es una buena manera <strong>de</strong> ir aprendiendo<br />

los métodos más útiles <strong>de</strong> estas clases. Por el momento, sólo prestamos atención a la geometría<br />

y no a las tablas <strong>de</strong> atributos.<br />

int i,j,k;<br />

TGEO_Point Point;<br />

CShape *pShape,*pShape2;<br />

for(i=0; iGet_Count(); i++){<br />

pShape = pInput->Get_Shape(i);<br />

pShape2 = pOutput->Add_Shape();<br />

for(int j=0; jGet_Part_Count(); j++){<br />

for(int k=0; kGet_Point_Count(j); k++){<br />

Point = pShape->Get_Point(k,j);<br />

pShape2->Add_Point(Point.x,Point.y,j);<br />

}<br />

}<br />

}

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!