Вы находитесь на странице: 1из 6

CUADERNOS DE GEOMTICA

DESARROLLO DE EXTENSIONES CON DESKTOP KOSMO I. CMO GENERAR UNA CAPA DE PUNTOS CON ATRIBUTOS?
Las extensiones KOSMO son desarrollos personalizados de tareas necesarias para un usuario concreto, de manera que sobre la plataforma estandar del desktop podamos aadir funcionalidad propietaria que complemente las capacidades del GIS dotndo a dicha herrramienta topogrfica de una verdadera personalizacin que puede llegar hasta estadios de complejsimas aplicaciones SIG. Todo depender de hasta donde queramos o ms bien debamos llegar y de si disponemos del personal adecuado para llevar a cabo el proceso bajo la supervisin de un ingeniero en geomtica. KOSMO dispone de un montn de documentacin que permitir sencillamente poder instalarse los cdigos fuentes, de manera que se generarn los proyectos saigcore, que corresponder a KOSMO y otro nuevo que podemos llamar como queramos, pero que implantar dos clases, una de extensin y otra de plugin que permitirn interactuar con KOSMO, pudiendo generar tanto botones como menes de activacin de la extensicn, cuyo cdigo siempre deber de estar en el mtodo execute() de la clase Plugin. Para realizar esta tarea, lgicamente deberemos tener disponible Eclipse o cualquier otra herramienta similar, como Websphere y tendremos que tener instalada la librera JAI (Java Advanced Imaging), descargable desde la pgina de Oracle.

Una vez configurado todo adecuadamente podremos adentrarnos en el estudio que aqu proponemos. Vamos all!

ENRIQUE DE DIOS SAN ROMN

Ingeniero en Geomtica Ingeniero Tcnico en Topografa. Master en Sistemas de Informacin Geogrfica.

PANTALLA QUE OBTENDREMOS DESPUS DEL DESARROLLO

CDIGO FUENTE DESARROLLADO

Al desarrollar extensiones sobre KOSMO, estamos usando en un 95% libreras estandar SIG como GeoTools, JTS, Jump, etc. De manera que el saber generar extensiones en KOSMO, o tambin en gvSIG (mucho menos amigable bajo nuestro modesto entender) supondr un paso cualitativo hacia el desarrollo de aplicaciones cartogrficas basadas en dichas libreras. Veamos el cdigo que prcticamente no necesita explicacin.
// Creo una geometria de puntos Coordinate punto1 = new Coordinate (10, 10); Geometry g01 = new GeometryFactory().createPoint(punto1); Coordinate punto2 = new Coordinate (20, 20); Geometry g02 = new GeometryFactory().createPoint(punto2); // Aado la geometra a un array de puntos ArrayList<Geometry> geometria_puntos = new ArrayList<Geometry>(); geometria_puntos.add(g01); geometria_puntos.add(g02); // Creo la coleccin de puntos y le aado el esquema. FeatureCollection coleccion_puntos = AddNewLayerPlugIn.createBlankFeatureCollection(1); coleccion_puntos.getFeatureSchema().addAttribute("ID_BDC", AttributeType.INTEGER); coleccion_puntos.getFeatureSchema().addAttribute("TIPO", AttributeType.STRING); coleccion_puntos.getFeatureSchema().addAttribute("NUM_PARADA", AttributeType.INTEGER); // Uso un feature basado en la estructura de la coleccin de puntos. (es la que tiene la definicin de campos) // Cada feature slo puede contener un elemento por eso creo un bucle for (int i=0;i<2;i++){ Feature feature = new BasicFeature(coleccion_puntos.getFeatureSchema()); // Aado primer atributos y geometra feature.setID(i); // Es la clave del registro feature.setAttribute("ID_BDC",new Integer (1000+i)); feature.setAttribute("TIPO", "PARADA BUS "); feature.setAttribute("NUM_PARADA",new Integer (i+1)); feature.setGeometry(geometria_puntos.get(i)); coleccion_puntos.add(feature); } coleccion_puntos.commit(); // Creo la layer y aado la coleccin de puntos Layer myLayer = context.getLayerManager().addLayer("PUNTOS", "Mis puntos", coleccion_puntos); myLayer.setProjection(context.getTask().getProjection()); myLayer.setGeometryType(1); // No sera necesario puesto que est en el schema myLayer.setVisible(true); return true;

COMPRENDIENDO LO QUE HAY QUE HACER GEOMETRA USANDO LA LIBRERA JTS

GENERANDO GEOMETRA SIMPLE Como vemos la clase GEOMETRY tiene dos elementos que veremos someramente. El primero es el PRECISIONMODEL. Esta clase JTS permite aumentar la capacidad operativa en la precisin de las operaciones java, ya que en el modo default, puede suceder en algn momento cuando trabajamos con operaciones complejas y muchos decimales que java responda con poca precisin. Por otro lado el ENVELOPE es una clase en la que se fija un BBOX sobre el cual podremos trabajar, de manera que nos sirva para controlar elementos interiores. GEOMETRYFACTORY es un mtodo por otro lado que nos permitir generar geometras a partir de elementos o listas.
Coordinate punto1 = new Coordinate (10, 10); Geometry g01 = new GeometryFactory().createPoint(punto1);

GENERANDO COLECCIONES DE GEOMETRA Una vez que tenemos un conjunto de geometras almacenado deberemos agruparlos en colecciones homogneas de datos. Usaremos la clase GEOMETRYCOLLECTION para dicha tarea, de manera que una vez agrupada la informacin sea sencillamente tratable en su conjunto. Para realizar dicha tarea lo ms sencillo es meter las geometras homogneas en un ArrayList, de manera que su incorporacin a la coleccin, despus sea muy simple. Veamos como:
ArrayList<Geometry> geometria_puntos = new ArrayList<Geometry>(); geometria_puntos.add(g01); geometria_puntos.add(g02); FeatureCollection coleccion_puntos = AddNewLayerPlugIn.createBlankFeatureCollection(1); for (int i=0;i<2;i++){ Feature feature = new BasicFeature(coleccion_puntos.getFeatureSchema()); feature.setGeometry(geometria_puntos.get(i)); coleccion_puntos.add(feature); <- aado geometra a coleccin } coleccion_puntos.commit();

Al generar el FEATURECOLLECTION debemos de asignarle una geometra. Esta puede realizarse de acuerdo al conocimiento del parmetro (1 en nuestro caso significa geometra de puntos), de manera que podremos tener los siguientes: 1 - punto 8 - multipunto 3 - lnea 2 - multilnea 5 - polgono 4 - multipolgono 9 - arco 10- circulo 11- elipse 15- mltiple

Otra manera de indicar la geometra, ser a travs de un elemento conocido de nuestra geometra
FeatureSchema fs = new FeatureSchema(); fs.buildGeometryType(g01); <- Tipo GEOMETRY de g01 FeatureCollection coleccion_puntos = FeatureDatasetFactory.createFromGeometry(geometria_puntos); coleccion_puntos.setFeatureSchema(fs);

GENERANDO COLECCIONES DE GEOMETRA CON ATRIBUTOS

Vemos que el FEATURESCHEMA es como el papel pautado que indicar los campos que tiene cada uno de los features. Si deseasemos aadir una serie de campos a cada una de nuestras componentes geomtricas puntuales haramos uso de la coleccin, y a travs de su Schema, aadiramos los atributos correspondientes. Esto es, en nuestro caso:
coleccion_puntos.getFeatureSchema().addAttribute("ID_BDC", AttributeType.INTEGER); coleccion_puntos.getFeatureSchema().addAttribute("TIPO", AttributeType.STRING); coleccion_puntos.getFeatureSchema().addAttribute("NUM_PARADA", AttributeType.INTEGER);

Atributos que acompaarn a cada uno de los puntos, de manera que la incorporacin de sus datos (independientemente de la parte geomtrica ya vista) sera la siguiente, dentro del bucle que me permite rellenar la coleccin:
feature.setID(i); // Es la clave del registro feature.setAttribute("ID_BDC",new Integer (1000+i)); feature.setAttribute("TIPO", "PARADA BUS "); feature.setAttribute("NUM_PARADA",new Integer (i+1)); feature.setGeometry(geometria_puntos.get(i)); coleccion_puntos.add(feature);

VISUALIZANDO LAS GEOMETRAS DETERMINADAS El nivel mnimo para visualizar la geometra ser LAYER, no obstante y como ya veremos en otros cuadernos de geomtica el mximo nivel de visualizacin con toda su potencia ser el obtenido por JMAPFRAME, aunque para llegar a l, lgicamente debamos saber crear nuevas LAYER. Aqu vamos a ver como se realiza dicha operacin y como la LAYER guarda informacin tremendamente til para la visualuizacin, como son el Sistema de Referencia topogrfico y el SLD (estilo de visualizacin) de los elementos de la coleccin. Veamos como se hara:
Layer myLayer = context.getLayerManager().addLayer("PUNTOS", "Mis puntos", coleccion_puntos); myLayer.setProjection(context.getTask().getProjection()); myLayer.setVisible(true);

Y as habremos conseguido la visualizacin completa de la LAYER generada. Una vez compilado el *.jar de nuestra extensin, debemos acordarnos de copiarlo en el cdigo KOSMO compilado, para lo que copiaremos dicha extensin en: C:\Documents and Settings\eds01\Configuracin local\Datos de programa\kosmo_desktop_2.0.1\bin\ext , que por defecto es el lugar del ordenador personal en el que se instala KOSMO.

Вам также может понравиться