Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CursoMapWinGIS PDF
CursoMapWinGIS PDF
0
1
4
DESARROLLO DE UNA
APLICACIN SIG CON
C#
2014
INTRODUCCIN
Sistema diseado para capturar,
almacenar, manipular, analizar,
administrar y mostrar todo tipo de
dato geogrfico
COMPONENTES
Un sistema de informacin geogrfica se encuentra constituido por cuatro elementos
Las computadoras utilizadas en
bsicos: hardware, software, datos y personas.
un SIG son equipos de alto
desempeo y con gran capacidad de
almacenamiento de datos
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.
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.
1
COMPONENTES
2014
VECTORIALES
Lmites polticos /
administrativos
Calles
Parcelas
Elevacin
Mundo real
Representacin de diversos
elementos geogrficos con vectores y
mapas de bits
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
2
MODELACIN ESPACIAL
2014
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.
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.
2014
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.
2014
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 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)
2014
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.
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
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.
6
2014
this.axMap1.CursorMode = MapWinGIS.tkCursorMode.cmZoomIn;
this.axMap1.CursorMode = MapWinGIS.tkCursorMode.cmZoomOut;
this.axMap1.CursorMode = MapWinGIS.tkCursorMode.cmPan;
2014
Descripcin
Define si los polgonos
sern rellenados al ser
dibujados
Indica si los polgonos o
arcos sern delineados
al ser dibujados
Establece si sern
mostrados los vrtices
(polgonos o arcos) o
puntos al ser dibujados
Define el color a utilizar
en el relleno de los
polgonos
Establece el achurado
con el cual se dibujar el
relleno de los polgonos
Aplicable a
Polgonos
Define el porcentaje de
transparencia del relleno
de los polgonos
Establece el color de la
lnea
Define el punteado con
el cual se dibujar la
lnea
Polgonos
Arcos
Polgonos
Arcos
Polgonos
Arcos
Polgonos
Puntos
Polgonos
Polgonos
Arcos
Polgonos
Arcos
Polgonos
Puntos
Puntos
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);
2014
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);
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);
2014
Descripcin
ptSymbolStandard
ptSymbolFontCharacter
ptSymbolPicture
10
2014
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();
11
2014
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);
}
12
2014
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);
13
2014
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
Punto
CA
Lnea
Lnea
SIL
Lnea
Polgono
Polgono
Polgono
14
AGREGANDO UN MAPA
Topologa
Polgono
2014
Descripcin
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.
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.
15
AGREGANDO UN MAPA
2014
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.
16
AGREGANDO UN MAPA
2014
2014
2014
19
2014
else
{
botones[i].Enabled = false;
}
}
}
20
2014
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;
}
21
AGREGANDO FUNCIONALIDADES DE
NAVEGACIN
2014
22
2014
{
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));
}
23
2014
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);
24
2014
this.axMap1.set_ShapeLayerLineStipple(manejador,
MapWinGIS.tkLineStipple.lsTrainTracks);
break;
}
}
25
2014
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]);
}
}
26
2014
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;
}
}
27
2014
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);
28
USO DE SMBOLOS
2014
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
29
USO DE ETIQUETAS
2014
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);
}
}
30
USO DE ETIQUETAS
31
2014
USO DE ETIQUETAS