Professional Documents
Culture Documents
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.
Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura
Aadimos tambin el cuadro de dilogo de abrir en el grupo Cuadros de dilogo de las herramientas:
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
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:
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
Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura
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
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.
Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura
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()
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)))
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:
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:
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
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:
14
Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura
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
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
Lo ejecutamos y probamos. Con Espaa (Spain), Alemania (Germany) e Italia (Italy) resaltados nos queda:
Guardamos el proyecto.
16
Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura
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)
18
Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura
Ahora le ponemos que utilice como tipo de punto para la capa uno definido por el usuario.
Mapa.set_ShapeLayerPointType(unacapa, MapWinGIS.tkPointType.ptUserDefined)
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
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:
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.
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
24
Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura
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
26
Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura
Guardamos el Proyecto.
27
Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura
Probamos a ejecutar el programa para contemplar la apariencia que nos ofrecen los cambios introducidos:
28
Herram. Inf. para el Geoprocesado. Procesamiento y Gestin de datos GPS y SIG Geotecnologas Cartogrficas en Ingeniera y Arquitectura
Guardamos el Proyecto.
29