Beruflich Dokumente
Kultur Dokumente
http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...
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
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
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
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
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
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
CursoMapObjectsVBNet
http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...
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
CursoMapObjectsVBNet
http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...
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
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
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
CursoMapObjectsVBNet
http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...
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
CursoMapObjectsVBNet
http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...
Tip
Relacionando informacin geogrfica con tablas externas.
11 of 21
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
CursoMapObjectsVBNet
http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...
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
CursoMapObjectsVBNet
http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...
14 of 21
CursoMapObjectsVBNet
http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...
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
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
CursoMapObjectsVBNet
http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...
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
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
CursoMapObjectsVBNet
http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...
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
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
CursoMapObjectsVBNet
http://127.0.0.1:51235/temp_print_dirs/eXeTempPrintDir_iab1d0/Cu...
21 of 21