Sei sulla pagina 1di 33

DESARROLLO DE UNA

APLICACIN SIG CON


C#


2
0
1
4
Antonio MATA MARAVILLA


Copyright (c) 2013, MATA MARAVILLA Antonio.
Se otorga el permiso para copiar, distribuir y/o
modificar este documento bajo los trminos de
GNU Free Documentation License, Version 1.3 o
cualquier versin publicada posteriormente por
Free Software Foundation; sin Secciones
Invariantes ni Textos de la Cubierta Delantera
ni Textos de Cubierta Trasera.
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

1 COMPONENTES

Sistema diseado para capturar,
almacenar, manipular, analizar,
administrar y mostrar todo tipo de
dato geogrfico
Las computadoras utilizadas en
un SIG son equipos de alto
desempeo y con gran capacidad de
almacenamiento de datos
INTRODUCCIN
Tcnicamente, un sistema de informacin geogrfica (SIG) se define como una
tecnologa orientada al manejo de informacin geogrfica, la cual est conformada por
equipos electrnicos (hardware) programados adecuadamente (software), permitiendo el
manejo y el anlisis de una serie de datos espaciales (informacin geogrfica), siguiendo los
criterios definidos por el usuario de ellos (personal).
Desde la perspectiva informtica, un SIG es una aplicacin capaz de realizar tareas
orientadas al manejo de datos georreferenciados, los cuales combinan bases de datos
especializadas con elementos grficos para representar elementos geogrficos.
COMPONENTES
Un sistema de informacin geogrfica se encuentra constituido por cuatro elementos
bsicos: hardware, software, datos y personas.
El hardware, o componente fsico, est conformado por todos aquellos equipos, especialmente
de cmputo, que permiten recopilar, almacenar, procesar y mostrar datos cartogrficos
digitales: computadoras, monitores, impresoras, graficadores, discos duros, entre otros.
El software es la parte encargada de suministrar las herramientas necesarias para el anlisis
y la visualizacin de los datos geogrficos.
La parte ms importante de todo sistema es el dato, ya que en ste se basa la razn de ser de la
aplicacin. Dentro de un SIG, los datos pueden ser catalogados en espaciales y tabulares, los
cuales mantienen entre s una relacin muy estrecha, pues para cada elemento especial (grfico)
tiene vinculado uno tabular (registro).
Otro componente fundamental en un SIG es el personal, el cual puede ser clasificado de
manera general como experto, especialista y final. El experto es aquel usuario quien disea
y mantiene el sistema; un especialista tiene la funcin de elaborar las consultas, analizar la
informacin e introducir los datos al sistema, y el usuario final es aquel que hace uso de la
informacin existente en el sistema.
MODELACIN ESPACIAL
En la actualidad, los sistemas de informacin geogrfica son de gran utilidad en toda
aquella organizacin cuya gestin de productos y/o servicios de su inters puedan ser
representados de manera geogrfica: recursos naturales, ubicacin de clientes y
proveedores, distribucin de sucursales, rasgos culturales de sitios de inters, entre otros.
Para llevar a cabo esa gestin, un SIG maneja dos modelos de datos: vectorial y mapa de
bits.
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

2 MODELACIN ESPACIAL

VECTORIALES
Los datos vectoriales son una abstraccin de un elemento del mundo real, que es
representado por medio de un grfico, el cual hace uso de diversos sistemas de
coordenadas para ubicar al elemento sobre la superficie terrestre, manteniendo las
caractersticas geomtricas del elemento.
En los datos vectoriales, el inters de las representaciones se centra en la precisin de
localizacin de los elementos geogrficos sobre el espacio y donde los fenmenos a
representar son discretos, es decir, de lmites definidos. Cada una de estas geometras est
vinculada a un registro en una base de datos, en donde sus atributos son descritos.
Los datos vectoriales se pueden utilizar para representar variaciones continuas de
fenmenos.
El modelo de datos vectorial hace uso de tres tipos de grficas para la representacin de
distintos elementos geogrficos del mundo real: punto, lnea y polgono.
Los puntos son utilizados para las entidades geogrficas que pueden ser expresadas por un
nico punto de referencia, es decir, por su simple ubicacin. Por ejemplo, las localizaciones
de los pozos, picos de elevaciones o puntos de inters. Los puntos transmiten la menor
cantidad de informacin de estos tipos de archivo y no son posibles las mediciones.
Tambin pueden ser utilizados para representar zonas a una escala pequea. Por ejemplo,
las ciudades en un mapa del mundo estarn representadas por puntos en lugar de
polgonos.
Las lneas unidimensionales son usadas para rasgos lineales como ros, caminos,
ferrocarriles, rastros, lneas topogrficas o curvas de nivel. De igual forma que en las
entidades puntuales, en pequeas escalas pueden ser utilizados para representar polgonos.
En este tipo de elemento, pueden realizarse medicin de distancias o de longitudes.
Los polgonos bidimensionales se utilizan para representar elementos geogrficos que
cubren un rea particular sobre la superficie de la tierra. Estas entidades pueden
representar lagos, lmites de parques naturales, edificios, provincias, o los usos del suelo,
por ejemplo. Los polgonos transmiten la mayor cantidad de informacin en archivos con
datos vectoriales y en ellos se pueden medir el permetro y el rea.
MAPAS DE BITS
Un mapa de bits es una matriz de puntos, o pixeles, donde cada celda hace referencia a una
posicin nica de la superficie terrestre, y en conjunto representan el elemento geogrfico
de inters.
Los mapas de bits pueden ser imgenes, donde cada celda almacena un valor de color.
Otros valores registrados para cada celda puede ser un valor discreto, como el uso del
suelo, valores continuos, como temperaturas, o un valor nulo si no se dispone de datos. Si

Representacin de diversos
elementos geogrficos con vectores y
mapas de bits
Lmites polticos /
administrativos
Calles
Parcelas
Usos del suelo
Elevacin
Mundo real
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

3 FUTURO DE LOS SISTEMAS DE INFORMACIN
GEOGRFICA

bien una trama de celdas almacena un valor nico, estas pueden ampliarse mediante el uso
de las bandas del mapa de bits para representar los colores RGB (rojo, verde, azul), o una
tabla extendida de atributos con una fila para cada valor nico de clulas. La resolucin del
conjunto de datos del mapa de bits es el ancho de la celda en unidades sobre el terreno.
Los mapas de bits son almacenados en diferentes formatos, desde un archivo estndar
basado en la estructura de TIFF o JPEG, hasta grandes objetos binarios (BLOB), que son
almacenados directamente en sistema de gestin de base de datos. El almacenamiento en
bases de datos, cuando se indexan, por lo general permiten una rpida recuperacin de ste
tipo de datos, pero a costa de requerir el almacenamiento de millones registros con un
importante tamao de memoria. En un modelo de mapa de bits, cuanto mayor sea la
dimensin de cada celda, menor es la precisin o detalle de la representacin del espacio
geogrfico.
FUTURO DE LOS SISTEMAS DE INFORMACIN
GEOGRFICA
Muchas disciplinas se han beneficiado de la tecnologa subyacente en los SIG. El activo
mercado de los sistemas de informacin geogrfica se ha traducido en una reduccin de
costos y mejoras continuas en los componentes de hardware y software de los sistemas.
Esto ha provocado que el uso de esta tecnologa haya sido asimilada por universidades,
gobiernos, empresas e instituciones que lo han aplicado a sectores como los bienes races,
la salud pblica, la criminologa, la defensa nacional, el desarrollo sostenible, los recursos
naturales, la arqueologa, la ordenacin del territorio, el urbanismo, el transporte, la
sociologa o la logstica entre otros.
En la actualidad los SIG estn teniendo una fuerte implantacin en los llamados servicios
basados en la localizacin (LBS, Location Based Services) debido al abaratamiento y masificacin
de la tecnologa GPS integrada en dispositivos mviles de consumo (telfonos mviles,
computadoras porttiles). Los LBS permiten a los dispositivos mviles con GPS mostrar su
ubicacin respecto a puntos de inters fijos (restaurantes, gasolineras, cajeros, hidrantes, etc.
ms cercanos), mviles (amigos, hijos, autobuses, coches de polica) o para transmitir su
posicin a un servidor central para su visualizacin u otro tipo de tratamiento.
No obstante que la mayora de las organizaciones que han implementado soluciones SIG
se dan cuenta de la necesidad de personalizar este tipo de aplicaciones, con el fin de
mantener los datos actualizados y realizar un modelaje y anlisis espacial especfico, existe
en el mercado poco personal con el perfil necesario para llevar a cabo dichas tarea, lo que
representa un nicho laboral importante para aquellos profesionistas del rea de informtica
que posean las aptitudes necesarias para llevar a cabo el desarrollo y la gestin de este tipo
de sistemas de informacin.
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

4 CREANDO UNA APLICACIN SIG

CREANDO UNA APLICACIN SIG
En el mercado actual existe una gran cantidad de soluciones, comerciales y gratuitas,
orientadas al manejo de informacin cartogrfica digital, todas ellas con entornos
especializados para la gestin de ese tipo de informacin, imposibilitando su integracin a
los desarrollos personalizados de una organizacin.
Esto hace que el usuario tenga que recurrir a ms de una herramienta informtica para
obtener la informacin de su inters, as como depender de personal capacitado en el
manejo del SIG.
Por eso la importancia que el desarrollador de aplicaciones hechas a la medida, las cuales
necesiten incluir este tipo de tecnologa, conozca las bases tericas y tcnicas para su
implementacin.
En este captulo se presentarn las bases para el desarrollo de una aplicacin con Visual
Studio 2010, utilizando el lenguaje de programacin C# y el control ActiveX MapWinGIS,
que permite la integracin de la tecnologa SIG en una aplicacin de escritorio.
OBTENIENDO MAPWINGIS
Como un esfuerzo en el desarrollo de cdigo abierto activo, el proyecto GIS MapWindow
y su control ActiveX MapWinGIS son actualizados regularmente para su mejora. Debido a
esto, siempre se debe considerar hacerse de la ltima versin del componente AciveX
antes de dar inicio a cualquier proyecto de desarrollo. La manera ms comn, y cmoda, es
descargar el paquete de instalacin de MapWinGIS de la siguiente direccin:
http://mapwingis.codeplex.com/releases/view/110285
Se recomiendo descargar e instalar el paquete para 32 bits, aun cuando la tecnologa del
equipo de desarrollo sea de 64 bits.
Una vez instalado el control MapWinGIS, lo siguiente es
agregarlo a la caja de herramientas del entorno de desarrollo de
Visual Studio. Como primer paso, es recomendable agregar un
nuevo grupo de herramientas dentro de la Caja de
Herramientas (ToolBox), y darle el nombre de MapWinGIS.
Una vez que se tiene el nuevo grupo de herramientas, se
procede agregar el control ActiveX MapWinGIS
previamente instalado, para lo cual se expande el nuevo
grupo y al pulsar el botn derecho del ratn, del men
emergente, se elige la opcin Elegir Elementos
(Choose Items).
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

5 CREANDO UNA APLICACIN SIG

En la ventana de dilogo
Elegir Elementos de la Caja
de Herramientas (Choose
Toolbox Items), abrir la
pestaa Componentes COM
(COM Components) y
buscar la entrada Map
Control, marcarla y presionar
el botn Ok. Con lo anterior
se agrega a la Caja de
Herramientas (Toolbox) el
control MapWinGIS,
quedando listo para ser
incorporado en la aplicacin donde ser utilizado.

AGREGAR UN MAPA
Para agregar un componente axMap de MapWinGIS a un formulario de la aplicacin
donde ser utilizado, solo basta tomarlo de la Caja de Herramientas (Toolbox) y
arrastrarlo hacia el interior de ste, mostrando un rea en blanco, la cual puede ser
redimensionada de acuerdo al diseo de la aplicacin.
Para que el mapa se redimensione
automticamente cuando el formulario
cambia de tamao, establecer los
valores adecuados a la propiedad
Anchor en la ventana de
Propiedades (Properties)
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

6 CREANDO UNA APLICACIN SIG

Adems, dentro del cdigo del formulario se crea una
instancia de MapWinGIS que por omisin se recibe el
nombre de AxMap1.
La gestin de las capas que contienen la informacin
cartogrfica a visualizar dentro de la aplicacin es
realizada dentro del cdigo de la aplicacin, utilizando la
instancia AxMap1.
AADIR UNA CAPA DE DATOS AL MAPA
Una vez que se tiene el control MapWinGIS incorporado en la aplicacin, el primer paso
es cargar los datos geogrficos digitales, o capas, a mostrar dentro de l, para lo cual se
utilizar la instancia AxMap1.
Dependiendo del tipo del modelo de dato a insertar, ser el objeto necesario a crear y agregar
dentro de AxMap1: para datos vectoriales, crear una instancia de la clase ShapeFile,
mientras que para mapas de bits, instanciar la clase Image. Ambas clases se encuentran dentro
del paquete MapWinGIS.
Las ShapeFile e Image poseen un mtodo llamado Open, el cual recibe como
parmetro el nombre del archivo que contiene la informacin a mostrar.
Una vez que el objeto que contiene los datos geogrficos, debe ser agregado a la instancia
AxMap1 mediante el mtodo AddLayer, el cual recibe el nombre del objeto y un valor
lgico para indicar si se muestra o no la informacin al ser cargado por primera vez.
MapWinGIS.Shapefile vectorial = new MapWinGIS.Shapefile();
cobertura.Open(ubicacin_archivo);
this.axMap1.AddLayer(vectorial, true);
y
MapWinGIS.Image mapa_bits = new MapWinGIS.Image();
cobertura.Open(ubicacin_archivo);
this.axMap1.AddLayer(mapa_bits, true);
Cuando los datos son agregados al control, por omisin se activa el modo de acercamiento,
cambiando la apariencia del cursor del ratn al de una lupa con el signo + en su interior. En
este modo, es posible ampliar el mapa al pulsar el botn izquierdo del ratn sobre l o
dibujando un rea rectangular que abarque el rea de inters. Para realizar un alejamiento, se
pulsa el botn derecho del ratn sobre el mapa.
Acercamiento y Arrastre
Una de las caractersticas distintivas de una aplicacin SIG es su capacidad de navegacin
en el mapa, al implementar acciones de acercamiento y arrastre.
Para activar estas acciones, simplemente se asigna a la propiedad CursorMode de la
instancia AxMap1 el valor apropiado tomado de la enumeracin tkCursorMode, sta
ltima definida dentro del paquete MapWinGIS.
El mtodo AddLayer retorna un
valor numrico entero, conocido como
manejador, a travs del cual es
posible acceder y manipular la capa
aadida al mapa
MapWinGIS usa varias tcnicas de
optimizacin para agilizar el
despliegue. Esto se aprecia en especial
en la actividad de acercamiento: es ms
rpido el redibujado al definir un rea
pequea y ms lento al mostrar toda
la informacin. Esto se debe a una
optimizacin que slo dibuja las
figuras que caen dentro de la extensin
actual en cada acercamiento o arrastre
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

7 MOSTRANDO DATOS VECTORIALES, ESQUEMAS
DE COLORES Y ETIQUETAS

this.axMap1.CursorMode = MapWinGIS.tkCursorMode.cmZoomIn;
this.axMap1.CursorMode = MapWinGIS.tkCursorMode.cmZoomOut;
this.axMap1.CursorMode = MapWinGIS.tkCursorMode.cmPan;
Cuando no es necesario realizar ninguna tarea de navegacin sobre el mapa, se asigna a la
propiedad CursorMode el valor tkCursorMode.cmNone.
this.axMap1.CursorMode = MapWinGIS.tkCursorMode.cmNone;
MOSTRANDO DATOS VECTORIALES,
ESQUEMAS DE COLORES Y ETIQUETAS
La mayora de las veces, los desarrolladores de aplicaciones SIG necesitan la capacidad
para crear mapas ricos e informativos al mostrar los datos de manera visualmente
estimulante. Por lo general, se utilizan tcnicas como los esquemas de colores, marcadores,
etiquetas y otros tipos de simbologa para mejorar el valor visual de un mapa digital. La
simbologa puede utilizarse para transmitir informacin sobre los datos, tales como la
poblacin de un pas, o simplemente llamar la atencin sobre determinada parte del mapa,
poniendo de relieve cierta caracterstica. En este captulo, se muestra la manera de ajustar
las propiedades globales de despliegue para una capa de informacin, la forma de aplicar
un esquema de colores a los datos, y cmo agregarles etiquetas.
AJUSTANDO LAS PROPIEDADES DE DESPLIEGUE
Cuando los datos geogrficos, ya sean vectoriales o mapas de bits, han sido agregados al
objeto derivado de la clase AxMap, el programado tiene la capacidad de modificar su
apariencia antes de ser mostrados, modificando colores, texturas y smbolos, al utilizar el
manejador obtenido al agregar los datos a la instancia de AxMap.
Los valores asignados a las propiedades de despliegue son de tipo numrico, enteros o
punto flotante, y se establecen desde el objeto AxMap1 al invocar a una serie de mtodos
que reciben, en su mayora, dos parmetros: el manejador de los datos cuya apariencia se
modificar, y un valor numrico que representa su apariencia.
En los datos vectoriales, las propiedades de relacionadas con el color de los elementos,
aceptan valores numricos enteros, mientras que aquellas que definen el ancho de lnea y
tamao de un smbolo son de tipo punto flotante.
Para poder modificar la apariencia de una capa, es necesario recuperar el manejador del
mismo, al momento de agregarlo al objeto derivado de la clase AxMap por medio del
mtodo AddLayer.
int manejador = AxMap1.AddLayer(datos_vector, visible);
La manipulacin de la apariencia de los datos geogrficos har referencia al manejador que
se les asign.
Algunos de los mtodos para definir la apariencia de los elementos grficos de una capa
ms utilizados son los siguientes:
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

8 MOSTRANDO DATOS VECTORIALES, ESQUEMAS
DE COLORES Y ETIQUETAS


Mtodo Descripcin Aplicable a
set_ShapeLayerDrawFill (int
manejador, bool rellenar)
Define si los polgonos
sern rellenados al ser
dibujados
Polgonos
set_ShapeLayerDrawLine (int
manejador, bool delinear)
Indica si los polgonos o
arcos sern delineados
al ser dibujados
Arcos
Polgonos
set_ShapeLayerDrawPoint (int
manejador, bool puntear)
Establece si sern
mostrados los vrtices
(polgonos o arcos) o
puntos al ser dibujados
Arcos
Polgonos
Puntos
set_ShapeLayerFillColor (int
manejador, UInt32
colorRelleno)
Define el color a utilizar
en el relleno de los
polgonos
Polgonos
set_ShapeLayerFillStipple (int
manejador,
MapWinGIS.tkFillStipple
achurado)
Establece el achurado
con el cual se dibujar el
relleno de los polgonos
Polgonos
set_ShapeLayerFillTransparency
(int manejador, single
porcienTransparente)
Define el porcentaje de
transparencia del relleno
de los polgonos
Polgonos
set_ShapeLayerLineColor (int
manejador, UInt32 color)
Establece el color de la
lnea
Arcos
Polgonos
set_ShapeLayerLineStipple (int
manejador,
MapWinGIS.tkLineStipple
punteado)
Define el punteado con
el cual se dibujar la
lnea
Arcos
Polgonos
set_ShapeLayerLineWidth (int
manejador, single ancho)
Establece el ancho con
el cual se dibujar la
lnea
Arcos
Polgonos
set_ShapeLayerPointColor (int
manejador, UInt32 color)
Establece el color con el
cual se dibujar el punto
Puntos
set_ShapeLayerPointSize (int
manejador, single tamao)
Define el tamao del
punto o vrtice al ser
dibujado
Puntos
set_ShapeLayerPointType (int
manejador,
MapWinGIS.tkPointType
tipoPunto)
Establece el tipo de
punto a utilizar
Puntos
El cdigo tpico para manejar la apariencia de los elementos grficos de una capa es el
siguiente:
//Para polgonos
int poligono = AxMap1.AddLayer(datos_vector, visible);
UInt32 colorRelleno = Convert.ToUInt32(Color.RGB(Color.color.R,
Color.color.G, Color.color.B));
UInt32 colorLinea = Convert.ToUInt32(Color.RGB(0, 255, 255));
single anchoLinea = 2.0;

AxMap1.set_ShapeLayerDrawFill(poligono, true);
AxMap1.set_ShapeLayerFillColor(poligono, colorRelleno);
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

9 MOSTRANDO DATOS VECTORIALES, ESQUEMAS
DE COLORES Y ETIQUETAS

AxMap1.set_ShapeLayerLineColor(poligono, colorLinea);
AxMap1.set_ShapeLayerLineWidth(poligono, anchoLinea);

//Para arcos
int arco = AxMap1.AddLayer(datos_vector, visible);
UInt32 colorLinea = Convert.ToUInt32(Color.RGB(0, 255, 255));
single anchoLinea = 2.0;
AxMap1.set_ShapeLayerDrawLine(arco, true);
AxMap1.set_ShapeLayerLineColor(arco, colorLinea);
AxMap1.set_ShapeLayerLineWidth(arco, anchoLinea);

//Para puntos
int punto = AxMap1.AddLayer(datos_vector, visible);
UInt32 colorPunto = Convert.ToUInt32(Color.RGB(255, 255, 0));
single tamPunto = 8.0;

AxMap1.set_ShapeLayerDrawPoint(punto, true);
AxMap1.set_ShapeLayerPointColor(punto, colorPunto);
AxMap1.set_ShapeLayerPointSize(punto, tamPunto);
AxMap1.set_ShapeLayerPointType(punto, MapWinGIS.tkPointType.ptCircle);
Las nuevas versiones de MapWinGIS recomiendan hacer uso de la propiedad
DrawingOptions, la cual deriva de la clase ShapeDrawingOptions, de la capa de
datos a modificar su apariencia, debido a que los mtodos antes presentados utilizan
enumeraciones obsoletas.
Debido a que MapWinGIS fue diseado para soportar ambientes de desarrollo tanto .NET
como no-.NET, no soporta la numeracin de colores que ofrece .NET, por ello se utiliza
su representacin de entero largo.
Para utilizar un icono personalizado como icono en las capas de puntos, se pasa
MapWinGIS.tkPointType.ptUserDefined como parmetro al mtodo
set_ShapeLayerPointType. A continuacin se presenta una porcin de cdigo, en
donde se utiliza una imagen personalizada para mostrar los puntos de una capa:
int punto = AxMap1.AddLayer(datos_vector, visible);

AxMap1.set_ShapeLayerPointType(punto,
MapWinGIS.tkPointType.ptUserDefined);
MapWinGIS.Image icono = new MapWinGIS.Image();
icono.Open(icono.bmp);
AxMap1.set_UDPointType(punto, icono);
DEFINIENDO UN ESQUEMA DE COLORES
En MapWinGIS, el trmino esquema de colores hace referencia al uso de colores para
diferenciar los elementos de una capa, basndose en los valores de los atributos de la tabla
que tiene relacionada.
Para la aplicacin de sta tcnica, es necesario un objeto de la clase ColorScheme, donde
se encuentran los colores a utilizar, y un objeto derivado de Shapefile, para generar un
grupo de categoras basadas en el valor del atributo con el cual se asociarn los colores.
MapWinGIS toma al pixel de la
esquina superior izquierda del
mapa de bits como el color de
transparencia. Si se desea tener
transparencia en algn lugar del
mapa de bits, elegir el color que se
desplegar transparente y colocar
un pixel con este color en la
esquina superior izquierda de la
imagen.superior izquierda de la
imagen
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

10 MOSTRANDO DATOS VECTORIALES, ESQUEMAS
DE COLORES Y ETIQUETAS

Shapefile capa = AxMap1.get_Shapefile(manejador);
ColorScheme esquema = new MapWinGIS.ColorScheme();
esquema.SetColors(colorInicio, colorFinal);
capa.Categories.Generate(0, tkClassificationType.ctUniqueValues,
numCategorias);
capa.Categories.ApplyColorScheme(tkColorSchemeType.ctSchemeGraduated,
esquema);
El mtodo SetColors de la clase ColorScheme genera una rampa de colores a partir
del par de valores pasados a ste como argumentos.
En el mtodo Generate de la propiedad Categories, el primer argumento hace
referencia a la posicin del campo dentro de la tabla relacionada con la capa, y cuyos
valores servirn de base para generar las categoras; el segundo argumento recibe un valor
del tipo enumerado tkClassificationType, indicando el tipo de clasificacin que se
aplicar en la generacin de las categoras. El ltimo argumento establece la cantidad de
categoras a generar; en caso de utilizar el valor
tkClassificationType.ctUniqueValues en el segundo argumento, este ltimo
parmetro es omitido.
Otra forma de definir la apariencia visual que tendr cada categora es asignarle
manualmente las caractersticas grficas con las cuales se desplegar. Para lo anterior se
hace uso de la propiedad DrawingOptions perteneciente a la categora, quien a su vez
contiene una coleccin de propiedades que establecen la apariencia de visualizacin de los
puntos, lneas y polgonos que conforman la categora.
MapWinGIS.Shapefile capa = this.axMap1.get_Shapefile(manejador);
capa.Categories.Generate(indiceCampo,
MapWinGIS.tkClassificationType.ctUniqueValues, numCategorias);

for (int i = 0; i < capa.Categories.Count; i++)
{
MapWinGIS.ShapefileCategory categoria = capa.Categories.get_Item(i);
categoria.DrawingOptions.caractersticaVisual = valor;
}
USO DE SMBOLOS PARA PUNTOS
Para las capas con topologa de puntos, MapWinGis ofrece tres formas grficas de
presentarlos: smbolos predefinidos, imgenes y caracteres. La forma a utilizar se define en
el atributo PointType de la clase ShapeDrawingOptions, cuyo conjunto de valores es
el siguiente:
Valor Descripcin
ptSymbolStandard Los componentes de la capa se dibujarn usando los tipos de
smbolos definidos en la enumeracin tkPointShapeType.
ptSymbolFontCharacter Los componentes de la capa se dibujarn tomando de los
caracteres de la fuente ANSI definida.
ptSymbolPicture Los componentes de la capa se dibujarn con el contenido de
las instancias de la clase Image.
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

11 MOSTRANDO DATOS VECTORIALES, ESQUEMAS
DE COLORES Y ETIQUETAS

Cuando se establece el ptSymbolStandard, el smbolo a utilizar es definido en la
propiedad PointShape; al utilizar el valor ptSymbolFontCharacter, el nombre de la
fuente de caracteres es definida en la propiedad FontName y el smbolo con el cual se
dibujarn los componentes de la capa se establece en la propiedad PointCharacter. Al
usar ptSymbolPicture, la instancia de la clase Image es asignada a la propiedad
Picture.
Como ejemplo se utilizarn iconos para dibujar los puntos de la capa, con base en el valor
de un atributo de la tabla asociada con la capa, agrupndolos en categoras, de manera muy
similar al esquema de colores. A cada categora se le asigna una imagen la cual se usar para
dibujar los puntos que cumplen con la expresin de filtrado de la categora.
El cdigo tipo para llevar a cabo esta accin se muestra en seguida:
ShapeFile capa = AxMap1.get_Shapefile(manejador);
MapWinGIS.Image imagen1 = new MapWinGIS.Imagen();
MapWinGIS.Image imagen2 = new MapWinGIS.Imagen();

MapWinGIS.Image imagenN = new MapWinGIS.Imagen();
int numCampo = posicionDeCampoEnTabla;
imagen1.Open(mapa_bits1);
imagen2.Open(mapa_bits2);

imagenN.Open(mapa_bitsN);
AxMap1.set_ShapeLayerPointType(manejador, tkPointType.ptUserDefined);
capa.Categories.Generate(numCampo,
tkClassificationType.ctUniqueValue, 0);
ShapefileCategory categoria = capa.Categories.Item[0];
categoria.DrawingOptions.PointType = tkPointSymbolType.ptSymbolPicture;
categoria.DrawingOptions.Picture = imagen1;
categoria = capa.Categories.Item[1];
categoria.DrawingOptions.PointType = tkPointSymbolType.ptSymbolPicture;
categoria.DrawingOptions.Picture = imagen2;

categoria = capa.Categories.Item[N];
categoria.DrawingOptions.PointType = tkPointSymbolType.ptSymbolPicture;
categoria.DrawingOptions.Picture = imagenN;
Tambin es posible agregar las categoras de manera manual, utilizando el mtodo Add de
la propiedad Categories, guardando el valor devuelto en una variable de tipo
ShapefileCategory a travs de la cual se define la expresin de filtrado, tipo de
smbolo e imagen a utilizar.
ShapefileCategory categoria = capa.Categories.Add(nombreCategoria);
categoria.Expression = expression_filtrado;
categoria.DrawingOptions.PointType = tkPointSymbolType.ptSymbolPicture;
categoria.DrawingOptions.Picture = imagen1;

capa.Categories.ApplyExpressions();
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

12 MOSTRANDO DATOS VECTORIALES, ESQUEMAS
DE COLORES Y ETIQUETAS

ETIQUETADO DE ELEMENTOS
El etiquetado de elementos de una capa es un arte muy difcil de automatizar. Existen
cuestiones tales como el tamao de la etiqueta, fuente, escala, rotacin, seguimiento de
lneas, centrado en polgonos, colocacin por puntos, colisin con otras etiquetas, y
muchas ms.
MapWinGIS posee un robusto y flexible conjunto de funciones de etiquetacin, pero deja
gran parte de la responsabilidad de esa tarea al programador.
Antes de iniciar, es importante decidir qu elementos se desean etiquetar, y que texto se
aplicar. En seguida ser necesario obtener informacin de la posicin donde sern
mostradas las etiquetas. Finalmente se necesita determinar la apariencia de las etiquetas que
se utilizarn y la manera en que sern colocadas dentro del mapa.
El cdigo para llevar a cabo el etiquetado de elementos es muy similar al visto en esquema
de colores: se va tomando cada uno de los elementos de la capa, recupera el valor a usar
como etiqueta, as como las coordenadas de ste, para finalmente agregar la etiqueta que
tendr asociada.
ShapeFile capa = AxMap1.get_Shapefile(manejador);
String etiqueta;
UInt32 colorEtiqueta = Convert.ToUInt32(RGB(0, 0, 0));
double coordX, coordY;
int numCampo = posicionDeCampoEnTabla;
for (int numElemento = 0; numElemento < capa.NumShapes; numElemento++){
etiqueta = capa.get_CellValue(numCampo, numElemento);
coordX = capa.Shape[numElemento].get_Point(0).x;
coordY = capa.Shape[numElemento].get_Point(0).y;
capa.Labels.AddLabel(etiqueta, coordX, coordY, rotacin, categora);
}
La personalizacin de las etiquetas puede llevarse a cabo desde la instancia de
AxMapWinGis o desde ShapeFile. Un objeto derivado de AxMapWinGis posee una
serie de mtodos que permiten definir la apariencia de las etiquetas a mostrar en una capa;
cuando se utiliza una instancia de ShapeFile, la apariencia de las etiquetas se define a
travs de la propiedad Labels, que es una instancia de la clase del mismo nombre,
modificando el contenido de las propiedades que tiene asociadas.
Para personalizar la apariencia de las etiquetas de una capa se utiliza la funcin
LayerFont, especificando la fuente y tamao de sta a utilizar.
axMap1.LayerFont(manejador, fuente, tamaoFuente);
El escalado de etiquetas es utilizando cuando se necesita que las etiquetas crezcan o
contraigan con el mapa, al momento en que el usuario realiza un acercamiento o un
alejamiento:
axMap1.set_LayerLabelScale(manejador, true);
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

13 MOSTRANDO DATOS VECTORIALES, ESQUEMAS
DE COLORES Y ETIQUETAS

Un desfasamiento global en la etiquetas de una capa especfica puede establecer,
ajustndolas verticalmente en base a un nmero constante de pixeles. Esto es muy
utilizado para evitar colisiones entre la etiqueta y un icono personalizado de un punto.
axMap1.set_LayerLabelOffset(manejador, numPixeles);
El sombreado de las etiquetas ayuda a que sean legibles, al pintar alrededor de ellas.
axMap1.set_LayerLabelShadow(manejador, true);
axMap1.set_LayerLabelShadowColor(manejador, colorSombra);
Una vez aplicadas las etiquetas en una capa, es posible mostrarlas u ocultarlas utilizando la
funcin set_LayerLabelVisible:
axMap1.set_LayerLabelVisible(manejador, true);
Otra funcin que permite adicionar etiquetas en una capa es AddLabelEx, la cual posee
un caracterstica adicional: la rotacin de las etiquetas. Su forma es la siguiente:
axMap1.AddLabelEx(manejador, etiqueta, colorEtiqueta, coordX, coordY,
MapWinGIS.tkHJustification.hjCenter, anguloRotacin);
Cuando se tienen muchas etiquetas en una capa, sta puede hacerse ilegible, especialmente
cuando se traslapan entre s. MapWinGIS proporcionar la funcin
set_UseLabelCollision, cuyo propsito es evitar el empalme de etiquetas, asegurando
que todas las etiquetas estarn separadas lo suficiente para que sean legibles.
Para activar la evitacin automtica de colisin de etiquetas, se utiliza el cdigo siguiente:
AxMap1.set_UseLabelCollision(manejador, true);
La evitacin automtica de colisiones es particularmente til cuando se utilizan etiquetas de
tamao fijo. En ste caso, al realizar un alejamiento, las etiquetas mantienen un tamao
constante, comenzando a bloquearse y empalmarse entre s.
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

14 AGREGANDO UN MAPA

EJEMPLO PRCTICO
La realizacin de este ejemplo requiere tener instalado en el equipo de cmputo Visual
Studio 2010, y dentro de esta IDE el control ActiveX WinMapGIS, siguiendo los pasos
expuestos al inicio del captulo Creando una Aplicacin GIS.
A continuacin se presentan los pasos bsicos para crear una aplicacin GIS funcional,
aplicando la teora mostrada en los captulos anteriores.
AGREGANDO UN MAPA
1. Crear una aplicacin de escritorio, nombrando a la solucin WSCartogafia y al
proyecto WFAPrincipal.
Una vez que creada la carpeta de la solucin y del proyecto, copiar dentro de sta ltima la
carpeta cartografia, la cual contiene la informacin cartogrfica digital a utilizar en el
ejemplo.
La carpeta catografia contiene a su vez la carpeta vector, en donde se encuentran los
datos de tipo vectorial con los cuales se trabajarn. El conjunto de datos vectoriales
representan rasgos geogrficos de las localidades urbanas existentes en el municipio de
Lerdo, Durango; cada nombre de cobertura inicia con nueve dgitos, correspondientes a la
clave de la localidad, y terminan con una o ms letras que hacen referencia al tipo de
elemento cartogrfico urbano que contiene, cuyo significado es el siguiente:
Clave Topologa Descripcin
SIP Punto Sitios de inters. Ubicacin de sitios de inters, tales como
plazas, escuelas, centros de asistencia mdica, templos y
tanques de agua entre otros.
T Punto Tipo de vialidad. Elementos con categora, nombre y tipo de la
vialidad.
CA Lnea Carretera. Trayectoria de las carreteras dentro de la localidad
urbana, as como la condicin de la misma, la pavimentacin
que posee y el tipo de transito (libre o peaje).
E Lnea Eje vial. Trayectoria de las vialidades en la localidad urbana,
conteniendo su nombre y tipo.
SIL Lnea Sitios de inters. Trayectoria de sitios de inters, tales como
puentes, linderos y canales entre otros.
A Polgono rea geoestadstica bsica. Delimitacin de la superficie que
abarca el rea de geoestadstica bsica (AGEB), con la cual
INEGI divide una localidad para cuestiones censales.
L Polgono Lmite. Superficie territorial que ocupa la localidad urbana.
M Polgono Manzanas. Delimitacin de las manzanas que conforman la
localidad urbana.
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

15 AGREGANDO UN MAPA

Clave Topologa Descripcin
SIA Polgono Sitios de inters. Delimitacin de la superficie que abarcan
diversos sitios de inters, tales como reas verdes, camellones,
plazas, instalaciones deportivas o recreativas, escuelas y
templos, entre otros.
Las localidades contenidas son las siguientes:
Clave Nombre
100120001 Lerdo
100120007 Carlos Real
100120018 El Huarache
100120021 Len Guzmn
100120023 La Loma
100120028 Nazareno
100120057 Ciudad Jurez
100120084 Villa de Guadalupe
Cuando la carpeta cartografa ha sido copiada dentro del directorio del proyecto, en
el Explorador de la Solucin forzar el despliegue de sta, marcarla y pulsar sobre ella el
botn derecho del ratn, para seleccionar la opcin Incluir en el Proyecto. Despus
expandir cada una de las carpetas contenidas dentro de la carpeta vector y seleccionar
todos los archivos que contienen, abrir la ventana de propiedades y en la propiedad Copiar
al Directorio de Salida (Copy to Output Directory) elegir la opcin Copiar si es ms
Nuevo (Copy if newer), esto har que al momento de construir la aplicacin, los archivos
de datos sean tambin copiados al directorio de distribucin.
2. Asignar a la propiedad Text del formulario del proyecto el valor Sistema
Cartogrfico.
3. De la caja de herramientas, en la seccin Containers y seleccionar el control
SplitContainer, arrastrndolo al interior de la forma.
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

16 AGREGANDO UN MAPA


4. Nuevamente, desde la caja de herramientas, seleccionar el control Map Control y
arrastrar hacia el interior del Panel2 del SplitContainer.

Al insertar ste control, dentro de la aplicacin se crea una instancia de la clase AxMap,
nombrada por omisin axMap1, y es a travs de ella que se gestionan las capas de datos
cartogrficos.
5. Ajustar el tamao del control, de forma tal que los datos
cartogrficos puedan ser visualizados lo mejor posible. Se
recomienda utilizar la propiedad Dock del control y asignarle
el valor Fill haciendo que ocupe toda el rea del contenedor
que la alberga.


DESARROLLO DE UNA APLICACIN SIG CON C# 2014

17 AADIENDO CAPAS DE DATOS CARTOGRFICOS

AADIENDO CAPAS DE DATOS
CARTOGRFICOS
Una vez que el control AxMapWinGis ha sido insertado en el formulario, se est en
posibilidad mostrar la informacin cartogrfica dentro de l.
6. Despus de haber insertado el control axMap1, cargar la capa 100120001L, que
muestra la superficie que ocupa la ciudad de Lerdo, Durango. Para esto se ingresa el
siguiente cdigo dentro del mtodo asociado con el evento Load del control Form1:
MapWinGIS.Shapefile cobertura = new MapWinGIS.Shapefile();

cobertura.Open(cartografia\\vector\\100120001\\100120001L.shp);
this.axMap1.AddLayer(cobertura, true);
El resultado se muestra a continuacin:

7. Como se tienen datos cartogrficos de diferentes localidades urbanas del municipio de
Lerdo, la aplicacin deber permitir al usuario elegir una ciudad y mostrar sus lmites
urbanos, para lo cual se adicionar a la funcionalidad de cargar cualquiera de las
localidades. Primero se agrega en el Panel1 del control SplitContainer un
control RadioButton por cada localidad, que en ste caso son ocho, y a cada uno
asignarle el nombre de la poblacin que representa en la propiedad Text y la clave de
la misma en la propiedad Tag. Ahora cada vez que el usuario seleccione uno de los
botones, la aplicacin mostrar los lmites de la localidad elegida.
8. Antes de implementar la nueva capacidad, es necesario eliminar todo el contenido del
mtodo Form1_Load, ya que no es necesario cargar alguna cobertura al iniciar la
ejecucin de la aplicacin. Como la accin de cargar una capa al seleccionar uno de los
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

18 AADIENDO CAPAS DE DATOS CARTOGRFICOS

RadioButton agregados es la misma, se desarrollar un solo mtodo para llevar a
cabo dicha tarea y asociarlo con el evento CheckedChanged de cada uno de estos
controles. El cdigo y nombre del mtodo son los siguientes:
private void localidad_CheckedChanged(object sender, EventArgs e)
{
MapWinGIS.Shapefile cobertura = new MapWinGIS.Shapefile();
RadioButton boton = (RadioButton)sender;
String cveLocalidad = boton.Tag.ToString();

this.axMap1.RemoveAllLayers();

cobertura.Open("cartografia\\vector\\" + cveLocalidad + "\\" +
cveLocalidad + "L.shp");
int localidad = this.axMap1.AddLayer(cobertura, true);
}
Los resultados de la ejecucin de la aplicacin son los siguientes:


9. Cada localidad tiene asociado un conjunto de elementos cartogrficos, los cuales se
encuentran almacenados en distintas capas (archivos), por lo que es conveniente que al
momento de seleccionar una localidad, tambin se carguen las capas de los elementos
cartogrficos urbanos de la misma. Primero ser necesario agregar nueve controles
CheckBox dentro del Panel1 del control SplitContainer, debajo del rea donde
se encuentran los controles RadioButton, donde cada uno representar un elemento
cartogrfico urbano, que al momento de seleccionarlo sea mostrado.
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

19 AADIENDO CAPAS DE DATOS CARTOGRFICOS


10. Enseguida se crea un mtodo llamado cargaElementos, el cual recibe un parmetro
de tipo String, que contiene la clave de la localidad de la cual se cargarn sus
elementos cartogrficos asociados. ste mtodo es invocado despus de cargada la
capa de la localidad, dentro del procedimiento localidad_CheckedChanged
previamente declarada.
private void cargaElementos(string cveLocalidad)
{
String[] elementos = new String[] {"SIP", "T", "CA", "E", "SIL",
"A", "M", "SIA"};
CheckBox[] botones = new CheckBox[]{this.checkBox1, this.checkBox2,
this.checkBox3, this.checkBox4,
this.checkBox5, this.checkBox6,
this.checkBox8, this.checkBox9};

for (int i = 0; i < elementos.Length; i++)
{
MapWinGIS.Shapefile cobertura = new MapWinGIS.Shapefile();
if (cobertura.Open("cartografia\\vector\\" + cveLocalidad + "\\"
+ cveLocalidad + elementos[i] + ".shp"))
{
int elemento = this.axMap1.AddLayer(cobertura, false);
botones[i].Tag = elemento;
botones[i].Enabled = true;
}
Las capas son dibujadas en el
mapa en el orden en que fueron
agregadas en l, de forma tal que
en primer plano se tiene la ltima
y en el fondo se encuentra la
primera.
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

20 AADIENDO CAPAS DE DATOS CARTOGRFICOS

else
{
botones[i].Enabled = false;
}
}
}
El arreglo elementos contiene las claves de los elementos cartogrficos que
posiblemente tenga asociados la localidad urbana seleccionada; el arreglo botones almacena
las instancias de los controles CheckBox que representan cada uno de los elementos
cartogrficos. Cada vez que se trata de cargar un elemento cartogrfico y est tiene xito, el
control CheckBox correspondiente es activado y el manejador que le asigna el control
axMap1 a la capa cuando es agregada es guardado en su propiedad Tag.
11. Como la tarea desencadenada al marcar un control CheckBox es la misma para todos
ellos, se crea un mtodo con el nombre elementos_CheckedChanged y se asocia
con el evento CheckedChanged de cada caja de verificacin.
private void elementos_CheckedChanged(object sender, EventArgs e)
{
CheckBox boton = (CheckBox)sender;

this.axMap1.set_LayerVisible((int)boton.Tag, boton.Checked);
}
Ahora la aplicacin permite mostrar informacin de diferentes localidades y los elementos
cartogrficos que posee.


DESARROLLO DE UNA APLICACIN SIG CON C# 2014

21 AGREGANDO FUNCIONALIDADES DE
NAVEGACIN

AGREGANDO FUNCIONALIDADES DE
NAVEGACIN
12. En la caja de herramientas, de la
seccin Menus & Toolbars,
seleccionar un control MenuStrip
y colocarlo en la parte superior del
formulario, para despus agregar en
ste tres opciones: Acercamiento,
Alejamiento y Moverse. Cuando
el usuario elija alguna de las
opciones del men, el cursor del
objeto axMap1 es cambiando a
travs de su propiedad
CursorMode, permitiendo
navegar sobre el mapa.
Para activar la funcionalidad de cada opcin, se codifica el mtodo asociado con el evento
Click de cada uno de los controles ToolStripMenuItem, de la siguiente manera:
private void acercarmientoToolStripMenuItem_Click(object sender,
EventArgs e)
{
this.axMap1.CursorMode = MapWinGIS.tkCursorMode.cmZoomIn;
}

private void alejamientoToolStripMenuItem_Click(object sender,
EventArgs e)
{
this.axMap1.CursorMode = MapWinGIS.tkCursorMode.cmZoomOut;
}

private void moverseToolStripMenuItem_Click(object sender, EventArgs e)
{
this.axMap1.CursorMode = MapWinGIS.tkCursorMode.cmPan;
}
La ejecucin de la aplicacin genera los resultados siguientes:
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

22 MODIFICANDO LA APARIENCIA DE UNA CAPA DE
DATOS


MODIFICANDO LA APARIENCIA DE UNA CAPA
DE DATOS
Cada vez que una nueva cobertura es insertada dentro el control de AxMapWinGis, ste le
asigna valores aleatorios o predeterminados a sus propiedades de visualizacin (colores y
tipos de relleno y lnea). No obstante, es posible modificarlos a las necesidades propias de
la aplicacin, antes de que se muestren. En esta seccin se presentan los mtodos del
control AxMapWinGis para establecer colores y tipos de los elementos grficos de una
cobertura.
13. Crear un nuevo mtodo dentro de la clase Form1 que reciba el nombre
aparienciaLocalidad, que no retorne valor y que reciba un parmetro de tipo
entero, el cual recibe el valor del manejador de la capa a definir su apariencia. Dentro
de este mtodo se insertarn las lneas de cdigo que modifican la apariencia visual de
la capa, y ser invocado inmediatamente despus de que sta ha sido insertada. Es
importante mencionar que para alterar la apariencia de una capa es necesario contar
con el identificador que se le asigna al momento en que es agregada al mapa; el
manejador es una variable de tipo entero y recibe el resultado del mtodo AddLayer
del objeto axMap1, y en este ejemplo recibe el nombre localidad.
private void localidad_CheckedChanged(object sender, EventArgs e)
{
MapWinGIS.Shapefile cobertura = new MapWinGIS.Shapefile();
RadioButton boton = (RadioButton)sender;
String cveLocalidad = boton.Tag.ToString();

this.axMap1.RemoveAllLayers();

cobertura.Open("cartografia\\vector\\" + cveLocalidad + "\\" +
cveLocalidad + "L.shp");
int localidad = this.axMap1.AddLayer(cobertura, true);
carga_elementos(cveLocalidad);
aparienciaLocalidad(localidad);
}

private void aparienciaLocalidad(int localidad)
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

23 MODIFICANDO LA APARIENCIA DE UNA CAPA DE
DATOS

{
this.axMap1.set_ShapeLayerFillColor(localidad,
ToUint(Color.FromArgb(253, 255, 217)));
this.axMap1.set_ShapeLayerLineColor(localidad,
ToUint(Color.DarkGray));
this.axMap1.set_ShapeLayerLineWidth(localidad, 3.1f);
this.axMap1.set_ShapeLayerLineStipple(localidad,
MapWinGIS.tkLineStipple.lsDashDotDash);
}
private UInt32 ToUint(Color color)
{
return Convert.ToUInt32(ColorTranslator.ToOle(color));
}
La ejecucin de la aplicacin es la siguiente:


14. Crear un nuevo mtodo con el nombre aparienciaElementos, el cual no retorne
valor y reciba dos parmetros: uno de tipo numrico entero y el otro de tipo cadena de
caracteres. Con este mtodo se define la manera de cmo son presentados
grficamente los elementos cartogrficos urbanos, estandarizando su apariencia visual.
El cdigo es el siguiente:
private void aparienciaElementos(int manejador, String elemento)
{
switch (elemento)
{
case "SIP":
this.axMap1.set_ShapeLayerPointColor(manejador,
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

24 MODIFICANDO LA APARIENCIA DE UNA CAPA DE
DATOS

ToUint(Color.ForestGreen));
this.axMap1.set_ShapeLayerPointSize(manejador, 10.0f);
this.axMap1.set_ShapeLayerPointType(manejador,
MapWinGIS.tkPointType.ptSquare);
break;
case "T":
this.axMap1.set_ShapeLayerPointColor(manejador,
ToUint(Color.Purple));
this.axMap1.set_ShapeLayerPointSize(manejador, 8.0f);
this.axMap1.set_ShapeLayerPointType(manejador,
MapWinGIS.tkPointType.ptCircle);
break;
case "CA":
this.axMap1.set_ShapeLayerLineColor(manejador,
ToUint(Color.Red));
this.axMap1.set_ShapeLayerLineWidth(manejador, 2.0f);
this.axMap1.set_ShapeLayerLineStipple(manejador,
MapWinGIS.tkLineStipple.lsTrainTracks);
break;
case "E":
this.axMap1.set_ShapeLayerLineColor(manejador,
ToUint(Color.Red));
this.axMap1.set_ShapeLayerLineWidth(manejador, 1.5f);
this.axMap1.set_ShapeLayerLineStipple(manejador,
MapWinGIS.tkLineStipple.lsTrainTracks);
break;
case "SIL":
this.axMap1.set_ShapeLayerLineColor(manejador,
ToUint(Color.OrangeRed));
this.axMap1.set_ShapeLayerLineWidth(manejador, 1.0f);
this.axMap1.set_ShapeLayerLineStipple(manejador,
MapWinGIS.tkLineStipple.lsTrainTracks);
break;
case "A":
this.axMap1.set_ShapeLayerFillColor(manejador,
ToUint(Color.LightGreen));
this.axMap1.set_ShapeLayerLineColor(manejador,
ToUint(Color.DarkOliveGreen));
this.axMap1.set_ShapeLayerLineWidth(manejador, 1f);
this.axMap1.set_ShapeLayerLineStipple(manejador,
MapWinGIS.tkLineStipple.lsTrainTracks);
break;
case "M":
this.axMap1.set_ShapeLayerFillColor(manejador,
ToUint(Color.Yellow));
this.axMap1.set_ShapeLayerLineColor(manejador,
ToUint(Color.GreenYellow));
this.axMap1.set_ShapeLayerLineWidth(manejador, 1f);
this.axMap1.set_ShapeLayerLineStipple(manejador,
MapWinGIS.tkLineStipple.lsTrainTracks);
break;
case "SIA":
this.axMap1.set_ShapeLayerFillColor(manejador,
ToUint(Color.Gray));
this.axMap1.set_ShapeLayerLineColor(manejador,
ToUint(Color.DarkGray));
this.axMap1.set_ShapeLayerLineWidth(manejador, 1f);
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

25 VISUALIZACIN POR CATEGORAS

this.axMap1.set_ShapeLayerLineStipple(manejador,
MapWinGIS.tkLineStipple.lsTrainTracks);
break;
}
}
El mapa resultante se muestra a continuacin:


VISUALIZACIN POR CATEGORAS
Hasta el momento, los elementos cartogrficos de una capa han sido mostrados con las
mismas propiedades grficas, sin embargo, es posible agruparlos con base al valor de uno
de los campos de datos asociados con la capa y definir la apariencia de cada categora,
permitiendo diferenciarlos entre s.
MapWinGis permite la coloracin de categoras utilizando rampa de colores o asignacin
manual del color a cada una de ellas. Para el uso de una rampa de colores, se utiliza una
instancia de la clase ColorScheme, en la cual se define el color inicial y final de la rampa,
para despus ser asignada a las categoras generadas de manera automtica.
MapWinGIS.Shapefile capa = axMap1.get_Shapefile(manejador);
MapWinGIS.ColorScheme esquema = new MapWinGIS.ColorScheme();

esquema.SetColors(colorInicial, colorFinal);
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

26 VISUALIZACIN POR CATEGORAS

capa.Categories.Generate(indiceCampo,
MapWinGIS.tkClassificationType.ctUniqueValues, numCategorias);
capa.Categories.ApplyColorScheme(MapWinGIS.tkColorSchemeType.ctSchemeGr
aduated, esquema);
En la asignacin manual de colores a cada categora se realiza una vez que stas han sido
generadas y el valor del color es almacenado en la propiedad
DrawingOptions.FillColor de cada categora.
MapWinGIS.Shapefile capa = this.axMap1.get_Shapefile(manejador);
capa.Categories.Generate(indiceCampo,
MapWinGIS.tkClassificationType.ctUniqueValues, numCategorias);

for (int i = 0; i < capa.Categories.Count; i++)
{
MapWinGIS.ShapefileCategory categoria = capa.Categories.get_Item(i);
categoria.DrawingOptions.FillColor = ToUint(colores[i]);
}
15. Agregar dos mtodos: el primero llamado rampaColores, que posea tres
parmetros, donde el primero es de tipo numrico entero, el cual recibe el manejador
de la capa, y los dos ltimos de tipo Color, definiendo el color inicial y final de la
rampa; el segundo llevar el nombre de categorias, definiendo dos parmetros, el
primero de tipo numrico entero que representa el manejador de la capa y el segundo
es un arreglo de tipo Color, que recibe la coleccin de colores a aplicar en los
componentes de la capa.
private void rampaColores(int element, Color inicio, Color final)
{
MapWinGIS.Shapefile capa = this.axMap1.get_Shapefile(elemento);
MapWinGIS.ColorScheme esquema = new MapWinGIS.ColorScheme();

esquema.SetColors(this.ToUint(inicio),
this.ToUint(final));
capa.Categories.Generate(0,
MapWinGIS.tkClassificationType.ctUniqueValues, 0);

capa.Categories.ApplyColorScheme(
MapWinGIS.tkColorSchemeType.ctSchemeGraduated, esquema);
}

private void categorias(int elemento, Color[] colores)
{
MapWinGIS.Shapefile capa = this.axMap1.get_Shapefile(elemento);
capa.Categories.Generate(0,
MapWinGIS.tkClassificationType.ctUniqueValues, 0);

for (int i = 0; i < capa.Categories.Count; i++)
{
MapWinGIS.ShapefileCategory categoria =
capa.Categories.get_Item(i);
categoria.DrawingOptions.FillColor = ToUint(colores[i]);
}
}

DESARROLLO DE UNA APLICACIN SIG CON C# 2014

27 VISUALIZACIN POR CATEGORAS

16. La invocacin de los mtodos anteriores se lleva a cabo dentro del mtodo
aparienciaElementos, en aquellas selecciones de capas con topologa de lneas (E
y SIL) y de polgonos (A, M y SIA). Tambin es posible utilizar el manejo de rampa de
colores y asignacin manual para topologas de puntos.
private void aparienciaElementos(int manejador, String elemento)
{
switch (elemento)
{
...
case "E":
rampaColores(manejador, Color.Green, Color.HotPink);
this.axMap1.set_ShapeLayerLineWidth(manejador, 2.5f);
this.axMap1.set_ShapeLayerLineStipple(manejador,
MapWinGIS.tkLineStipple.lsTrainTracks);
break;
case "SIL":
categorias(manejador, new Color[] {Color.OrangeRed,
Color.GreenYellow, Color.LightSalmon, Color.MediumPurple,
Color.Orchid, Color.Sienna});
this.axMap1.set_ShapeLayerLineWidth(manejador, 1.0f);
this.axMap1.set_ShapeLayerLineStipple(manejador,
MapWinGIS.tkLineStipple.lsTrainTracks);
break;
...
case "M":
rampaColores(manejador, Color.Blue, Color.Blue);
this.axMap1.set_ShapeLayerLineColor(manejador,
ToUint(Color.GreenYellow));
this.axMap1.set_ShapeLayerLineWidth(manejador, 1f);
this.axMap1.set_ShapeLayerLineStipple(manejador,
MapWinGIS.tkLineStipple.lsTrainTracks);
break;
case "SIA":
categorias(manejador, new Color[] {Color.Aqua, Color.Beige,
Color.Blue, Color.Brown, Color.Coral, Color.Cyan,
Color.Fuchsia, Color.Gold, Color.Green, Color.Indigo,
Color.Ivory, Color.Khaki, Color.Magenta, Color.Maroon,
Color.Navy});
this.axMap1.set_ShapeLayerLineColor(manejador,
ToUint(Color.Gray));
this.axMap1.set_ShapeLayerLineWidth(manejador, 1f);
this.axMap1.set_ShapeLayerLineStipple(manejador,
MapWinGIS.tkLineStipple.lsTrainTracks);
break;
}
}
Al ejecutar la aplicacin con las modificaciones anteriores, el resultado es el siguiente:
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

28 USO DE SMBOLOS



MapWinGIS.Shapefile cobertura = new MapWinGIS.Shapefile();
cobertura.Open(coverages\\vectors\\CAPITALES.shp);
capitales = this.axMap1.AddLayer(cobertura, true);
aparienciaCapitales();

private void aparienciaCapitales()
{
this.axMap1.set_ShapeLayerPointColor(capitales,
ToUint(Color.Yellow));
this.axMap1.set_ShapeLayerPointSize(capitales, 14.0f);
this.axMap1.set_ShapeLayerPointType(capitales,
MapWinGIS.tkPointType.ptSquare);
}
USO DE SMBOLOS
17. Crear un nuevo mtodo al que se nombrar simbolosIconos, que no retorne valor
y reciba como argumento un valor numrico entero que representa el manejador de la
capa. Mediante cdigo se asignar una imagen (mapa de bits) a los componentes de
cada categora generada a partir del valor de uno de los atributos de la tabla de datos
que tiene asociada la capa.
private void simbolosIconos(int elemento)
{
MapWinGIS.Shapefile capa = this.axMap1.get_Shapefile(elemento);

DESARROLLO DE UNA APLICACIN SIG CON C# 2014

29 USO DE ETIQUETAS

capa.Categories.Generate(0,
MapWinGIS.tkClassificationType.ctUniqueValues, 0);
this.axMap1.set_ShapeLayerPointType(elemento,
MapWinGIS.tkPointType.ptUserDefined);

for (int i = 0; i < capa.Categories.Count; i++)
{
MapWinGIS.Image imagen = new MapWinGIS.Image();

imagen.Open("Recursos\\" + capa.Categories.get_Item(i).Name +
".png");

capa.Categories.Item[i].DrawingOptions.PointType =
MapWinGIS.tkPointSymbolType.ptSymbolPicture;
capa.Categories.Item[i].DrawingOptions.Picture = imagen;
}
}
Es importante sealar que debern existir los archivos con las imgenes a asignar a cada
categora. La ejecucin de la aplicacin mostrar el mapa como sigue:


USO DE ETIQUETAS
18. Crear un nuevo mtodo llamado etiquetas, que no retorne valor y reciba dos
argumentos: el primero de tipo numrico entero que representa el manejador de la
capa y el segundo el ndice del campo del cual se tomar su contenido para etiquetar
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

30 USO DE ETIQUETAS

los componentes de la capa. Con este cdigo se asigna una etiqueta a cada
componente de la capa especificada; la apariencia de las etiquetas es definida utilizando
la propiedad Labels de la capa.
private void etiquetas(int elemento, int numCampo)
{
MapWinGIS.Shapefile capa = this.axMap1.get_Shapefile(elemento);

for (int numFigura = 0; numFigura < capa.NumShapes; numFigura++)
{
MapWinGIS.Shape componente = capa.Shape[numFigura];
String texto = capa.get_CellValue(numCampo,
numFigura).ToString();
double coordX = capa.Shape[numFigura].get_Point(0).x;
double coordY = capa.Shape[numFigura].get_Point(0).y;

capa.Labels.FontName = "Arial Narrow";
capa.Labels.FontSize = 8;
capa.Labels.CollisionBuffer = 100;
capa.Labels.AddLabel(texto, coordX, coordY);
}
}
El cdigo anterior es invocado dentro del mtodo aparienciaElementos(), en
algunas de las opciones de la instruccin switch.
private void aparienciaElementos(int manejador, String elemento)
{
switch (elemento)
{
...
case "E":
...
etiquetas(manejador, 6);
break;
...
case "SIA":
...
etiquetas(manejador, 6);
break;
}
}
Al ejecutar la aplicacin, el mapa se muestra de la siguiente manera:
DESARROLLO DE UNA APLICACIN SIG CON C# 2014

31 USO DE ETIQUETAS

Potrebbero piacerti anche