Cur So Map Objects Vb Net

Embed Size (px)

Citation preview

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

    1 of 21 14/01/2009 03:14 p.m.

    Curso de MapObjects 2.4 con Visual Basic .NetMapObjects 2.4 con VB .Net

    Bienvenidos

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

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

    2 of 21 14/01/2009 03:14 p.m.

    Objetivos

    Conocer algunos de las propiedades, eventos y mtodos control activexMapobjects 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.

    Objetivos del curso

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

    3 of 21 14/01/2009 03:14 p.m.

    Introduccin

    Este curso est orientado para todos aquellos programadores que desean integrar mapas asus aplicaciones.

    Mapobjects de ESRI es un software que permite mostrar mapas y hacer operacionesespaciales en aplicaciones desarrolladas en sistema operativo Windows.

    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 coordenadascartesianas.

    Algn IDE de desarrollo como Visual Studio o algn otro que permita desarrollode aplicaciones en VB .Net.

    Mapobjects 2.4 de ESRI instalado, con extension para .Net y datos de ejemplo.

    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 conla instalacin de este producto. Dicho modelo est en formado PDF. As comolos 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 lacarpeta 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 artculosinteresantes.

    Cmo conocer ms de Mapobjects?

    Prerequisitos

    Obteniendo ayuda

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

    4 of 21 14/01/2009 03:14 p.m.

    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 consultarrasgos geogrficos.Como usar el objeto Recordset para extraer informacin asociada con tus capas delmapa.Como poner estilos de presentacin de los rasgos geogrficos del mapa a travs de losobjetos Symbol y Renderer.Como manejar los objetos Projection para definir sistemas de coordenadas otransformar entre diferentes sistemas de coordenadas.

    Se cubrirn estos conocimientos bsicos a traves de los siguientes temas que se vern eneste curso:

    Que es Mapobjects?1.Despliegue de un mapa con mltiples capas.2.Trabajando con el mapa y las capas.3.Realizando consultas lgicas.4.Aplicando escalas.5.Realizando consultas espaciales.6.Establecer simbologa de los elementos geogrficos de las capas.7.Despliegue de informacin dinmica.8.Aadir capas vectoriales y raster por medio de cdigo.9.

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

    5 of 21 14/01/2009 03:14 p.m.

    Qu es Mapobjects?

    Es un conjunto de objetos Activex que pueden ser usados para implementar funciones de cartografa ymapas 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 lainformacin 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 deformas.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.

    .

    Que fuentes de datos soporta MapObjects?

    Tip

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

    6 of 21 14/01/2009 03:14 p.m.

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

    Cree una nueva aplicacin windows utilizando como lenguaje de programacin el VisualBasic Net.

    Agregue a la barra de herramientas el componente AxMap.

    Revise que el referencias de la aplicacin aparezcan las referencias aESRI.MapObjects2.Core y ESRI.MapObjects2.Control. El primero contiene la interface (Runtime Callable Wrappers) a los objetos en la librera Mapobjects, la segunda lainterface para el Control del Mapa de Mapobjects.

    Agregue la sentencia Imports en el cdigo:

    Imports ESRI.MapObjects2.Core

    Especifique el tamao del control AxMap.

    Prctica

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

    7 of 21 14/01/2009 03:14 p.m.

    Despliegue de un mapa con multiples capas

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

    Seleccione los datos a desplegar en el mapa.

    Agregue las capas States.shp y USHigh.shp que se encuentran el la carpeta \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.

    Que eventos suceden cuando el mapa es redibujado?

    En que orden son dibujadas las capas por el control?

    Prctica

    Tip

    Tip

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

    8 of 21 14/01/2009 03:14 p.m.

    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. Seaadir una barra de herramientas para controlar estos eventos.

    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 ThenAxMap1.Extent = AxMap1.TrackRectangle()ElseIf e.Button = 2 ThenAxMap1.Pan()End If

    Pruebe los cambios.

    Guarde el proyecto.

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

    Agregue un control ToolStrip a la forma.

    Modifique el tamao del control AxMap.

    Agregue tres botones ToolStripButton al control ToolStrip, estos representaran lasacciones de acercamientos, desplazamiento y extensin mxima. Cambie las propiedadessiguientes como se indica:

    Propiedad Boton1 Boton2 Boton3

    CheckState True False False

    Image Zoom.bmp Pan.bmp Globe.bmp

    CheckOnClick True True False

    Tag alternante alternante alternante

    ImageTransparentColor Teal Teal Teal

    Defina un manejador del evento CheckedChanged que dar a algunos botones lacaracterstica de ser alternantes. Agregue en ese evento el siguiente cdigo:

    Dim tsbEsteBoton As ToolStripButton = senderDim tsbBoton as ToolStripButtonIf tsbEsteBoton.Checked thenFor Each item As Object In Me.toolStrip1.Items

    Prctica 1

    Prctica 2

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

    9 of 21 14/01/2009 03:14 p.m.

    If item.GetType().ToString = "System.Windows.Forms.ToolStripButton" ThentsbBoton = itemIf tsbboton.Tag = "alternante" ThenIf Not tsbBoton Is tsbEsteBoton ThentsbBoton.Checked = falseEnd IfEnd IfEnd If NextEnd 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 losbotones creados:

    If toolStripButton1.Checked ThenAxMap1.Extent = AxMap1.TrackRectangle()ElseIf toolStripButton2.Checked Thenaxmap1.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

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

    10 of 21 14/01/2009 03:14 p.m.

    Realizando consultas lgicas

    Creando una herramienta de bsqueda.

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

    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 ThenDim expresion As Stringexpresion = "STATE_NAME = '" & me.toolStripTextBox1.Text & "'"Dim capa As MapLayercapa = Me.axMap1.Layers.Item("States")Dim registroSet As Recordset = capa.SearchExpression(expresion)

    If Not registroSet.EOF ThenDim poligono As Polygonpoligono = registroSet.Fields.Item("Shape").ValueDim extension As ESRI.MapObjects2.Core.Rectangleextension = poligono.Extentextension.ScaleRectangle(2.0)Me.axMap1.Extent = extensionMe.axMap1.CtlRefresh()Me.axMap1.FlashShape(poligono,3)

    End IfEnd If

    Pruebe la aplicacin.

    Grabe el proyecto.

    Cmo crear un shapefile desde cdigo?

    Cmo editar un shapefile?

    Cmo usar tablas externas?

    Prctica

    Tip

    Tip

    Tip

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

    11 of 21 14/01/2009 03:14 p.m.

    Relacionando informacin geogrfica con tablas externas.

    Tip

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

    12 of 21 14/01/2009 03:14 p.m.

    Aplicando escalas

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

    Agregamos una capa ms al control AxMap:

    Agregar la capa Counties.shp, un equivalente a los municipios, que se encuentra en elmismo directorio que las capas anteriores. Cambiamos las propiedades como el color.

    Programamos el evento BeforeLayerDraw del control AxMap:

    Dim capa As MapLayercapa = Me.axMap1.Layers.Item(e.index)Dim proporcion As Doubleproporcion = Me.axMap1.Extent.Width / (Me.axMap1.FullExtent.Width / 5 )

    If capa.Name.ToLower() = "counties" Thencapa.Visible = ( proporcion 1.0)End If

    Pruebe la aplicacin.

    Grabe el proyecto.

    Cmo calcular la escala en alguna unidad de medida?

    Prctica

    Tip

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

    13 of 21 14/01/2009 03:14 p.m.

    Realizando consultas espaciales

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

    Agregamos un nuevo botn ToolStripButton a la barra de herramientas ToolStrip yponemos sus propiedades como sigue:

    Image: Bex.bmp, CheckOnClick: True, Tag: alternante, ImageTransparentColor: Teal.

    Asignamos al evento CheckedChanged la misma subrutina que habamos asignadoanteriormente 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 eventoMouseDownEvent de control AxMap:

    ElseIf toolstripbutton4.Checked ThenDim punto As ESRI.MapObjects2.Core.Pointpunto = Me.axMap1.ToMapPoint(e.x,e.y)Dim capaCarreteras As ESRI.MapObjects2.Core.MapLayercapaCarreteras = Me.axMap1.Layers.Item("UShigh")Dim registrosCarreteras As ESRI.MapObjects2.Core.RecordsetregistrosCarreteras = capaCarreteras.SearchByDistance(punto,Me.axMap1.ToMapDistance(2),"")

    If registrosCarreteras.EOF Thenm_consulta = NothingElseDim capaMunicipios As ESRI.MapObjects2.Core.MapLayercapaMunicipios = Me.axMap1.Layers.Item("Counties")Dim lineasCarreteras As ESRI.MapObjects2.Core.LinelineasCarreteras = registrosCarreteras.Fields.Item("Shape").Valuem_consulta =capaMunicipios.SearchShape(lineasCarreteras,esri.MapObjects2.Core.SearchMethodConstants.moEdgeTouchOrAreaIntersect,"")End Ifme.axMap1.CtlRefresh()

    Ahora dibujamos los resultados.

    Aadimos el evento AfterLayerDraw del AxMap y lo implementamos para que dibuje losresultados:

    Dim capa As MapLayercapa = Me.axMap1.Layers.Item(e.index)If capa.Name.ToLower() = "counties" ThenIf Not (m_consulta Is Nothing) ThenIf Not (m_consulta.EOF) ThenDim simbolo As Symbolsimbolo = New SymbolClass()simbolo.SymbolType = SymbolTypeConstants.moFillSymbolsimbolo.Color = Convert.ToUInt32(ColorConstants.moOrange)me.axMap1.DrawShape(m_consulta,simbolo)End IfEnd IfEnd If

    Prctica

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

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

    Probamos la aplicacin.

    Grabamos el proyecto.

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

    15 of 21 14/01/2009 03:14 p.m.

    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 losatributos de estas capas, una simbologa por valor para los States y otra graduada para la capaCounties.

    Agregamos e implementamos el evento Load de la forma:

    InicializaMunicipios()InicializaEstados()

    Se agregan e implementan los mtodos anteriores para establecer la simbologa de lascapas:

    Private Sub InicializaMunicipios()Dim capaMunicipios As MapLayercapaMunicipios = Me.axMap1.Layers.Item("Counties")Dim iluminacionMunicipio As ClassBreaksRendereriluminacionMunicipio = New ClassBreaksRendererClass()capaMunicipios.Renderer = iluminacionMunicipioiluminacionMunicipio.Field = "MOBILEHOME"

    Dim estadistica As Statisticsestadistica = capaMunicipios.Records.CalculateStatistics("MOBILEHOME")dim valorRuptura As DoublevalorRuptura = estadistica.Mean - ( estadistica.StdDev * 3 )Dim i As IntegerFor i = 0 To 6If ( valorRuptura >= estadistica.Min And valorRuptura

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

    16 of 21 14/01/2009 03:14 p.m.

    Dim i As IntegerFor i = 0 To regiones.Count - 1iluminacionEstado.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 lapropiedad SymbolType, si no la capa no ser dibujada con la simbologaespecificada.

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

    17 of 21 14/01/2009 03:14 p.m.

    Despliegue de informacin dinmica

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

    Agregamos una herramienta de eventos a la barra de herramientas con las siguientespropiedades:

    Image: Pennant.bmp, CheckOnClick: True, Tag: alternante,ImageTransparentColor: Teal.

    Al evento CheckedChanged se le asigna el mtodo antes asignado a los botones de Zoomy Desplazamiento.

    Implementamos el evento de la herramienta modificando el evento MouseDownEvent del control AxMap1:

    ElseIf Me.toolStripButton5.Checked ThenDim punto As ESRI.MapObjects2.Core.Pointpunto = Me.axMap1.ToMapPoint(e.x,e.y)Dim simbolo As ESRI.MapObjects2.Core.Symbolsimbolo = Me.axMap1.TrackingLayer.Symbol(0)simbolo.SymbolType =esri.MapObjects2.Core.SymbolTypeConstants.moPointSymbolsimbolo.Size = 5simbolo.Style = esri.MapObjects2.Core.MarkerStyleConstants.moTriangleMarkerme.axMap1.TrackingLayer.AddEvent(punto, 0)

    Pruebe los cambios.

    Guarde el Proyecto.

    Ahora vamos a agregar un cronmetro o control Timer y un CheckBox para simular elmovimiento 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 IntegercuentaEvento = Me.axMap1.TrackingLayer.EventCountDim distancia As Doubledistancia = Me.axMap1.Extent.Width / 25Dim aleatorio As System.Randomaleatorio = New Random()

    Dim i As IntegerFor i = 0 To cuentaEvento - 1Dim geoEvento As GeoEventgeoEvento = Me.axMap1.TrackingLayer.Event(i)geoEvento.Move((aleatorio.NextDouble() - 0.5) * distancia,(aleatorio.NextDouble() - 0.5 ) * distancia )Next

    Prctica 1

    Prctica 2

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

    18 of 21 14/01/2009 03:14 p.m.

    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.

    Cmo dibujar eventos en la capa TrackingLayer con distinta simbologa?

    Tip

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

    19 of 21 14/01/2009 03:14 p.m.

    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 vectorialescomo de imgenes, adems cambiaremos el sistema de coordenadas del mapa.

    Remueva las capas que ingresamos en el control AxMap, a travs de las propiedades delActivex.

    Agregue el siguiente mtodo a la forma:

    Private Sub InicializaMapa()Dim conexion As DataConnectionconexion = New DataConnectionClass()conexion.Database = "C:\ProgramFiles\ESRI\MapObjects2\Samples\Data\USA"If conexion.Connect() ThenDim capa As MapLayercapa = 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)

    Elsemessagebox.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.

    Ahora vamos a agregar un archivo imagen georeferenciado.

    Agregue el siguiente cdigo en el mtodo InicializaMapa:

    Dim capaImagen As ImageLayercapaImagen = New ImageLayerClass()capaImagen.File = "C:\ProgramFiles\ESRI\MapObjects2\Samples\Data\Washington\WASH.BMP"Me.axMap1.Layers.Add(capaImagen)

    Prctica 1

    Prctica 2

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

    20 of 21 14/01/2009 03:14 p.m.

    Pruebe la aplicacin.

    Agregue lo siguiente al mismo mtodo InicializaMapa:

    conexion.Disconnect()conexion.Database = "C:\ProgramFiles\ESRI\MapObjects2\Samples\Data\Washington"If conexion.Connect() ThenDim proyeccion As ProjCoordSysproyeccion = New ProjCoordSysClass()proyeccion = conexion.FindCoordinateSystem("Roads.prj")Me.axMap1.CoordinateSystem = proyeccionElseMessageBox.Show("No se pudieron proyectar las capas.","Precaucin")

    End If

    Pruebe la aplicacin.

    Guarde el proyecto.

    Cmo saber si una capa es vectorial o imagen?

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

    Cmo agregar una capa de ARCSDE (Geodatabase)?

    Tip

    Tip

    Tip

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

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

    Mapobjects 2.4 con VB .Net