1 ALGUNOS PROGRAMAS NECESARIOS. -...

29
Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura Escuela Politécnica Superior de Ávila 1 Universidad de Salamanca 1 ALGUNOS PROGRAMAS NECESARIOS. Cuando diseñamos un Sistema de Información Geográfica, nos puede interesar distribuir el SIG generado para que lo puedan consultar personas que no tengan una aplicación de SIG instalada en su ordenador. La idea será crearse una aplicación propia que permita la visualización del mapa y la consulta de los datos necesarios. Una opción para hacerlo sería con las herramientas de Map Object de ArcGis. Dada la naturaleza semipresencial del Master, y puesto que muchos alumnos tendrán que realizar las prácticas con medios propios, nos hemos decidido a utilizar MapWindow. Se puede conseguir en la web http://www.mapwindow.org/. En concreto el enlace de descarga es: http://www.mapwindow.org/download.php?file_name=http://svn.mapwindow.org/svnro ot/InstallationProjects/4.6/Release/MapWindow46SR.exe&show_details=1&dl=1 Aquí podemos descargar solo el control Active X para utilizar en nuestros programas: http://www.mapwindow.org/download.php?file_name=http://svn.mapwindow.org/svnro ot/InstallationProjects/4.6/Release/MapWinGIS46OCXOnly.exe&show_details=2&dl= 1 En este enlace tenemos otros Plugins para utilizar con el programa. http://www.mapwindow.org/download.php Instalaremos los programas indicados para utilizarlos en Ejercicios posteriores. Otra herramienta que nos puede venir bien es un conversor de archivos SHP a formato DXF para ver su contenido en aplicaciones CAD. Aquí tenemos el enlace al mismo en la página de la JCYL. http://www.sitcyl.jcyl.es/smap/download/shpdxf_v2.exe 2 Utilizar MapWindow. Abrimos el programa MapWindow, y localizamos un mapa de Ejemplo en la carpeta C:\Archivos de Programa\MapWindow\ Sample Projects, en la imagen siguiente se ve la pantalla que presenta si el elegido es World, después de hacer zoom hacia España. Además se ha seleccionado la herramienta de información y se consultan los atributos.

Transcript of 1 ALGUNOS PROGRAMAS NECESARIOS. -...

Page 1: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 1 Universidad de Salamanca

1 ALGUNOS PROGRAMAS NECESARIOS.

Cuando diseñamos un Sistema de Información Geográfica, nos puede interesar distribuir el SIG generado para que lo puedan consultar personas que no tengan una aplicación de SIG instalada en su ordenador. La idea será crearse una aplicación propia que permita la visualización del mapa y la consulta de los datos necesarios. Una opción para hacerlo sería con las herramientas de Map Object de ArcGis. Dada la naturaleza semipresencial del Master, y puesto que muchos alumnos tendrán que realizar las prácticas con medios propios, nos hemos decidido a utilizar MapWindow. Se puede conseguir en la web http://www.mapwindow.org/. En concreto el enlace de descarga es: http://www.mapwindow.org/download.php?file_name=http://svn.mapwindow.org/svnroot/InstallationProjects/4.6/Release/MapWindow46SR.exe&show_details=1&dl=1 Aquí podemos descargar solo el control Active X para utilizar en nuestros programas: http://www.mapwindow.org/download.php?file_name=http://svn.mapwindow.org/svnroot/InstallationProjects/4.6/Release/MapWinGIS46OCXOnly.exe&show_details=2&dl=1 En este enlace tenemos otros Plugins para utilizar con el programa. http://www.mapwindow.org/download.php Instalaremos los programas indicados para utilizarlos en Ejercicios posteriores. Otra herramienta que nos puede venir bien es un conversor de archivos SHP a formato DXF para ver su contenido en aplicaciones CAD. Aquí tenemos el enlace al mismo en la página de la JCYL. http://www.sitcyl.jcyl.es/smap/download/shpdxf_v2.exe

2 Utilizar MapWindow.

Abrimos el programa MapWindow, y localizamos un mapa de Ejemplo en la carpeta C:\Archivos de Programa\MapWindow\ Sample Projects, en la imagen siguiente se ve la pantalla que presenta si el elegido es World, después de hacer zoom hacia España.

Además se ha seleccionado la herramienta de información y se consultan los atributos.

Page 2: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 2 Universidad de Salamanca

3 Crear un visualizador de Mapas SHP.

Vamos a comenzar el desarrollo de una aplicación que nos permita visualizar este tipo de mapas. Crearemos un formulario, importaremos un objeto Mapa, un objeto Leyenda, crearemos un menú y una barra de herramientas. En este primer ejercicio, sólo vamos a permitir agregar datos, eliminarlos, y trabajar con el zoom. No vamos a permitir visualizar los atributos de las entidades seleccionadas. Eso lo dejaremos para futuras aplicaciones. Creamos entonces un programa nuevo al que llamaremos VisorSHP, al formulario principal le damos el nombre frm_Visor. A este formulario le añadimos un menú y una barra de herramientas. En el grupo Menús y barras de herramientas cogemos MenuStrip y lo llevamos al formulario, y ToolStrip y lo llevamos igualmente. (Detallo este paso porque algunas personas decían en clase que luego no encuentran alguno de los componentes necesarios).

Añadimos también el cuadro de diálogo de abrir en el grupo Cuadros de diálogo de las herramientas:

Al seguir estos pasos nuestro formulario tendrá el aspecto:

Page 3: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 3 Universidad de Salamanca

En la parte inferior del formulario, ya fuera del mismo se observan los nombres de los componentes creados. Con ese nombre haremos referencia a ellos desde el código cuando los necesitamos. Por ejemplo, para el cuadro de diálogo de apertura cuando lo queramos utilizar escribiremos “OpenFileDialog1”. Escribimos ahora las opciones del menú. De momento ponemos: Archivo Ver

Agregar Tema… Leyenda Salir

Además añadimos los botones a la Barra de herramientas utilizando los iconos proporcionados. Pulsamos sobre la barra y en la flechita de nuevo botón que muestra, pulsamos y seleccionamos Button. Usaremos separadores cuando creamos conveniente.

En la propiedad Imagen del botón añadido elegimos el icono correspondiente. Al pinchar sale:

Luego al pulsar importar seleccionamos el icono y Aceptamos. En la propiedad Text de cada botón vamos escribiendo una descripción como aclaración que se copiará en ToolTipText, que corresponde al mensaje que nos muestra al colocarnos sobre ellos. La barra nos quedará:

Agregar Tema

Eliminar Tema

Encuadre Zoom Extensión

Zoom Aumentar

Zoom Disminuir

Zoom Previo

Page 4: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 4 Universidad de Salamanca

Ahora vamos con el diseño interior del formulario. Colocaremos el Mapa y la leyenda. Para utilizar estos controles que nos proporciona MapWindow, agregamos al panel de herramientas de Visual un grupo que se llame Componentes SIG. Pulsamos con el botón derecho del ratón en la parte inferior del panel de herramientas dónde pone General y seleccionamos Agregar Ficha, luego ponemos el nombre Componentes SIG.

Ahora pulsamos al botón derecho del ratón en la ficha creada y seleccionamos elegir elementos, añadiremos el componente de MapWindow, en la ficha Componentes COM, seleccionamos Map Control.

Repetimos el proceso para la leyenda, pero ahora pulsamos el botón Examinar y localizamos la dll MapWinInterfaces.dll que encontraremos en la ruta C:\Archivos de

Programa\MapWindow, si realizamos la instalación con la configuración por defecto. Tras esto la ficha de herramientas creada se mostrará:

Para facilitar la colocación de estos componentes en la pantalla vamos a utilizar un panel partido como contenedor de los mismos. De este modo podremos cambiar el tamaño de la zona que ocupa la leyenda si necesitamos visualizar nombres largos de capas. El componente a incorporar se llama SplitContainer del grupo contenedores en

Page 5: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 5 Universidad de Salamanca

las herramientas. Al colocarlo en el formulario le nombra SplitContainer1 y ocupa todo el área del mismo al tener la propiedad Dock a Fill.

En la barra vertical de separación nos permite modificar el área dedicada a cada uno de los paneles. El aspecto será:

Sobre el Panel1 colocaremos la leyenda a la que pondremos nombre Leyenda y en la propiedad Dock le asignaremos Fill. En el Panel2 colocamos el mapa, le llamamos Mapa y en la propiedad Dock asignamos igualmente Fill. El aspecto final será:

Page 6: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 6 Universidad de Salamanca

Comenzamos a asignar el código. A la opción del menú Archivo/Agregar Tema le asignaremos el código siguiente: Este mismo código le asignamos también al botón de Agregar tema.

Private Sub AgregarTemaToolStripMenuItem_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AgregarTemaToolStripMenuItem.Click 'Nueva Forma a añadir Dim formaSF As MapWinGIS.Shapefile Dim nombreTema As String Dim unacapa As Integer OpenFileDialog1.Filter = "Archivos de Formas SHP(*.shp)|*.shp" If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then formaSF = New MapWinGIS.Shapefile 'Asignamos el mapa a la leyenda para enlazarlos Leyenda.Map = Mapa.GetOcx() 'Cogemos el nombre seleccionado nombreTema = OpenFileDialog1.FileName 'Abrimos el archivo indicado como Objeto de forma formaSF.Open(nombreTema) 'añadimos la capa a la leyenda unacapa = Leyenda.Layers.Add(formaSF, True ) 'Ponemos como nombre de la capa en la leyenda el no mbre del archivo Leyenda.Map.LayerName(unacapa) = System.IO.Path.GetFileNameWithoutExtension(nombreTe ma) 'Cambiamos el grosor de Linea de la capa añadida Mapa.set_ShapeLayerLineWidth(unacapa, 2 ) 'Cambiamos el Color de linea de la forma Mapa.set_ShapeLayerLineColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Red))) End If End Sub

Page 7: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 7 Universidad de Salamanca

Al botón de Eliminar Tema le asignamos: Al botón de Encuadre le ponemos: Al de Zoom Extensión: Al de Aumentar Al de Reducir Al de Zoom Previo Vamos ahora con el menú Ver/Leyenda. Lo primero será poner la propiedad Checked del mismo a true. Eso lo hacemos seleccionándolo y cambiando el valor en la lista de propiedades. Luego le asignamos el código:

Private Sub btn_Eliminar_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Eliminar.Click Leyenda.Layers.Remove(Leyenda.SelectedLayer ) 'Borramos la capa seleccionada Leyenda.Refresh() 'Refrescamos la leyenda End Sub

Mapa.ZoomToMaxExtents()

Mapa.CursorMode = MapWinGIS.tkCursorMode.cmZoomIn

Mapa.CursorMode = MapWinGIS.tkCursorMode.cmZoomOut

Mapa.ZoomToPrev()

Private Sub LeyendaToolStripMenuItem_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LeyendaToolStripMenuItem.Click If SplitContainer1.Panel1Collapsed = False Then 'Si la leyenda se ve SplitContainer1.Panel1Collapsed = True 'Escondo el panel de la Izquierda, el de la leyenda LeyendaToolStripMenuItem.Checked = False 'Quito la marca al menú Else SplitContainer1.Panel1Collapsed = False 'Si no muestro el panel de la leyenda LeyendaToolStripMenuItem.Checked = True 'Pongo la marca al menu End If End Sub

Mapa.CursorMode = MapWinGIS.tkCursorMode.cm Pan 'Establecemos el modo del Cursor a Encuadre. 'De este modo cambia la forma de la flecha del rató n por una 'mano y podemos cambiar la zona de mapa que se mues tra en la pantalla.

Page 8: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 8 Universidad de Salamanca

Probamos a ejecutar el programa. Si cargamos los archivos World_adm0.shp, river_quality_li.shp y cities_capital_pt.shp que se proporcionan como ejemplos. Tendremos una capa de tipo poligonal, otra lineal y otra puntual. Al asignar el mismo color de línea a todas las capas el dibujo queda poco claro. Intentaremos arreglarlo en futuros ejercicios.

Page 9: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 9 Universidad de Salamanca

4 Visor de Información Fija.

Lo normal es que queramos facilitar la visualización y consulta de la información que hayamos generado. Esa información será la que nosotros hemos obtenido, siempre la misma. En vez de permitir mostrar cualquier archivo SHP, creamos a hora un programa que cargará los archivos que tengamos preparados y les asignará las propiedades que decidamos. El usuario se limitará a consultar esa información. Ahora creamos otra aplicación con nombre MundoSIG, para no repetir la parte de la barra de botones y el diseño del formulario importaremos el formulario del programa anterior. Cuando utilizamos algún componente añadido, en ocasiones nos da problemas la importación de un formulario si no hemos cargado la referencia en el proyecto. Para no cargar las referencias otra vez, Añadimos al form1 un control MapControl y un control Legend. Luego añadimos el formulario frm_Visor.vb del ejercicio anterior en el menú Proyecto/Agregar elemento existente, lo localizamos y lo añadimos. En proyecto propiedades del proyecto, en la sección Aplicación le indicamos como formulario de inicio el nuestro.

Borramos el formulario form1 que nos crea con el botón derecho sobre él en el Explorador de Soluciones y pulsando Eliminar. Tendríamos una aplicación igual a la de antes. Ahora eliminamos la opción del menú Agregar/Tema, y los botones de Añadir y eliminar capas. Cargaremos la información en el evento Load del formulario. Quitamos también el control OpenFileDialog1. Si seleccionamos el formulario, en el evento Load, (lo vemos en las propiedades dando al rayo ), le escribimos lo siguiente:

Private Sub frm_Visor_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim formaSF As MapWinGIS.Shapefile 'Nueva Forma a añadir Dim nombreTema As String 'Nombre del tema para la leyenda Dim unacapa As Integer 'Variable para manejar la capa cargada y modificar sus propiedades 'Asignamos el mapa a la leyenda para enlazarlos Leyenda.Map = Mapa.GetOcx()

Page 10: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 10 Universidad de Salamanca

'AGREGAMOS LOS PAISES QUE ES UNA CAPA POLIGONAL 'Creamos una forma nueva formaSF = New MapWinGIS.Shapefile 'Cogemos el nombre seleccionado nombreTema = Application.StartupPath + "\World\Shapefiles\world_adm0.shp" 'Abrimos el archivo indicado como Objeto de forma formaSF.Open(nombreTema) 'añadimos la capa a la leyenda unacapa = Leyenda.Layers.Add(formaSF, True ) 'Pone el nombre de la capa en la leyenda con el del archivo Leyenda.Map.LayerName(unacapa) = System.IO.Path.GetFileNameWithoutExtension(nombreTe ma) 'Cambiamos el grosor de Linea de la capa añadida Mapa.set_ShapeLayerLineWidth(unacapa, 2) 'Cambiamos el Color de linea de la forma Mapa.set_ShapeLayerLineColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Black))) 'Cambiamos el Color del relleno de la forma poligon al Mapa.set_ShapeLayerFillColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.LightGray))) 'AGREGAMOS LOS RIOS QUE ES UNA CAPA LINEAL 'Creamos una forma nueva formaSF = New MapWinGIS.Shapefile 'Cogemos el nombre seleccionado nombreTema = Application.StartupPath + "\World\Shapefiles\river_quality_li.shp" 'Abrimos el archivo indicado como Objeto de forma formaSF.Open(nombreTema) 'añadimos la capa a la leyenda unacapa = Leyenda.Layers.Add(formaSF, True ) 'Pone el nombre de la capa en la leyenda con el del archivo Leyenda.Map.LayerName(unacapa) = System.IO.Path.GetFileNameWithoutExtension(nombreTe ma) 'Cambiamos el grosor de Linea de la capa añadida Mapa.set_ShapeLayerLineWidth(unacapa, 1) 'Cambiamos el Color de linea de la forma Mapa.set_ShapeLayerLineColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Blue))) 'AGREGAMOS LAS CAPITALES.UNA CAPA CON INFORMACIÓN PUNTUAL 'Creamos una forma nueva formaSF = New MapWinGIS.Shapefile 'Cogemos el nombre seleccionado nombreTema = Application.StartupPath + "\World\Shapefiles\cities_capital_pt.shp" 'Abrimos el archivo indicado como Objeto de forma formaSF.Open(nombreTema) 'añadimos la capa a la leyenda unacapa = Leyenda.Layers.Add(formaSF, True ) 'Pone el nombre de la capa en la leyenda con el del archivo Leyenda.Map.LayerName(unacapa) = System.IO.Path.GetFileNameWithoutExtension(nombreTe ma) 'Cambiamos el grosor de Linea de la capa añadida Mapa.set_ShapeLayerLineWidth(unacapa, 1) 'Cambiamos el Color de los puntos de la forma Mapa.set_ShapeLayerPointColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Red)))

Page 11: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 11 Universidad de Salamanca

Como vemos hay tres bloques que añaden una capa con información de polígonos, otra con información lineal y otra con información puntual. Además modifican el aspecto de las formas creadas. Al elegir el tipo de punto cabe la posibilidad de utilizar símbolos a procedentes de imágenes que se cargan con las instrucciones de las últimas lineas comentadas. Con esto ejecutamos el programa. Ahora sería un mapa previamente preparado. El usuario se limitaría a ampliar y reducir el mapa y ha desplazar la zona visualizada. El aspecto que presentaría es:

En el Ejercicio anterior cogíamos el nombre de la capa para la leyenda del nombre del archivo SHP cargado. Ahora como los archivos de forma a cambiar son fijos podemos poner el nombre a mano. Cambiamos:

'Indicamos el tamaño del punto Mapa.set_ShapeLayerPointSize(unacapa, 6) 'Especificamos la forma del punto. Mapa.set_ShapeLayerPointType(unacapa, MapWinGIS.tkPointType.ptDiamond) 'Con las lineas Siguientes comentadas las reemplaza ríamos por las 2 anteriores para mostrar 'Como símbolo una foto con forma de estrella en vez de los símbolos predeterminados. 'Mapa.set_ShapeLayerPointSize(unacapa, 0.8) 'Mapa.set_ShapeLayerPointType(unacapa, MapWinGIS.tkPointType.ptUserDefined) 'Dim simboloimagen As New MapWinGIS.Image 'simboloimagen.Open(Application.StartupPath + "\World\estrella.png") 'Mapa.set_UDPointType(unacapa, simboloimagen) End Sub

Page 12: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 12 Universidad de Salamanca

La línea Por Para cada una de las capas cargadas según el caso. Ahora nos queda:

4.1 Consultar los atributos. Asociado a los archivos SHP con información gráfica podemos tener bases de datos con valores asociados. Generalmente estará en archivos DBF. Vamos a intentar mostrar los atributos asociados a una capa. Incorporamos una nueva opción del menú Atributos/Ver Tabla. Añadimos un formulario al que llamamos frm_tabla.vb. En este formulario incorporamos un panel en el que establecemos la propiedad Dock a Bottom, en este panel colocamos un botón. Añadimos también un DataViewGrid al que llamamos dvg_tabla. En la propiedad Dock de la tabla seleccionamos Fill. El formulario presentará el aspecto siguiente:

Leyenda.Map.LayerName(unacapa) = System.IO.Path.GetFileNameWithoutExtension(nombreTe ma)

Leyenda.Map.LayerName(unacapa) = "PAISES DEL MUNDO"

Leyenda.Map.LayerName(unacapa) = "PRINCIPALES RIOS"

Leyenda.Map.LayerName(unacapa) = "CAPITALES"

Page 13: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 13 Universidad de Salamanca

Ahora mostramos el código del formulario, podemos hacerlo pulsando con el botón derecho sobre su nombre en el explorador de Soluciones y eligiendo “Ver Código”. Vamos a incorporar un constructor sobrecargado para este formulario de modo que admita una capa, que será la capa de la que queremos visualizar sus atributos. Además creamos una variable privada para manejar esa capa. En el constructor asignamos la capa pasada a esta variable creada y el nombre de la capa. El código para el constructor queda: En el método Load del formulario añadimos:

Public Class frm_tabla Private capa_a_mostrar As MapWinGIS.Shapefile 'Variable para manejar la capa actual Private titulo As String 'Para poner el título en el formulario Public Sub New( ByVal capa As MapWinGIS.Shapefile, ByVal untitulo As String ) capa_a_mostrar = capa 'asigno la variable el valor pasado en el constructor titulo = untitulo 'Lo mismo para el nombre de la capa en la leyenda InitializeComponent() 'Para que nos cree los componentes añadidos End Sub

Private Sub frm_tabla_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim mitabla As New DataTable 'Creo una tabla para añadir la información Dim mifila As DataRow 'Para manejar una Fila Dim i, j As Integer 'Contadores para los bucles Me.Text = "Atributos de la capa " & titulo 'Pongo en el Titulo del Formulario el nombre de la capa For i = 0 To capa_a_mostrar.NumFields - 1 'Recorro los campos de los atributos de la capa mitabla.Columns.Add(capa_a_mostrar.Fiel d(i).Name) 'Añado una columna a la tabla con el nombre de cada campo de la capa Next

Page 14: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 14 Universidad de Salamanca

Lo que hacemos es añadir una columna para cada campo de la tabla seleccionada. Luego recorremos las formas y agregamos una fila para los datos de cada una ellas. Al final asignamos la tabla formada al DataViewGrid. Para que nos muestre el formulario le ponemos el código al menú Atributos/Ver Tabla creado: Si ejecutamos el programa con la capa de capitales seleccionada la información que nos muestra será:

For i = 0 To capa_a_mostrar.NumShapes - 1 'Recorro las formas de la capa mifila = mitabla.NewRow 'Creo una fila para cada forma For j = 0 To capa_a_mostrar.NumFields - 1 'Recorro los campos que serán las columnas mifila(j) = capa_a_mostrar.CellValu e(j, i) 'Pongo en cada fila el campo j de la forma i Next mitabla.Rows.Add(mifila) 'Añado la fila a la tabla cuando tiene todos los campos de la forma Next dvg_tabla.DataSource = mitabla 'Asigno la tabla creada al DataViewGrid para mostrarla End Sub

Private Sub VerTablaToolStripMenuItem_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VerTablaToolStripMenuItem.Click Dim miCapa As New MapWinGIS.Shapefile 'Variable de tipo forma para manejar la capa miCapa = Mapa.get_GetObject(Leyenda.Selecte dLayer) 'Tomo la capa correspondiente al elementoseleccioando en la Leyenda 'Creo una instancia del formulario que nos mostrará los atributos 'Pasandole el manejador de la capa y el título Dim visorAtributos As New frm_tabla(miCapa, Leyenda.Map.LayerName(Leyenda.SelectedLayer)) 'Muestro el formulario visorAtributos.ShowDialog() End Sub

Page 15: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 15 Universidad de Salamanca

4.2 Consultas. Resaltar Formas. Otra cosa interesante es poder destacar alguna de las formas en el mapa según el valor de uno de los campos. Intentaremos localizar el país a partir de su nombre, Si lo encontramos lo coloreamos de amarillo si no ponemos un mensaje. Creamos otra opción en el menú Consultas/Localizar País, quedará:

Agregamos un formulario al que llamamos frm_BuscarPais.vb. En este formulario agregamos un botón y un campo de texto txt_pais. Tendrá el aspecto:

En el formulario declaramos una variable para recibir el mapa del principal y creamos un constructor sobrecargado quedará: Ahora en el botón Resaltar asignamos:

Public Class frm_BuscarPais Private miMapa As AxMapWinGIS.AxMap 'Variable para recibir el mapa Public Sub New( ByVal unMapa As AxMapWinGIS.AxMap) miMapa = unMapa 'Asigno a la variable el mapa pasado InitializeComponent() End Sub

Private Sub Button1_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim encontrado As Boolean 'PAra informar si no existe el nombre indicado Dim micapa As New MapWinGIS.Shapefile encontrado = False micapa = miMapa.get_GetObject(0) 'Cojo la capa 0 que es la de los paises por el orden de carga For i As Integer = 0 To micapa.NumShapes 'recorro las formas de la capa If UCase(micapa.CellValue(0, i)) = UCase(txt_pais.Tex t) Then 'Comparo el primer campo de cada forma que será el nombre del país

Page 16: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 16 Universidad de Salamanca

Para que nos muestre el formulario añadimos este código en el menú: Lo ejecutamos y probamos. Con España (Spain), Alemania (Germany) e Italia (Italy) resaltados nos queda:

Guardamos el proyecto.

'Pongo color amarillo a la forma que se encuentra e n la posición indicada miMapa.set_ShapeFillColor(0, i, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Yellow))) 'Para saber que sí existía el país encontrado = True Exit Sub 'Salgo para no seguir buscando cuando encuentro el primero End If Next If Not encontrado Then 'Si no lo ha encontrado se lo indico MessageBox.Show( "No se encontró el Pais" , "Resaltar Paises" ) End If End Sub

Private Sub LocalizarPaisToolStripMenuItem_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LocalizarPaisToolStripMenuItem.Click Dim localizarPais As New frm_BuscarPais(Mapa) 'Creo una instancia del formulario para resaltar el pais localizarPais.Show() 'Le muestro de forma no modal y así podré seguir trabajando en el mapa End Sub

Page 17: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 17 Universidad de Salamanca

5 Mejorar la apariencia de las capas.

En el ejercicio anterior al cargar capas, Representábamos todas las formas de la capa con el mismo color. Si queremos aplicar un degradado a los tonos de las formas de una capa utilizamos esquemas de color.

5.1 Esquemas de color Para declarar un esquema de color utilizamos la clase ShapefileColorScheme del espacio de nombres MapWinGIS. Dentro de un esquema de color definimos varios intervalos, cada uno de ellos puede definir un degradado de colores. La clase que nos permite definir un intervalo es ShapefileColorBreak. Crearemos una instancia de la variable con: esquemaColor = New MapWinGIS.ShapefileColorScheme

Tenemos que asociar el manejador de capa a la capasobre la que queremos crear el esquema

esquemaColor.LayerHandle = unacapa

Además hay que indicarle el campo en el que se encuentran los valores que tomaremos para crear el esquema. esquemaColor.FieldIndex = 1 Para definir un intervalo creamos la instancia de la variable con: intervalo = New MapWinGIS.ShapefileColorBreak Podemos poner un título para la leyenda en la propiedad Caption: intervalo.Caption = "TITULO DEL INTERVALO" Indicamos el valor de comienzo del intervalo: intervalo.StartValue = min

El valor de final: intervalo.EndValue = max

El color inicial en este caso Rojo: intervalo.StartColor = Convert.ToUInt32( Drawing.ColorTranslator.ToOle(Color.Red))

El color final para el degradado en este caso Azul:

intervalo.EndColor = Convert.ToUInt32( Drawing.ColorTranslator.ToOle(Color.Blue))

Page 18: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 18 Universidad de Salamanca

Ahora tenemos que añadir el intervalo creado al esquema de color. esquemaColor.Add(intervalo)

También aplicamos el esquema al mapa Mapa.ApplyLegendColors(esquemaColor)

Y tenemos que actualizar la leyenda para que aparezca el intervalo añadido en la misma. Leyenda.Layers.ItemByHandle(unacapa).Refresh() Se pueden repetir los pasos para establecer las propiedades del intervalo, para crear varios de ellos, y añadirlos al mismo esquema de color. El color inicial y final del intervalo podría ser el mismo. También el valor inicial y final sería el mismo si queremos asignar un color para un valor fijo.

5.2 Añadir etiquetas a una capa según el texto de uno de los campos. Puede que en la tabla de atributos asociada a una capa tengamos un campo con etiquetas que queremos que se visualicen en el mapa. Si tenemos una capa manejada por una variable formaSF de tipo MapWinGIS.Shapefile, podemos recorrer el número de formas existentes en la misma con: For i = 0 To formaSF.NumShapes - 1

Podemos asignar auna variable de tipo String(texto) el valor del campo en el que se encuentra la etiqueta para cada forma texto = formaSF.CellValue(campo, i)

Necesitamos indicarle en qué posición deberá colocar la etiqueta, una posibilidad es usar las propiedades Extents.xMin y Extents.yMin, y las mismas para las máximas para calcular el punto medio en orizontal y en vertical de la forma. x = formaSF.Shape(i).Extents.xMin + ((formaSF.Shape(i).Extents.xMax - formaSF.Shape(i).Extents.xMin) / 2) y = formaSF.Shape(i).Extents.yMin + ((formaSF.Shape(i).Extents.yMax - formaSF.Shape(i).Extents.yMin) / 2)

Añadimos la etiqueta al mapa en unacapa, con un color, en la posición calculada y en este caso le indicamos la posición centrada sobre ese punto: Mapa.AddLabel(unacapa, texto, uncolor, x, y, MapWinGIS.tkHJustification.hjCenter)

Por último pomos modificar el tipo y el tamaño de las etiquetas para la capa que estamos rotulándo. Mapa.LayerFont(unacapa, "Times new roman", 8)

Page 19: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 19 Universidad de Salamanca

5.3 Rotular capas puntuales con imágenes personalizadas. Así cambiamos el tamaño del punto para la capa indicada. Dependiendo de las dimensiones de la imagen utilizada podemos necesitar modificar el tamaño proporcionado. Mapa.set_ShapeLayerPointSize(unacapa, 0.8)

Ahora le ponemos que utilice como tipo de punto para la capa uno definido por el usuario. Mapa.set_ShapeLayerPointType(unacapa, MapWinGIS.tkPointType.ptUserDefined)

Creamos una imagen y la cargamos con el icono a utilizar. Dim simboloimagen As New MapWinGIS.Image simboloimagen.Open(Application.StartupPath + "estrella.png")

Asociamos a la capa el símbolo cargado Mapa.set_UDPointType(unacapa, simboloimagen)

6 Crear una interfaz para SIG: AvilaSIG.

Al igual que en el ejercicio anterior, creamos ahora un programa que cargará los archivos que tengamos preparados y les asignará las propiedades que decidamos. Creamos otra aplicación con nombre AvilaSIG, para no repetir la parte de la barra de botones y el diseño del formulario importaremos el formulario del programa anterior MundoSIG. Cuando utilizamos algún componente añadido, en ocasiones nos da problemas la importación de un formulario si no hemos cargado la referencia en el proyecto. Para no cargar las referencias otra vez, Añadimos al form1 un control MapControl y un control Legend. Luego añadimos el formulario frm_Visor.vb y frm_tabla.vb del ejercicio anterior en el menú Proyecto/Agregar elemento existente, lo localizamos y lo añadimos. El formulario para consultar por país no lo necesitamos y podemos borrar la referencia a él en el menú principal, borrando la opción del menú que lo llamaba y la función asociada. En proyecto propiedades del proyecto, en la sección Aplicación le indicamos como formulario de inicio el nuestro.

Borramos el formulario form1 que nos crea con el botón derecho sobre él en el Explorador de Soluciones y pulsando Eliminar.

Page 20: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 20 Universidad de Salamanca

Tendríamos una aplicación igual a la de antes. Ahora eliminamos la opción del menú Consultas. Cargaremos la información en el evento Load del formulario. Si seleccionamos el formulario, en el evento Load, (lo vemos en las propiedades dando al rayo ), también haciendo doble-clic sobre él. Escribimos lo siguiente para cargar la capa del límite provincial. Antes deberemos guardar el proyecto y copiar los temas que se proporcionan en una subcarpeta llamada “Ávila” dentro de la carpeta “Debug” en la ruta de la aplicación: Repetiremos el proceso añadiendo a continuación la capa con la delimitación de la comarca de la Zona de Gredos en la provincia de Ávila. El código queda:

Private Sub frm_Visor_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim formaSF As MapWinGIS.Shapefile 'Nueva Forma a añadir Dim nombreTema As String 'Nombre del tema para la leyenda Dim unacapa As Integer 'Variable para manejar la capa cargada y modificar sus propiedades 'Asignamos el mapa a la leyenda para enlazarlos Leyenda.Map = Mapa.GetOcx() 'AGREGAMOS EL LIMITE PROVINCIAL DE LA PROVINCIA DE ÁVILA 'Creamos una forma nueva formaSF = New MapWinGIS.Shapefile 'Cogemos el nombre seleccionado nombreTema = Application.StartupPath + "\Avila\Avila.shp" 'Abrimos el archivo indicado como Objeto de forma formaSF.Open(nombreTema) 'añadimos la capa a la leyenda unacapa = Leyenda.Layers.Add(formaSF, True ) 'Ponemos como nombre de la capa en la leyenda el no mbre del archivo Leyenda.Map.LayerName(unacapa) = "LIMITE PROVINCIAL" 'System.IO.Path.GetFileNameWithoutExtension(nombreT ema) 'Cambiamos el grosor de Linea de la capa añadida Mapa.set_ShapeLayerLineWidth(unacapa, 2) 'Cambiamos el Color de linea de la forma Mapa.set_ShapeLayerLineColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Black))) 'Cambiamos el Color del relleno de la forma poligon al Mapa.set_ShapeLayerFillColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Orange)))

'AGREGAMOS LA DELIMITACIÓN DE LA COMARCA DE GREDOS 'Creamos una forma nueva formaSF = New MapWinGIS.Shapefile 'Cogemos el nombre seleccionado nombreTema = Application.StartupPath + "\Avila\comarca.shp" 'Abrimos el archivo indicado como Objeto de forma formaSF.Open(nombreTema) 'añadimos la capa a la leyenda unacapa = Leyenda.Layers.Add(formaSF, True ) 'Ponemos como nombre de la capa en la leyenda el no mbre del archivo Leyenda.Map.LayerName(unacapa) = "COMARCA" 'Cambiamos el grosor de Linea de la capa añadida

Page 21: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 21 Universidad de Salamanca

La siguiente capa que añadiremos es la capa Gredos.shp que tiene información con los municipios de la comarca. Si comparamos los tres bloques de código anteriores comprobaremos que son prácticamente iguales, solo cambiamos el nombre del SHP cargado, el título para la leyenda y el color de relleno de la capa. Vamos a ejecutar el programa. Vemos el aspecto:

Leyenda.Map.LayerName(unacapa) = "COMARCA" 'Cambiamos el grosor de Linea de la capa añadida Mapa.set_ShapeLayerLineWidth(unacapa, 2) 'Cambiamos el Color de linea de la forma Mapa.set_ShapeLayerLineColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Black))) 'Cambiamos el Color del relleno de la forma poligon al Mapa.set_ShapeLayerFillColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.OrangeRed)))

'AGREGAMOS LOS MUNICIPIOS DE LA ZONA 'Creamos una forma nueva formaSF = New MapWinGIS.Shapefile 'Cogemos el nombre seleccionado nombreTema = Application.StartupPath + "\Avila\gredos.shp" 'Abrimos el archivo indicado como Objeto de forma formaSF.Open(nombreTema) 'añadimos la capa a la leyenda unacapa = Leyenda.Layers.Add(formaSF, True ) 'Ponemos como nombre de la capa en la leyenda el no mbre del archivo Leyenda.Map.LayerName(unacapa) = "GREDOS" 'System.IO.Path.GetFileNameWithoutExtension(nombreT ema) 'Cambiamos el grosor de Linea de la capa añadida Mapa.set_ShapeLayerLineWidth(unacapa, 2) 'Cambiamos el Color de linea de la forma Mapa.set_ShapeLayerLineColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Black))) 'Cambiamos el Color del relleno de la forma poligon al Mapa.set_ShapeLayerFillColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Chocolate)))

Page 22: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 22 Universidad de Salamanca

Seleccionamos la capa GREDOS en la leyenda y accedemos al menú Atributos/Ver tabla. Nos presentará:

Si nos fijamos la segunda columna presenta el campo Area con la superficie de los municipios en m2. La columna Hectares tiene la superficie en Hectáreas. El campo area aunque es la segunda columna tiene el índice 1, ya que los índices para manejar campos comienzan en 0. Aprovechamos los valores de esta columna para crear un esquema de color según la superficie. Utilizamos las clases comentadas en el capítulo anterior para esquemas de color. En esta primera parte declaramos las variables que utilizaremos, entre ellas la correspondiente al esquema de color y la correspondiente al intervalo.

'CREAR ESQUEMA DE COLOR PARA LA CAPA GREDOS SEGUN LA SUPERFICIE DE LOS MUNICIPIOS Dim esquemaColor As MapWinGIS.ShapefileColorScheme Dim intervalo As MapWinGIS.ShapefileColorBreak Dim i As Long Dim min, max As Double 'Creamos una forma nueva formaSF = New MapWinGIS.Shapefile 'Cogemos el nombre seleccionado nombreTema = Application.StartupPath + "\Avila\gredos.shp" 'Abrimos el archivo indicado como Objeto de forma formaSF.Open(nombreTema) 'Buscamos el mayor y el menor de los valores para e l campo 1 que es el área For i = 0 To formaSF.NumShapes - 1 If i = 0 Then max = formaSF.CellValue(1, i) min = formaSF.CellValue(1, i) End If If formaSF.CellValue(1, i) > max Then max = formaSF.CellValue(1, i) ElseIf formaSF.CellValue(1, i) < min Then min = formaSF.CellValue(1, i) End If Next

Page 23: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 23 Universidad de Salamanca

Al final de este bloque recorremos todas las formas de la capa analizando el valor del área, comparamos con el almacenado para las variables max y min, de modo que al terminar el recorrido, estas variables tendrán el valor menor para el área y el valor mayor respectivamente. Ahora continuamos creando el esquema de color: Vamos a ejecutar el programa y comprobamos el aspecto que presenta el degradado, así como la leyenda con el intervalo añadido.

'añadimos la capa a la leyenda unacapa = Leyenda.Layers.Add(formaSF, True ) 'Ponemos como nombre de la capa en la leyenda el no mbre del archivo Leyenda.Map.LayerName(unacapa) = "MUNICIPIOS DE GREDOS" 'Cambiamos el Color del relleno de la forma poligon al Mapa.set_ShapeLayerFillColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.LightSteelBlue))) 'Creamos un objeto Esquema de Color asociado al cam po 1 esquemaColor = New MapWinGIS.ShapefileColorScheme esquemaColor.LayerHandle = unacapa esquemaColor.FieldIndex = 1 'Creamos un degradado del mayor al menor de los val ores intervalo = New MapWinGIS.ShapefileColorBreak 'Título para el intervalo intervalo.Caption = "Degradado según superficie" 'Valor de comienzo la superficie mínima de las exis tentes intervalo.StartValue = min 'Valor de final, la superficie mayor intervalo.EndValue = max 'Color de comienzo en este caso Azul claro metaliza do intervalo.StartColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.LightSteelBlue)) 'Color de fin Verde intervalo.EndColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Green)) 'Añadimos el intervalo esquemaColor.Add(intervalo) 'Aplicamos el esquema al mapa Mapa.ApplyLegendColors(esquemaColor) 'Refrescamos la leyenda para que refleje el degrada do Leyenda.Layers.ItemByHandle(unacapa).Refres h()

Page 24: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 24 Universidad de Salamanca

Intentaremos ahora el uso de etiquetas para la capa Municipios de Gredos que acabamos de añadir. Si volvemos a mirar la tabla de datos mostrada anteriormente nos daremos cuenta que la primera columna contiene los nombres de los municipios. Esas son las etiquetas que queremos colocar. Si lo ejecutamos y ampliamos a la zona de la comarca tendremos:

'COLOCAMOS LOS NOMBRES DE LOS MUNICIPIOS COMO ETIQUETAS Dim campo As Integer Dim texto As String Dim x As Double , y As Double Dim uncolor As UInt32 'Asignamos a la variable el manejador de la capa 3, la 4ª que es la que vamos a rotular unacapa = Mapa.get_LayerHandle(3) 'Asignamos a la variable de forma la capa anterior formaSF = Mapa.get_GetObject(unacapa) 'Asignamos el campo que contiene los rótulos, el 0 campo = 0 'Para no tener una llamada a la función muy larga a signamos el color a esta variable uncolor = System.Convert.ToUInt32(Drawing.ColorTranslator.ToO le(Color.Black)) 'Recorremos todas las formas de los municipios para poner el nombre a cada una For i = 0 To formaSF.NumShapes - 1 'Tomamos en la variable texto el nombre que está en la columna 0 y fila la forma contemplada texto = formaSF.CellValue(campo, i) 'Calculamos la x y la y dónde colocar los textos. S erá el centro aproximado de la forma x = formaSF.Shape(i).Extents.xMin + ((formaSF.Shape(i).Extents.xMax - formaSF.Shape(i). Extents.xMin) / 2) y = formaSF.Shape(i).Extents.yMin + ((formaSF.Shape(i).Extents.yMax - formaSF.Shape(i). Extents.yMin) / 2) 'Añadimos la etiqueta a la capa en la posición y co n el color indicados. La colocamos centrada Mapa.AddLabel(unacapa, texto, uncolor, x, y, MapWinGIS.tkHJustification.hjCenter) 'Indicamos el tamaño del texto y el tipo de letra Mapa.LayerFont(unacapa, "Times new roman" , 8) Next

Page 25: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 25 Universidad de Salamanca

6.1 Crear esquema de color con varios intervalos. En la tabla de atributos de la capa Gredos.shp, tenemos un campo con nombre Causalidad:

En ese campo los valores son: Muy alto, Alto, Moderado, Bajo, Muy bajo. Queremos asignar un color para cada uno de los valores. Utilizaremos esquemas de color, con varios intervalos uno para cada valor: Hasta aquí hemos creado el esquema, y el primer intervalo para el valor “Muy alto”, ponemos un único color y un único valor en comienzo y fin.

'Abrimos el archivo indicado como Objeto de forma formaSF.Open(nombreTema) 'añadimos la capa a la leyenda unacapa = Leyenda.Layers.Add(formaSF, True ) 'Ponemos el nombre de la capa en la leyenda Leyenda.Map.LayerName(unacapa) = "RIESGO INCENDIOS" 'Cambiamos el Color del relleno de la forma poligon al Mapa.set_ShapeLayerFillColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Red))) 'Creamos un objeto Esquema de Color asociado al cam po 1 esquemaColor = New MapWinGIS.ShapefileColorScheme 'Le asociamos el manejador a la capa esquemaColor.LayerHandle = unacapa 'El campo que tiene los valores es el 6 esquemaColor.FieldIndex = 6 'Creamos un intervalo para el valor muy alto intervalo = New MapWinGIS.ShapefileColorBreak 'Titulo del intervalo intervalo.Caption = "MUY ALTO" intervalo.StartValue = "Muy alto" 'Cuidado con la coincidencia exacta. También sensible a mayúsculas intervalo.EndValue = "Muy alto" 'Mismo valor de final intervalo.StartColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.DarkRed)) 'Color de comienzo y fin iguales intervalo.EndColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.DarkRed)) 'Añadimos el intervalo esquemaColor.Add(intervalo)

Page 26: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 26 Universidad de Salamanca

Vamos con los siguientes intervalos. Como vemos solo cambian los títulos, valores y colores, se van añadiendo al esquema cada uno de ellos. Al final aplicamos el esquema al mapa y reflejamos la leyenda:

'Creamos un intervalo para el valor alto intervalo = New MapWinGIS.ShapefileColorBreak intervalo.Caption = "ALTO" intervalo.StartValue = "Alto" intervalo.EndValue = "Alto" intervalo.StartColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Red)) intervalo.EndColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Red)) 'Añadimos el intervalo esquemaColor.Add(intervalo) 'Creamos un intervalo para el valor moderado intervalo = New MapWinGIS.ShapefileColorBreak intervalo.Caption = "MODERADO" intervalo.StartValue = "Moderado" intervalo.EndValue = "Moderado" intervalo.StartColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Orange)) intervalo.EndColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Orange)) 'Añadimos el intervalo esquemaColor.Add(intervalo) 'Creamos un intervalo para el valor bajo intervalo = New MapWinGIS.ShapefileColorBreak intervalo.Caption = "BAJO" intervalo.StartValue = "Bajo" intervalo.EndValue = "Bajo" intervalo.StartColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Yellow)) intervalo.EndColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Yellow)) 'Añadimos el intervalo esquemaColor.Add(intervalo) 'Creamos un intervalo para el valor muy bajo intervalo = New MapWinGIS.ShapefileColorBreak intervalo.Caption = "MUY BAJO" intervalo.StartValue = "Muy bajo" intervalo.EndValue = "Muy bajo" intervalo.StartColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.LightYellow)) intervalo.EndColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.LightYellow)) 'Añadimos el intervalo esquemaColor.Add(intervalo) 'Aplicamos el esquema al mapa Mapa.ApplyLegendColors(esquemaColor) 'Refrescamos la leyenda para que refleje el degrada do Leyenda.Layers.ItemByHandle(unacapa).Refres h() End Sub

Page 27: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 27 Universidad de Salamanca

Ejecutamos el programa de nuevo:

Guardamos el Proyecto.

7 Cargar capa de tipo imagen.

Recuperamos el programa MundoSIG de unos ejercicios atrás. Vamos a cargar una capa de tipo Imagen como fondo a modo del fondo oceánico. Para ello copiamos la carpeta mundo con los archivos necesarios a la carpeta Debug en la ruta del programa, normalmente en: Mis documentos\Visual Studio 2005\Projects\MundoSIG\MundoSIG\bin\Debug Ahora hacemos doble-clic sobre el título del formulario frm_visor de esta aplicación y añadimos en el Form_Load, como primera capa la imagen del fondo marino.

'Debajo de la línea Leyenda.Map = Mapa.GetOcx() 'AGREGAMOS EL FONDO OCEÁNICO QUE ES UNA CAPA IMAGEN Dim formaImagen As MapWinGIS.Image 'Creamos una imagen nueva formaImagen = New MapWinGIS.Image 'Cogemos el nombre seleccionado nombreTema = Application.StartupPath + "\Mundo\image.bmp" 'Abrimos el archivo indicado como Objeto Imagen formaImagen.Open(nombreTema) 'añadimos la capa a la leyenda unacapa = Leyenda.Layers.Add(formaImagen, True ) 'Ponemos como nombre de la capa el indicado Leyenda.Map.LayerName(unacapa) = "FONDO OCEÁNICO"

Page 28: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 28 Universidad de Salamanca

Si probamos a ejecutarlo comprobamos el fondo cargado.

7.1 Cargar símbolo de tipo imagen. En el código que teníamos para cargar el rombo en la capa puntual de las ciudades, hacemos algunas modificaciones para que tome como símbolo una imagen. Este es el código actual: Cambiamos las últimas líneas desde el color para dejar: Probamos a ejecutar el programa para contemplar la apariencia que nos ofrecen los cambios introducidos:

'AGREGAMOS LAS CAPITALES QUE ES UNA CAPA CON INFORMACIÓN PUNTUAL 'Creamos una forma nueva formaSF = New MapWinGIS.Shapefile 'Cogemos el nombre seleccionado nombreTema = Application.StartupPath + "\Mundo\cities_capital_pt.shp" 'Abrimos el archivo indicado como Objeto de forma formaSF.Open(nombreTema) 'añadimos la capa a la leyenda unacapa = Leyenda.Layers.Add(formaSF, True ) 'Ponemos como nombre de la capa en la leyenda el no mbre del archivo Leyenda.Map.LayerName(unacapa) = "CAPITALES" 'Cambiamos el grosor de Linea de la capa añadida Mapa.set_ShapeLayerLineWidth(unacapa, 1) 'Cambiamos el Color de los puntos de la forma Mapa.set_ShapeLayerPointColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Red))) 'Indicamos el tamaño del punto Mapa.set_ShapeLayerPointSize(unacapa, 6) 'Especificamos la forma del punto. Mapa.set_ShapeLayerPointType(unacapa, MapWinGIS.tkPointType.ptDiamond)

Mapa.set_ShapeLayerPointColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Colo r.Red))) 'Como símbolo una foto con forma de estrella en vez de los símbolos predeterminados. Mapa.set_ShapeLayerPointSize(unacapa, 0.8) 'Asignamos el punto a la capa como definido por el usuario Mapa.set_ShapeLayerPointType(unacapa, MapWinGIS.tkPointType.ptUserDefined) 'Creamos el nuevo objeto imagen Dim simboloimagen As New MapWinGIS.Image 'Cargamos la imagen simboloimagen.Open(Application.StartupPath + "\Mundo\estrella.png" ) 'Le asignamos el símbolo cargado al mapa Mapa.set_UDPointType(unacapa, simboloimagen )

Page 29: 1 ALGUNOS PROGRAMAS NECESARIOS. - ocw.usal.esocw.usal.es/.../contenidos/Materiales/Tema4_GPS_SIG.pdf · Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y

Herram. Inf. para el Geoprocesado. Procesamiento y Gestión de datos GPS y SIG Geotecnologías Cartográficas en Ingeniería y Arquitectura

Escuela Politécnica Superior de Ávila 29 Universidad de Salamanca

Guardamos el Proyecto.