Anda di halaman 1dari 21

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Curso de MapObjects 2.4 con Visual Basic .Net


MapObjects 2.4 con VB .Net

Bienvenidos
Curso para construir aplicaciones S.I.G. con el uso de la herramienta Activex Mapobjects version 2.4 de ESRI y el lenguaje de programacin Visual Basic .Net.

1 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Objetivos
Objetivos del curso
Conocer algunos de las propiedades, eventos y mtodos control activex Mapobjects de ESRI. Desarrollar una pequea aplicacin utilizando Mapobjects y Visual Basic .Net. Obtener los conocimientos necesarios para aplicar Mapobjects en el desarrollo de aplicaciones propias.

2 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Introduccin
Este curso est orientado para todos aquellos programadores que desean integrar mapas a sus aplicaciones. Mapobjects de ESRI es un software que permite mostrar mapas y hacer operaciones espaciales en aplicaciones desarrolladas en sistema operativo Windows.

Prerequisitos
Conocimiento y manejo del sistema operativo Windows 2000 , XP o Vista. Conocimiento y prctica del lenguaje de programacin Visual Basic .Net. Tener conocimiento bsicos de mapas y conceptos de sistema de coordenadas cartesianas. Algn IDE de desarrollo como Visual Studio o algn otro que permita desarrollo de aplicaciones en VB .Net. Mapobjects 2.4 de ESRI instalado, con extension para .Net y datos de ejemplo.

Obteniendo ayuda
Mapobjects cuenta con varias formas de ayudas. Desde ayuda en linea en formato tradicional hasta ayuda del tipo Visual Studio. Otra forma de ayuda es leer el modelo de objetos de Mapobjects que viene con la instalacin de este producto. Dicho modelo est en formado PDF. As como los manuales Referencia del Programador,Cosntruyendo Aplicaciones, Suplemento de MO21 y los de Iniciacin en varios lenguajes de programacin. Todos estos manuales se encuentran dentro de la carpeta de instalacin y en la carpeta de ejemplos. Tambin pudes inscribirte gratuitamente en el Sitio de Soporte de ESRI para ingresar en los foros, tener acceso a cdigos fuente de ejemplos y artculos interesantes. Cmo conocer ms de Mapobjects?

3 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Temario
Para tener un conocimiento base de Mapobjects se debe saber: Como el objeto DataConnection permite agregar informacin al mapa. Como interactuar con la coleccion Layers en el control Map. Como establecer las propiedades de despliegue del objeto MapLayer y consultar rasgos geogrficos. Como usar el objeto Recordset para extraer informacin asociada con tus capas del mapa. Como poner estilos de presentacin de los rasgos geogrficos del mapa a travs de los objetos Symbol y Renderer. Como manejar los objetos Projection para definir sistemas de coordenadas o transformar entre diferentes sistemas de coordenadas. Se cubrirn estos conocimientos bsicos a traves de los siguientes temas que se vern en este curso:
1. 2. 3. 4. 5. 6. 7. 8. 9.

Que es Mapobjects? Despliegue de un mapa con mltiples capas. Trabajando con el mapa y las capas. Realizando consultas lgicas. Aplicando escalas. Realizando consultas espaciales. Establecer simbologa de los elementos geogrficos de las capas. Despliegue de informacin dinmica. Aadir capas vectoriales y raster por medio de cdigo.

4 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Qu es Mapobjects?
Es un conjunto de objetos Activex que pueden ser usados para implementar funciones de cartografa y mapas en las aplicaciones. Que puede hacer Mapobjects? Desplegar un mapa con varias capas de informacin geogrfica. Navegar en el mapa. Dibujar rasgos como puntos, lineas, crculos y polgonos, adems de texto descriptivo. Identificar rasgos. Seleccionar elementos por medio de otros rasgos, a una distancia de otros rasgos y mediante sentencias SQL. Calcular estadsticas sobre los rasgos seleccionados. Consultar y actualizar datos asociados con los rasgos seleccionados. Simbolizar los rasgos en temas, por su valor de altura o medida, ponerles etiquetas obteniendo la informacin de otro campo. Dibujar imgenes de fotografa area o satelitales. Desplegar dinmicamente datos en tiempo real o series de tiempo. Encontrar lugares o intersecciones de calles dadas. Transormar el systema de coordenadas de los datos del mapa. Ejecutar operaciones geomtricas (espaciales) como union, buffer, diferencia, interseccin de formas. Manipular las formas de los rasgos o rotacin del mapa.

Mapobjects como herramienta de programacin. Mapobjects no est hecho para usuarios finales, si no para desarrolladores.

Tip
Que fuentes de datos soporta MapObjects?

5 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Cargando Mapobjects
Para comenzar a usar Mapobjects, se debe primero cargar el control al ambiente de desarrollo usado.

Prctica
Cree una nueva aplicacin windows utilizando como lenguaje de programacin el Visual Basic Net. Agregue a la barra de herramientas el componente AxMap. Revise que el referencias de la aplicacin aparezcan las referencias a ESRI.MapObjects2.Core y ESRI.MapObjects2.Control. El primero contiene la interface (Runtime Callable Wrappers) a los objetos en la librera Mapobjects, la segunda la interface para el Control del Mapa de Mapobjects. Agregue la sentencia Imports en el cdigo: Imports ESRI.MapObjects2.Core Especifique el tamao del control AxMap.

6 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Despliegue de un mapa con multiples capas


Vamos a crear un mapa con dos capas y asignarle color.

Prctica
Seleccione los datos a desplegar en el mapa. Agregue las capas States.shp y USHigh.shp que se encuentran el la carpeta <Directorio raz del Mapobjects>\Samples\Data\USA al control. Estableciendo las propiedades de las capas. Seleccione el color de despliegue de ambas capas. Pruebe la aplicacin. Guarde la aplicacin y ejectela.

Tip
Que eventos suceden cuando el mapa es redibujado?

Tip
En que orden son dibujadas las capas por el control?

7 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Trabajando con el mapa y las capas


Agregando controles de desplazamiento y zoom. Se programar un evento del control para agregar capacidades de desplazamiento y acercamientos. Se aadir una barra de herramientas para controlar estos eventos.

Prctica 1
Agregue el evento MouseDownEvent del control. Edite el evento MouseDownEvent para agregar capacidades de zoom: AxMap1.Extent = AxMap1.TrackRectangle() Pruebe la aplicacin. Edite el evento MouseDownEvent para agregar capacidades de desplazamiento: If e.Button = 1 Then AxMap1.Extent = AxMap1.TrackRectangle() ElseIf e.Button = 2 Then AxMap1.Pan() End If Pruebe los cambios. Guarde el proyecto.

Vamos a agregar una barra de herramientas para controlar el despliegue del mapa.

Prctica 2
Agregue un control ToolStrip a la forma. Modifique el tamao del control AxMap. Agregue tres botones ToolStripButton al control ToolStrip, estos representaran las acciones de acercamientos, desplazamiento y extensin mxima. Cambie las propiedades siguientes como se indica: Propiedad CheckState Image CheckOnClick Tag Boton1 True True Boton2 False True
Teal

Boton3 False
Globe.bmp

Zoom.bmp Pan.bmp

False
Teal

alternante alternante alternante

ImageTransparentColor Teal

Defina un manejador del evento CheckedChanged que dar a algunos botones la caracterstica de ser alternantes. Agregue en ese evento el siguiente cdigo: Dim tsbEsteBoton As ToolStripButton = sender Dim tsbBoton as ToolStripButton If tsbEsteBoton.Checked then For Each item As Object In Me.toolStrip1.Items

8 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

If item.GetType().ToString = "System.Windows.Forms.ToolStripButton" Then tsbBoton = item If tsbboton.Tag = "alternante" Then If Not tsbBoton Is tsbEsteBoton Then tsbBoton.Checked = false End If End If End If Next End If Asigne esta subrutina al evento CheckedChanged de los botones 1 y 2. Modifiquemos el evento MouseDownEvent del control del mapa para que responda a los botones creados: If toolStripButton1.Checked Then AxMap1.Extent = AxMap1.TrackRectangle() ElseIf toolStripButton2.Checked Then axmap1.Pan() End If Aadimos el siguiente cdigo al evento Click del botn 3: me.axMap1.Extent = me.axMap1.FullExtent Pruebe los cambios. Grabe el proyecto

9 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Realizando consultas lgicas


Creando una herramienta de bsqueda. Se crear una herramienta para hacer bsquedas lgicas mediante un atributo de la capa.

Prctica
Agregar un objeto Label y un Textbox a la barra de herramientas. Cambiar la propiedad Text de la ToolStripLabel a "Consulta". Agregar y editar el evento KeyDown del ToolStripTextBox para que quede de la siguiente forma: If e.KeyCode = Keys.Return Then Dim expresion As String expresion = "STATE_NAME = '" & me.toolStripTextBox1.Text & "'" Dim capa As MapLayer capa = Me.axMap1.Layers.Item("States") Dim registroSet As Recordset = capa.SearchExpression(expresion) If Not registroSet.EOF Then Dim poligono As Polygon poligono = registroSet.Fields.Item("Shape").Value Dim extension As ESRI.MapObjects2.Core.Rectangle extension = poligono.Extent extension.ScaleRectangle(2.0) Me.axMap1.Extent = extension Me.axMap1.CtlRefresh() Me.axMap1.FlashShape(poligono,3) End If End If Pruebe la aplicacin. Grabe el proyecto.

Tip
Cmo crear un shapefile desde cdigo?

Tip
Cmo editar un shapefile?

Tip
Cmo usar tablas externas?

10 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Tip
Relacionando informacin geogrfica con tablas externas.

11 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Aplicando escalas
Es posible controlar el despliegue de las capas de acuerdo a la escala de visualizacin.

Prctica
Agregamos una capa ms al control AxMap: Agregar la capa Counties.shp, un equivalente a los municipios, que se encuentra en el mismo directorio que las capas anteriores. Cambiamos las propiedades como el color. Programamos el evento BeforeLayerDraw del control AxMap: Dim capa As MapLayer capa = Me.axMap1.Layers.Item(e.index) Dim proporcion As Double proporcion = Me.axMap1.Extent.Width / (Me.axMap1.FullExtent.Width / 5 ) If capa.Name.ToLower() = "counties" Then capa.Visible = ( proporcion <= 1.0 ) ElseIf capa.Name.ToLower() = "states" Then capa.Visible = ( proporcion > 1.0) End If Pruebe la aplicacin. Grabe el proyecto.

Tip
Cmo calcular la escala en alguna unidad de medida?

12 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Realizando consultas espaciales


Vamos a agregar una herramienta de consulta espacial a la aplicacin.

Prctica
Agregamos un nuevo botn ToolStripButton a la barra de herramientas ToolStrip y ponemos sus propiedades como sigue: Image: Bex.bmp, CheckOnClick: True, Tag: alternante, ImageTransparentColor: Teal. Asignamos al evento CheckedChanged la misma subrutina que habamos asignado anteriormente al los botones de Zoom y Desplazamiento. Agregamos una variable de clase o variable miembro del tipo Mapobjects Recordset a la Forma: Private m_consulta As Recordset Se implementa la herramienta de consulta espacial modificando el cdigo del evento MouseDownEvent de control AxMap: ElseIf toolstripbutton4.Checked Then Dim punto As ESRI.MapObjects2.Core.Point punto = Me.axMap1.ToMapPoint(e.x,e.y) Dim capaCarreteras As ESRI.MapObjects2.Core.MapLayer capaCarreteras = Me.axMap1.Layers.Item("UShigh") Dim registrosCarreteras As ESRI.MapObjects2.Core.Recordset registrosCarreteras = capaCarreteras.SearchByDistance(punto, Me.axMap1.ToMapDistance(2),"")

If registrosCarreteras.EOF Then m_consulta = Nothing Else Dim capaMunicipios As ESRI.MapObjects2.Core.MapLayer capaMunicipios = Me.axMap1.Layers.Item("Counties") Dim lineasCarreteras As ESRI.MapObjects2.Core.Line lineasCarreteras = registrosCarreteras.Fields.Item("Shape").Value m_consulta = capaMunicipios.SearchShape(lineasCarreteras,esri.MapObjects2.Core.SearchMethodConstan End If me.axMap1.CtlRefresh() Ahora dibujamos los resultados. Aadimos el evento AfterLayerDraw del AxMap y lo implementamos para que dibuje los resultados: Dim capa As MapLayer capa = Me.axMap1.Layers.Item(e.index) If capa.Name.ToLower() = "counties" Then If Not (m_consulta Is Nothing) Then If Not (m_consulta.EOF) Then Dim simbolo As Symbol simbolo = New SymbolClass() simbolo.SymbolType = SymbolTypeConstants.moFillSymbol simbolo.Color = Convert.ToUInt32(ColorConstants.moOrange) me.axMap1.DrawShape(m_consulta,simbolo) End If End If End If

13 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Probamos la aplicacin. Grabamos el proyecto.

14 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Establecer simbologa de los elementos geogrficos de las capas


En esta seccin simbolizaremos las capas de States y Counties basados en uno de los valores de los atributos de estas capas, una simbologa por valor para los States y otra graduada para la capa Counties.

Actividad
Agregamos e implementamos el evento Load de la forma: InicializaMunicipios() InicializaEstados() Se agregan e implementan los mtodos anteriores para establecer la simbologa de las capas: Private Sub InicializaMunicipios() Dim capaMunicipios As MapLayer capaMunicipios = Me.axMap1.Layers.Item("Counties") Dim iluminacionMunicipio As ClassBreaksRenderer iluminacionMunicipio = New ClassBreaksRendererClass() capaMunicipios.Renderer = iluminacionMunicipio iluminacionMunicipio.Field = "MOBILEHOME" Dim estadistica As Statistics estadistica = capaMunicipios.Records.CalculateStatistics("MOBILEHOME") dim valorRuptura As Double valorRuptura = estadistica.Mean - ( estadistica.StdDev * 3 ) Dim i As Integer For i = 0 To 6 If ( valorRuptura >= estadistica.Min And valorRuptura <= estadistica.Max ) Then Dim cuentaRupturas As Integer cuentaRupturas = iluminacionMunicipio.BreakCount iluminacionMunicipio.BreakCount = cuentaRupturas + 1 iluminacionMunicipio.Break(cuentaRupturas) = valorRuptura End If valorRuptura = valorRuptura + estadistica.StdDev Next iluminacionMunicipio.RampColors(Convert.ToUInt32(ColorConstants.moLimeGreen), Convert.ToUInt32(ColorConstants.moRed)) End Sub Private Sub InicializaEstados() Dim capaEstados As MapLayer capaEstados = Me.axMap1.Layers.Item("States") Dim iluminacionEstado As ValueMapRenderer iluminacionEstado = New ValueMapRendererClass() Dim registrosEstado As Recordset registrosEstado = capaEstados.Records capaEstados.Renderer = iluminacionEstado iluminacionEstado.Field = "SUB_REGION" Dim regiones As Strings regiones = New StringsClass() regiones.Unique = True While Not registrosEstado.EOF regiones.Add(registrosEstado.Fields.Item("SUB_REGION").ValueAsString) registrosEstado.MoveNext() End While iluminacionEstado.ValueCount = regiones.Count

15 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Dim i As Integer For i = 0 To regiones.Count - 1 iluminacionEstado.Value(i) = regiones.Item(i) Next End Sub Pruebe la aplicacin. Grabe el proyecto. Nota importante: Cuando se usa la clase ValueMapRenderer para simbolizar una capa que no sea de polgonos, es necesario especificar explcitamente la propiedad SymbolType, si no la capa no ser dibujada con la simbologa especificada.

16 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Despliegue de informacin dinmica


En algunas ocasiones es necesario implementar eventos o entidades geogrficas que estn en movimento. en este ejercicio veremos como implementar esa clase de eventos.

Prctica 1
Agregamos una herramienta de eventos a la barra de herramientas con las siguientes propiedades: Image: Pennant.bmp, CheckOnClick: True, Tag: alternante, ImageTransparentColor: Teal. Al evento CheckedChanged se le asigna el mtodo antes asignado a los botones de Zoom y Desplazamiento. Implementamos el evento de la herramienta modificando el evento MouseDownEvent del control AxMap1: ElseIf Me.toolStripButton5.Checked Then Dim punto As ESRI.MapObjects2.Core.Point punto = Me.axMap1.ToMapPoint(e.x,e.y) Dim simbolo As ESRI.MapObjects2.Core.Symbol simbolo = Me.axMap1.TrackingLayer.Symbol(0) simbolo.SymbolType = esri.MapObjects2.Core.SymbolTypeConstants.moPointSymbol simbolo.Size = 5 simbolo.Style = esri.MapObjects2.Core.MarkerStyleConstants.moTriangleMarker me.axMap1.TrackingLayer.AddEvent(punto, 0) Pruebe los cambios. Guarde el Proyecto.

Prctica 2
Ahora vamos a agregar un cronmetro o control Timer y un CheckBox para simular el movimiento de los eventos. Agregue un Timer a la forma y un CheckBox, cambie la propiedad Text del CheckBox a "Mover eventos". Agregue e implemente el evento Tick del Timer: Dim cuentaEvento As Integer cuentaEvento = Me.axMap1.TrackingLayer.EventCount Dim distancia As Double distancia = Me.axMap1.Extent.Width / 25 Dim aleatorio As System.Random aleatorio = New Random() Dim i As Integer For i = 0 To cuentaEvento - 1 Dim geoEvento As GeoEvent geoEvento = Me.axMap1.TrackingLayer.Event(i) geoEvento.Move((aleatorio.NextDouble() - 0.5) * distancia, (aleatorio.NextDouble() - 0.5 ) * distancia ) Next

17 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Agregue e implemente el evento CheckedChanged del CheckBox: If Me.checkBox1.Checked Then Me.timer1.Start() Else me.timer1.Stop() End If Pruebe la aplicacin. Guarde el proyecto.

Tip
Cmo dibujar eventos en la capa TrackingLayer con distinta simbologa?

18 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Aadir capas vectoriales y raster por medio de cdigo


Ahora vamos a ver cmo aadir capas al control AxMap por medio de cdigo, capas tanto vectoriales como de imgenes, adems cambiaremos el sistema de coordenadas del mapa.

Prctica 1
Remueva las capas que ingresamos en el control AxMap, a travs de las propiedades del Activex. Agregue el siguiente mtodo a la forma: Private Sub InicializaMapa() Dim conexion As DataConnection conexion = New DataConnectionClass() conexion.Database = "C:\Program Files\ESRI\MapObjects2\Samples\Data\USA" If conexion.Connect() Then Dim capa As MapLayer capa = New MapLayerClass() capa.GeoDataset = conexion.FindGeoDataset("States") Me.axMap1.Layers.Add(capa) capa = New MapLayerClass() capa.GeoDataset = conexion.FindGeoDataset("Counties") Me.axMap1.Layers.Add(capa) capa = New MapLayerClass() capa.GeoDataset = conexion.FindGeoDataset("USHigh") capa.Symbol.Color = convert.ToUInt32(ColorConstants.moRed) Me.axMap1.Layers.Add(capa) Else messagebox.Show("No se localizaron los datos.") application.Exit() End If End Sub Agregue una llamada a este mtodo desde el evento Load de la Forma: InicializaMapa() Pruebe la aplicacin. Grabe los cambios.

Prctica 2
Ahora vamos a agregar un archivo imagen georeferenciado. Agregue el siguiente cdigo en el mtodo InicializaMapa: Dim capaImagen As ImageLayer capaImagen = New ImageLayerClass() capaImagen.File = "C:\Program Files\ESRI\MapObjects2\Samples\Data\Washington\WASH.BMP" Me.axMap1.Layers.Add(capaImagen)

19 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Pruebe la aplicacin. Agregue lo siguiente al mismo mtodo InicializaMapa: conexion.Disconnect() conexion.Database = "C:\Program Files\ESRI\MapObjects2\Samples\Data\Washington" If conexion.Connect() Then Dim proyeccion As ProjCoordSys proyeccion = New ProjCoordSysClass() proyeccion = conexion.FindCoordinateSystem("Roads.prj") Me.axMap1.CoordinateSystem = proyeccion Else MessageBox.Show("No se pudieron proyectar las capas.","Precaucin") End If Pruebe la aplicacin. Guarde el proyecto.

Tip
Cmo saber si una capa es vectorial o imagen?

Tip
Cmo saber que tipo de elementos geogrficos o rasgos contiene una capa?

Tip
Cmo agregar una capa de ARCSDE (Geodatabase)?

20 of 21

14/01/2009 03:14 p.m.

CursoMapObjectsVBNet

http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...

Mapobjects 2.4 con VB .Net

21 of 21

14/01/2009 03:14 p.m.

Anda mungkin juga menyukai