Programación con Visual Basic + MapObjects VB + MO Lab. Geomática II Depto. Ingeniería Geográfica ~ USACH ~ CHILE Profesor: Ing. Marcos Medina Tapia. 1
Introducción MapObjects es una colección de componentes SIG hecho por ESRI Usado para crear aplicaciones SIG de escritorio. Otros ejemplos de componentes SIG: MapGuide (AutoDesk) OpenMap (BBN Technologies) free JavaBeans component GeoObjects (Blue Marble Geographics) MapX (MapInfo Corporation) SpatialX (ObjectFX) 2
Qué se puede hacer con MapObjects? Muestra mapas con múltiples capas (layers). Zoom and paneo. Dibuja objetos gráficos y textos. Identifica entidades clickeando sobre el mapa, o a través de consultas simples SQL o consultas espaciales. Calcula estadística básica. Consulta y actualiza base de atributos. Etiqueta basado en campos de textos. Usa los siguientes fuentes de datos: shapefiles, archivos de imagen, tablas de atributos o información espacial. accediendo a través de SDE de ESRI. 3
Programación MapObjects es un control ActiveX: un componente software que permite agregar funcionalidad específica para una aplicación. Windows 95, 98, Me, 2K, XP, NT Aplicaciones Usuario final Visual Basic, Delphi, Visual C++ MapObjects Otros Controles 4
Shapefiles Adecuado para mapas pequeños y medianos. La geometría de cada entidad es utilizado como un shape compuesto por un conjunto de vectores coordenados. Los atributos están asociados a una tabla dbase (con un registro para cada entidad). Shapefiles pueden ser obtenidos de fuentes tradicionales (source). Compuesto por 3 archivos (.shp,.shx,.dbf) Cada shapefile contiene un tipo de forma (punto, línea o polígono). 5
Objetos de MapObject Además del Map control, MapObjects incluye más de 30 objetos. Estos objetos pueden ser vistos en el Examinador de Objetos de VB, seleccionando la biblioteca de MapObject (Ver figura). El Map control es el componente más visible, porque aparece en la barra de herramientas de VB (Ver figura). Cuando se declara o se crean nuevos objetos desde MapObjects, es bueno programar utilizando el objeto: Dim rset As New MapObjects.RecordSet (Obs: VisualBasic también tiene una clase de RecordSet) 6
Visión General de Objetos MO Los objetos de MapObjects son divididos fundamentalmente en cuatro grupos: Objetos de acceso a datos: para establecer conexiones a datos de mapas, actualizar valores de atributos, regresar información de atributos de entidades sobre tu mapa. Objetos de mapas: dibuja mapas con símbolos y mapas temáticos, agrega imágenes, muestra datos dinámicos. Objetos geométricos: regresa información geométrica de entidades seleccionadas, agregando objetos a los mapas. Geocodificación: para determinar localizaciones basadas en direcciones. MapObjects 2 incluye una serie de proyecciones. 7
Objeto Data Access El objeto DataConnection es usado para establecer una conexión a GeoDatasets (objeto colección de GeoDataset, referenciando ashapefiles or layer SDE). El objeto Recordset representa registros de una cobertura de mapa (o los registros seleccionados si existe una selección). La colección Fields contiene objetos Field (Columna de datos) de un Recordset. El objeto TableDesc contiene información acerca de campos in la tabla asociadad con un recordset. El objeto Table es leído solo la tabla simple de una fuente de datos ODBC. Tú puedes agregar una tabla como un objeto relacionado con un objeto MapLayer. El objeto Statistics representa estadística acerca de un recordset y la coleccón de Strings es un conjunto string estándares. 8
Objeto Map Display El control Map permite mostrar un MapLayer (un objeto GeoDataset con display properties), ImageLayer y TrackingLayer (para dibujos de entidades dinámicas). La colección de Layers es un conjunto de layers para el Map control. El objeto GeoEvent representa entidades de punto que tu puedes agregar para objetos TrackingLayer. Objetos para mostrar símbolos sobre un mapa y mapas temáticos: Symbol, TextSymbol, ClassBreaksRenderer, ValueMapRenderer, DotDensityRenderer, LabelRenderer. 9
Objeto Geometric Los objetos Geometric son usados para regresar información geométrica de entidades seleccionadas, agregando objetos geométricos a coberturas y dibujando nuevos objetos geométricos. Los objetos geométricos son: Rectangle (para dibujos y para trabajar con extents), colección Points, Point (valores X,Y), Line, Polygon (Colección de puntos con punto inicial y final idénticos) y Ellipse (para elipse y círculos). 10
Elementos de MapObjects 11
Iniciando MO2 1. Instalar MapObjects, después de instalar VisualBasic. 2. Iniciar VisualBasic y agregar el control llamado: ESRI MapObjects. 3. Agregar a un formulario el nuevo control de la barra de herramientas de Visual Basic, llamado Map control. 12
Instalación de MapObjects sobre VB6 Se ejecuta el instalador llamado Mo21setup.exe. Posteriormente, aparecerá la pantalla de inicio de instalación. 13
Proceso de instalación de MapObjects 2 14
Ejemplo 1: Agregando coberturas a un mapa 1. Configurar las propiedades del formulario. 2. Doble click sobre el Map control en la barra de herramientas para agregar un nuevo mapa al formulario. 3. Redimensionar el tamaño del control en el formulario Propiedades del formulario principal: Nombre: frmmain Caption: GEOsig StartUpPosition: CenterScreen 15
3. Configurar las propiedades del Map control. 4. Botón derecho sobre el Map control. 5. Elegir las propiedades del Map control. 6. Click para Agregar (Add) 7. Seleccionar las Coberturas: comunas.shp y vialidad.shp Propiedades del MapControl: Nombre: MapMain No olviden Guardar su Proyecto!!! 16
Agregar eventos del MapControl Principales eventos: Private SubObject_Click() End Sub Private SubObject_DblClick() End Sub Private SubObject_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) End Sub Private SubObject_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) End Sub Private SubObject_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) End Sub Donde: Object Button Shift X Y Nombre del objeto Map control. Una constante (integer) que especifica el botón presionado por el usuario (vbleftbutton, vbrightbutton, vbmiddlebutton). Una constante que especifica el estado del botón Shift (vbshiftmask, vbctrlmask, vbaltmask). Valor tipo single que especifica la coordenada X según la posición del mouse. Valor tipo single que especifica la coordenada Y según la posición del 17 mouse.
Herramienta Zoom + Private Sub MapMain_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Set MapMain.Extent = MapMain.TrackRectangle End Sub 18
Herramienta Zoom + y Paneo Private Sub MapMain_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) If Button = vbleftbutton Then Set MapMain.Extent = MapMain.TrackRectangle ElseIf Button = vbrightbutton Then MapMain.Pan End If End Sub 19
Herramienta Zoom + y Paneo utilizando Punteros del mouse En primer lugar, agregar las sentencias de color magenta Private Sub MapMain_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) If Button = vbleftbutton Then MapMain.MousePointer = mozoom Set MapMain.Extent = MapMain.TrackRectangle ElseIf Button = vbrightbutton Then MapMain.MousePointer = mopan MapMain.Pan End If MapMain.MousePointer = modefault End Sub 20
Agregar dos controles de tipo CommandButton, y configurar las propiedades de la siguiente manera. Nombre original CommandButton1 CommandButton2 Nuevo nombre cmdagregar cmdzextendido Caption Agregar Zoom extendido 21
Agregar un componente utilizando el menú Proyecto -> Componentes. El componente corresponde a ventanas comunes como Abrir y Guardar archivo, Imprimir, Seleccionar colores y fuentes y configuración de ayuda. El control se llama Microsoft Common Dialog Control 6.0. Por último, agregar al formulario desde la ventana de herramientas, el control CommonDialog. 22
Botón para agregar shapefile Private Sub cmdagregar_click() Dim oconnect As New DataConnection Dim odataset As GeoDataset Dim sname As String Dim olayer As MapObjects2.MapLayer CommonDialog1.Filter = "ESRI Shapefiles (*.shp) *.shp" CommonDialog1.ShowOpen If Len(CommonDialog1.FileName) = 0 Then Exit Sub oconnect.database = CurDir If Not oconnect.connect Then Exit Sub sname = Left(CommonDialog1.FileTitle, Len(CommonDialog1.FileTitle) - 4) Set odataset = oconnect.findgeodataset(sname) If odataset Is Nothing Then Exit Sub Set olayer = New MapLayer olayer.geodataset = odataset MapMain.Layers.Add olayer End Sub OjO Deben antes eliminar las coberturas agregadas anteriormente, mediante las propiedades del Mapcontrol 23
Zoom extendido Private Sub cmdzextendido_click() Set MapMain.Extent = MapMain.FullExtent End Sub 24
Zoom - Primero, corregir y/o agregar las sentencias de color magenta Private Sub MapMain_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) If Button = vbleftbutton And Shift = 0 Then MapMain.MousePointer = mozoom Set MapMain.Extent = MapMain.TrackRectangle ElseIf Button = vbleftbutton And Shift = vbshiftmask Then dozoomout ElseIf Button = vbrightbutton Then MapMain.MousePointer = mopan MapMain.Pan End If MapMain.MousePointer = modefault End Sub Agregar el siguiente procedimiento Private Sub dozoomout() Dim currectangle As New MapObjects2.Rectangle Set currectangle = MapMain.Extent If Not currectangle Is Nothing Then currectangle.scalerectangle 1.4 Set MapMain.Extent = currectangle End If Set currectangle = Nothing End Sub 25
26