Vous êtes sur la page 1sur 29

Herram. Inf. para el Geoprocesado.

Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

1 ALGUNOS PROGRAMAS NECESARIOS.


Cuando diseamos un Sistema de Informacin Geogrfica, nos puede interesar distribuir el SIG generado para que lo puedan consultar personas que no tengan una aplicacin de SIG instalada en su ordenador. La idea ser crearse una aplicacin propia que permita la visualizacin del mapa y la consulta de los datos necesarios. Una opcin para hacerlo sera con las herramientas de Map Object de ArcGis. Dada la naturaleza semipresencial del Master, y puesto que muchos alumnos tendrn que realizar las prcticas 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 pgina 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, despus de hacer zoom hacia Espaa.

Adems se ha seleccionado la herramienta de informacin y se consultan los atributos.


Escuela Politcnica Superior de vila Universidad de Salamanca

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

3 Crear un visualizador de Mapas SHP.


Vamos a comenzar el desarrollo de una aplicacin 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, slo 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 aadimos un men y una barra de herramientas. En el grupo Mens y barras de herramientas cogemos MenuStrip y lo llevamos al formulario, y ToolStrip y lo llevamos igualmente. (Detallo este paso porque algunas personas decan en clase que luego no encuentran alguno de los componentes necesarios).

Aadimos tambin el cuadro de dilogo de abrir en el grupo Cuadros de dilogo de las herramientas:

Al seguir estos pasos nuestro formulario tendr el aspecto:

Escuela Politcnica Superior de vila Universidad de Salamanca

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

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 cdigo cuando los necesitamos. Por ejemplo, para el cuadro de dilogo de apertura cuando lo queramos utilizar escribiremos OpenFileDialog1. Escribimos ahora las opciones del men. De momento ponemos: Archivo Agregar Tema Salir Ver Leyenda

Adems aadimos los botones a la Barra de herramientas utilizando los iconos proporcionados. Pulsamos sobre la barra y en la flechita de nuevo botn que muestra, pulsamos y seleccionamos Button. Usaremos separadores cuando creamos conveniente.

En la propiedad Imagen del botn aadido elegimos el icono correspondiente. Al pinchar sale:

Luego al pulsar importar seleccionamos el icono y Aceptamos. En la propiedad Text de cada botn vamos escribiendo una descripcin como aclaracin que se copiar en ToolTipText, que corresponde al mensaje que nos muestra al colocarnos sobre ellos. La barra nos quedar: Zoom Previo

Agregar Tema

Eliminar Tema

Encuadre

Zoom Extensin

Zoom Aumentar

Zoom Disminuir 3

Escuela Politcnica Superior de vila Universidad de Salamanca

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

Ahora vamos con el diseo 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 botn derecho del ratn en la parte inferior del panel de herramientas dnde pone General y seleccionamos Agregar Ficha, luego ponemos el nombre Componentes SIG.

Ahora pulsamos al botn derecho del ratn en la ficha creada y seleccionamos elegir elementos, aadiremos el componente de MapWindow, en la ficha Componentes COM, seleccionamos Map Control.

Repetimos el proceso para la leyenda, pero ahora pulsamos el botn Examinar y localizamos la dll MapWinInterfaces.dll que encontraremos en la ruta C:\Archivos de Programa\MapWindow, si realizamos la instalacin con la configuracin por defecto. Tras esto la ficha de herramientas creada se mostrar:

Para facilitar la colocacin de estos componentes en la pantalla vamos a utilizar un panel partido como contenedor de los mismos. De este modo podremos cambiar el tamao 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
Escuela Politcnica Superior de vila Universidad de Salamanca

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

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 separacin 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:

Escuela Politcnica Superior de vila Universidad de Salamanca

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

Comenzamos a asignar el cdigo. A la opcin del men Archivo/Agregar Tema le asignaremos el cdigo siguiente:
Private Sub AgregarTemaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AgregarTemaToolStripMenuItem.Click 'Nueva Forma a aadir 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) 'aadimos la capa a la leyenda unacapa = Leyenda.Layers.Add(formaSF, True) 'Ponemos como nombre de la capa en la leyenda el nombre del archivo Leyenda.Map.LayerName(unacapa) = System.IO.Path.GetFileNameWithoutExtension(nombreTema) 'Cambiamos el grosor de Linea de la capa aadida Mapa.set_ShapeLayerLineWidth(unacapa, 2) 'Cambiamos el Color de linea de la forma Mapa.set_ShapeLayerLineColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.Red))) End If End Sub

Este mismo cdigo le asignamos tambin al botn de Agregar tema.


Escuela Politcnica Superior de vila Universidad de Salamanca

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

Al botn de Eliminar Tema le asignamos:


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

Al botn de Encuadre le ponemos:


Mapa.CursorMode = MapWinGIS.tkCursorMode.cmPan 'Establecemos el modo del Cursor a Encuadre. 'De este modo cambia la forma de la flecha del ratn por una 'mano y podemos cambiar la zona de mapa que se muestra en la pantalla.

Al de Zoom Extensin:
Mapa.ZoomToMaxExtents()

Al de Aumentar
Mapa.CursorMode = MapWinGIS.tkCursorMode.cmZoomIn

Al de Reducir
Mapa.CursorMode = MapWinGIS.tkCursorMode.cmZoomOut

Al de Zoom Previo
Mapa.ZoomToPrev()

Vamos ahora con el men Ver/Leyenda. Lo primero ser poner la propiedad Checked del mismo a true. Eso lo hacemos seleccionndolo y cambiando el valor en la lista de propiedades. Luego le asignamos el cdigo:
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

Escuela Politcnica Superior de vila Universidad de Salamanca

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

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 lnea a todas las capas el dibujo queda poco claro. Intentaremos arreglarlo en futuros ejercicios.

Escuela Politcnica Superior de vila Universidad de Salamanca

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

4 Visor de Informacin Fija.


Lo normal es que queramos facilitar la visualizacin y consulta de la informacin que hayamos generado. Esa informacin 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 informacin. Ahora creamos otra aplicacin con nombre MundoSIG, para no repetir la parte de la barra de botones y el diseo del formulario importaremos el formulario del programa anterior. Cuando utilizamos algn componente aadido, en ocasiones nos da problemas la importacin de un formulario si no hemos cargado la referencia en el proyecto. Para no cargar las referencias otra vez, Aadimos al form1 un control MapControl y un control Legend. Luego aadimos el formulario frm_Visor.vb del ejercicio anterior en el men Proyecto/Agregar elemento existente, lo localizamos y lo aadimos. En proyecto propiedades del proyecto, en la seccin Aplicacin le indicamos como formulario de inicio el nuestro.

Borramos el formulario form1 que nos crea con el botn derecho sobre l en el Explorador de Soluciones y pulsando Eliminar. Tendramos una aplicacin igual a la de antes. Ahora eliminamos la opcin del men Agregar/Tema, y los botones de Aadir y eliminar capas. Cargaremos la informacin en el evento Load del formulario. Quitamos tambin 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 aadir 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()

Escuela Politcnica Superior de vila Universidad de Salamanca

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura
'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) 'aadimos 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(nombreTema) 'Cambiamos el grosor de Linea de la capa aadida Mapa.set_ShapeLayerLineWidth(unacapa, 2) 'Cambiamos el Color de linea de la forma Mapa.set_ShapeLayerLineColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.Black))) 'Cambiamos el Color del relleno de la forma poligonal Mapa.set_ShapeLayerFillColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.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) 'aadimos 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(nombreTema) 'Cambiamos el grosor de Linea de la capa aadida Mapa.set_ShapeLayerLineWidth(unacapa, 1) 'Cambiamos el Color de linea de la forma Mapa.set_ShapeLayerLineColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.Blue))) 'AGREGAMOS LAS CAPITALES.UNA CAPA CON INFORMACIN 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) 'aadimos 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(nombreTema) 'Cambiamos el grosor de Linea de la capa aadida Mapa.set_ShapeLayerLineWidth(unacapa, 1) 'Cambiamos el Color de los puntos de la forma Mapa.set_ShapeLayerPointColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.Red)))

Escuela Politcnica Superior de vila Universidad de Salamanca

10

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura
'Indicamos el tamao 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 reemplazaramos por las 2 anteriores para mostrar 'Como smbolo una foto con forma de estrella en vez de los smbolos 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

Como vemos hay tres bloques que aaden una capa con informacin de polgonos, otra con informacin lineal y otra con informacin puntual. Adems modifican el aspecto de las formas creadas. Al elegir el tipo de punto cabe la posibilidad de utilizar smbolos a procedentes de imgenes que se cargan con las instrucciones de las ltimas lineas comentadas. Con esto ejecutamos el programa. Ahora sera un mapa previamente preparado. El usuario se limitara a ampliar y reducir el mapa y ha desplazar la zona visualizada. El aspecto que presentara es:

En el Ejercicio anterior cogamos 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:

Escuela Politcnica Superior de vila Universidad de Salamanca

11

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

La lnea
Leyenda.Map.LayerName(unacapa) = System.IO.Path.GetFileNameWithoutExtension(nombreTema)

Por
Leyenda.Map.LayerName(unacapa) = "PAISES DEL MUNDO" Leyenda.Map.LayerName(unacapa) = "PRINCIPALES RIOS" Leyenda.Map.LayerName(unacapa) = "CAPITALES"

Para cada una de las capas cargadas segn el caso. Ahora nos queda:

4.1 Consultar los atributos.


Asociado a los archivos SHP con informacin grfica 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 opcin del men Atributos/Ver Tabla. Aadimos 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 botn. Aadimos tambin un DataViewGrid al que llamamos dvg_tabla. En la propiedad Dock de la tabla seleccionamos Fill. El formulario presentar el aspecto siguiente:

Escuela Politcnica Superior de vila Universidad de Salamanca

12

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

Ahora mostramos el cdigo del formulario, podemos hacerlo pulsando con el botn derecho sobre su nombre en el explorador de Soluciones y eligiendo Ver Cdigo. 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. Adems 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 cdigo para el constructor queda:
Public Class frm_tabla Private capa_a_mostrar As MapWinGIS.Shapefile 'Variable para manejar la capa actual Private titulo As String 'Para poner el ttulo 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 aadidos End Sub

En el mtodo Load del formulario aadimos:


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 aadir la informacin 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.Field(i).Name) 'Aado una columna a la tabla con el nombre de cada campo de la capa Next

Escuela Politcnica Superior de vila Universidad de Salamanca

13

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura
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 sern las columnas mifila(j) = capa_a_mostrar.CellValue(j, i)'Pongo en cada fila el campo j de la forma i Next mitabla.Rows.Add(mifila) 'Aado 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

Lo que hacemos es aadir 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 cdigo al men Atributos/Ver Tabla creado:
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.SelectedLayer) '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 ttulo Dim visorAtributos As New frm_tabla(miCapa, Leyenda.Map.LayerName(Leyenda.SelectedLayer)) 'Muestro el formulario visorAtributos.ShowDialog() End Sub

Si ejecutamos el programa con la capa de capitales seleccionada la informacin que nos muestra ser:

Escuela Politcnica Superior de vila Universidad de Salamanca

14

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

4.2 Consultas. Resaltar Formas.


Otra cosa interesante es poder destacar alguna de las formas en el mapa segn el valor de uno de los campos. Intentaremos localizar el pas a partir de su nombre, Si lo encontramos lo coloreamos de amarillo si no ponemos un mensaje. Creamos otra opcin en el men Consultas/Localizar Pas, quedar:

Agregamos un formulario al que llamamos frm_BuscarPais.vb. En este formulario agregamos un botn 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:
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

Ahora en el botn Resaltar asignamos:


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.Text) Then 'Comparo el primer campo de cada forma que ser el nombre del pas

Escuela Politcnica Superior de vila Universidad de Salamanca

15

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura
'Pongo color amarillo a la forma que se encuentra en la posicin indicada miMapa.set_ShapeFillColor(0, i, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.Yellow))) 'Para saber que s exista el pas 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

Para que nos muestre el formulario aadimos este cdigo en el men:


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

Lo ejecutamos y probamos. Con Espaa (Spain), Alemania (Germany) e Italia (Italy) resaltados nos queda:

Guardamos el proyecto.

Escuela Politcnica Superior de vila Universidad de Salamanca

16

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

5 Mejorar la apariencia de las capas.


En el ejercicio anterior al cargar capas, Representbamos 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 Adems 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 ttulo 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))
Escuela Politcnica Superior de vila Universidad de Salamanca

17

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

Ahora tenemos que aadir el intervalo creado al esquema de color. esquemaColor.Add(intervalo) Tambin aplicamos el esquema al mapa Mapa.ApplyLegendColors(esquemaColor) Y tenemos que actualizar la leyenda para que aparezca el intervalo aadido 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 aadirlos al mismo esquema de color. El color inicial y final del intervalo podra ser el mismo. Tambin el valor inicial y final sera el mismo si queremos asignar un color para un valor fijo.

5.2 Aadir etiquetas a una capa segn 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 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 posicin deber colocar la etiqueta, una posibilidad es usar las propiedades Extents.xMin y Extents.yMin, y las mismas para las mximas 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)

tenemos

una

MapWinGIS.Shapefile,

capa manejada por una variable formaSF de tipo podemos recorrer el nmero de formas existentes en la misma

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

Por ltimo pomos modificar el tipo y el tamao de las etiquetas para la capa que estamos rotulndo.
Mapa.LayerFont(unacapa, "Times new roman", 8)

Escuela Politcnica Superior de vila Universidad de Salamanca

18

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

5.3 Rotular capas puntuales con imgenes personalizadas.


As cambiamos el tamao del punto para la capa indicada. Dependiendo de las dimensiones de la imagen utilizada podemos necesitar modificar el tamao 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 smbolo 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 aplicacin con nombre AvilaSIG, para no repetir la parte de la barra de botones y el diseo del formulario importaremos el formulario del programa anterior MundoSIG. Cuando utilizamos algn componente aadido, en ocasiones nos da problemas la importacin de un formulario si no hemos cargado la referencia en el proyecto. Para no cargar las referencias otra vez, Aadimos al form1 un control MapControl y un control Legend. Luego aadimos el formulario frm_Visor.vb y frm_tabla.vb del ejercicio anterior en el men Proyecto/Agregar elemento existente, lo localizamos y lo aadimos. El formulario para consultar por pas no lo necesitamos y podemos borrar la referencia a l en el men principal, borrando la opcin del men que lo llamaba y la funcin asociada. En proyecto propiedades del proyecto, en la seccin Aplicacin le indicamos como formulario de inicio el nuestro.

Borramos el formulario form1 que nos crea con el botn derecho sobre l en el Explorador de Soluciones y pulsando Eliminar.
Escuela Politcnica Superior de vila Universidad de Salamanca

19

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

Tendramos una aplicacin igual a la de antes. Ahora eliminamos la opcin del men Consultas. Cargaremos la informacin en el evento Load del formulario. Si seleccionamos el formulario, en el evento Load, (lo vemos en las propiedades dando al rayo ), tambin haciendo doble-clic sobre l. Escribimos lo siguiente para cargar la capa del lmite 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 aplicacin:
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 aadir 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) 'aadimos la capa a la leyenda unacapa = Leyenda.Layers.Add(formaSF, True) 'Ponemos como nombre de la capa en la leyenda el nombre del archivo Leyenda.Map.LayerName(unacapa) = "LIMITE PROVINCIAL" 'System.IO.Path.GetFileNameWithoutExtension(nombreTema) 'Cambiamos el grosor de Linea de la capa aadida Mapa.set_ShapeLayerLineWidth(unacapa, 2) 'Cambiamos el Color de linea de la forma Mapa.set_ShapeLayerLineColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.Black))) 'Cambiamos el Color del relleno de la forma poligonal Mapa.set_ShapeLayerFillColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.Orange)))

Repetiremos el proceso aadiendo a continuacin la capa con la delimitacin de la comarca de la Zona de Gredos en la provincia de vila. El cdigo queda:
'AGREGAMOS LA DELIMITACIN 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) 'aadimos la capa a la leyenda unacapa = Leyenda.Layers.Add(formaSF, True) 'Ponemos como nombre de la capa en la leyenda el nombre del archivo Leyenda.Map.LayerName(unacapa) = "COMARCA" 'Cambiamos el grosor de Linea de la capa aadida

Escuela Politcnica Superior de vila Universidad de Salamanca

20

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura
Leyenda.Map.LayerName(unacapa) = "COMARCA" 'Cambiamos el grosor de Linea de la capa aadida Mapa.set_ShapeLayerLineWidth(unacapa, 2) 'Cambiamos el Color de linea de la forma Mapa.set_ShapeLayerLineColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.Black))) 'Cambiamos el Color del relleno de la forma poligonal Mapa.set_ShapeLayerFillColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.OrangeRed)))

La siguiente capa que aadiremos es la capa Gredos.shp que tiene informacin con los municipios de la comarca.
'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) 'aadimos la capa a la leyenda unacapa = Leyenda.Layers.Add(formaSF, True) 'Ponemos como nombre de la capa en la leyenda el nombre del archivo Leyenda.Map.LayerName(unacapa) = "GREDOS" 'System.IO.Path.GetFileNameWithoutExtension(nombreTema) 'Cambiamos el grosor de Linea de la capa aadida Mapa.set_ShapeLayerLineWidth(unacapa, 2) 'Cambiamos el Color de linea de la forma Mapa.set_ShapeLayerLineColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.Black))) 'Cambiamos el Color del relleno de la forma poligonal Mapa.set_ShapeLayerFillColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.Chocolate)))

Si comparamos los tres bloques de cdigo anteriores comprobaremos que son prcticamente iguales, solo cambiamos el nombre del SHP cargado, el ttulo para la leyenda y el color de relleno de la capa. Vamos a ejecutar el programa. Vemos el aspecto:

Escuela Politcnica Superior de vila Universidad de Salamanca

21

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

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 Hectreas. 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 segn la superficie. Utilizamos las clases comentadas en el captulo anterior para esquemas de color.
'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 el 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

En esta primera parte declaramos las variables que utilizaremos, entre ellas la correspondiente al esquema de color y la correspondiente al intervalo.
Escuela Politcnica Superior de vila Universidad de Salamanca

22

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

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 tendrn el valor menor para el rea y el valor mayor respectivamente. Ahora continuamos creando el esquema de color:
'aadimos la capa a la leyenda unacapa = Leyenda.Layers.Add(formaSF, True) 'Ponemos como nombre de la capa en la leyenda el nombre del archivo Leyenda.Map.LayerName(unacapa) = "MUNICIPIOS DE GREDOS" 'Cambiamos el Color del relleno de la forma poligonal Mapa.set_ShapeLayerFillColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.LightSteelBlue) )) 'Creamos un objeto Esquema de Color asociado al campo 1 esquemaColor = New MapWinGIS.ShapefileColorScheme esquemaColor.LayerHandle = unacapa esquemaColor.FieldIndex = 1 'Creamos un degradado del mayor al menor de los valores intervalo = New MapWinGIS.ShapefileColorBreak 'Ttulo para el intervalo intervalo.Caption = "Degradado segn superficie" 'Valor de comienzo la superficie mnima de las existentes intervalo.StartValue = min 'Valor de final, la superficie mayor intervalo.EndValue = max 'Color de comienzo en este caso Azul claro metalizado intervalo.StartColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.LightSteelBlue) ) 'Color de fin Verde intervalo.EndColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.Green)) 'Aadimos el intervalo esquemaColor.Add(intervalo) 'Aplicamos el esquema al mapa Mapa.ApplyLegendColors(esquemaColor) 'Refrescamos la leyenda para que refleje el degradado Leyenda.Layers.ItemByHandle(unacapa).Refresh()

Vamos a ejecutar el programa y comprobamos el aspecto que presenta el degradado, as como la leyenda con el intervalo aadido.

Escuela Politcnica Superior de vila Universidad de Salamanca

23

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

Intentaremos ahora el uso de etiquetas para la capa Municipios de Gredos que acabamos de aadir. 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.
'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 rtulos, el 0 campo = 0 'Para no tener una llamada a la funcin muy larga asignamos el color a esta variable uncolor = System.Convert.ToUInt32(Drawing.ColorTranslator.ToOle(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 dnde colocar los textos. Ser 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)

'Aadimos la etiqueta a la capa en la posicin y con el color indicados. La colocamos centrada Mapa.AddLabel(unacapa, texto, uncolor, x, y, MapWinGIS.tkHJustification.hjCenter) 'Indicamos el tamao del texto y el tipo de letra Mapa.LayerFont(unacapa, "Times new roman", 8) Next

Si lo ejecutamos y ampliamos a la zona de la comarca tendremos:

Escuela Politcnica Superior de vila Universidad de Salamanca

24

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

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:
'Abrimos el archivo indicado como Objeto de forma formaSF.Open(nombreTema) 'aadimos 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 poligonal Mapa.set_ShapeLayerFillColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.Red))) 'Creamos un objeto Esquema de Color asociado al campo 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. Tambin sensible a maysculas intervalo.EndValue = "Muy alto" 'Mismo valor de final intervalo.StartColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.DarkRed)) 'Color de comienzo y fin iguales intervalo.EndColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.DarkRed)) 'Aadimos el intervalo esquemaColor.Add(intervalo)

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.
Escuela Politcnica Superior de vila Universidad de Salamanca

25

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

Vamos con los siguientes intervalos. Como vemos solo cambian los ttulos, valores y colores, se van aadiendo 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(Color.Red)) intervalo.EndColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.Red)) 'Aadimos 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(Color.Orange)) intervalo.EndColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.Orange)) 'Aadimos 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(Color.Yellow)) intervalo.EndColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.Yellow)) 'Aadimos 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(Color.LightYellow)) intervalo.EndColor = Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.LightYellow)) 'Aadimos el intervalo esquemaColor.Add(intervalo) 'Aplicamos el esquema al mapa Mapa.ApplyLegendColors(esquemaColor) 'Refrescamos la leyenda para que refleje el degradado Leyenda.Layers.ItemByHandle(unacapa).Refresh() End Sub

Escuela Politcnica Superior de vila Universidad de Salamanca

26

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

Ejecutamos el programa de nuevo:

Guardamos el Proyecto.

7 Cargar capa de tipo imagen.


Recuperamos el programa MundoSIG de unos ejercicios atrs. Vamos a cargar una capa de tipo Imagen como fondo a modo del fondo ocenico. 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 ttulo del formulario frm_visor de esta aplicacin y aadimos en el Form_Load, como primera capa la imagen del fondo marino.
'Debajo de la lnea Leyenda.Map = Mapa.GetOcx() 'AGREGAMOS EL FONDO OCENICO 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) 'aadimos la capa a la leyenda unacapa = Leyenda.Layers.Add(formaImagen, True) 'Ponemos como nombre de la capa el indicado Leyenda.Map.LayerName(unacapa) = "FONDO OCENICO"

Escuela Politcnica Superior de vila Universidad de Salamanca

27

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

Si probamos a ejecutarlo comprobamos el fondo cargado.

7.1 Cargar smbolo de tipo imagen.


En el cdigo que tenamos para cargar el rombo en la capa puntual de las ciudades, hacemos algunas modificaciones para que tome como smbolo una imagen. Este es el cdigo actual:
'AGREGAMOS LAS CAPITALES QUE ES UNA CAPA CON INFORMACIN 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) 'aadimos la capa a la leyenda unacapa = Leyenda.Layers.Add(formaSF, True) 'Ponemos como nombre de la capa en la leyenda el nombre del archivo Leyenda.Map.LayerName(unacapa) = "CAPITALES" 'Cambiamos el grosor de Linea de la capa aadida Mapa.set_ShapeLayerLineWidth(unacapa, 1) 'Cambiamos el Color de los puntos de la forma Mapa.set_ShapeLayerPointColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.Red))) 'Indicamos el tamao del punto Mapa.set_ShapeLayerPointSize(unacapa, 6) 'Especificamos la forma del punto. Mapa.set_ShapeLayerPointType(unacapa, MapWinGIS.tkPointType.ptDiamond)

Cambiamos las ltimas lneas desde el color para dejar:


Mapa.set_ShapeLayerPointColor(unacapa, Convert.ToUInt32(Drawing.ColorTranslator.ToOle(Color.Red))) 'Como smbolo una foto con forma de estrella en vez de los smbolos 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 smbolo cargado al mapa Mapa.set_UDPointType(unacapa, simboloimagen)

Probamos a ejecutar el programa para contemplar la apariencia que nos ofrecen los cambios introducidos:

Escuela Politcnica Superior de vila Universidad de Salamanca

28

Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura

Guardamos el Proyecto.

Escuela Politcnica Superior de vila Universidad de Salamanca

29

Vous aimerez peut-être aussi