45
MANUAL DE MAPBASIC Versión 9.5 Este manual es una guía de referencia para el desarrollo de aplicaciones en MapInfo Professional 9.5 Elaborado por: Olibert García Felipe

Manual Mapbasic

  • Upload
    olibert

  • View
    1.123

  • Download
    18

Embed Size (px)

DESCRIPTION

Manual de MapBasic 9.5 en español.

Citation preview

Page 1: Manual Mapbasic

MANUAL DE MAPBASIC Versión 9.5 Este manual es una guía de referencia para el desarrollo de aplicaciones en MapInfo Professional 9.5 Elaborado por: Olibert García Felipe

Page 2: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 2

INDICE

1. EDITOR DE MAPBASIC ............................................................................................................................... 4

1.1 DESCRIPCIÓN DE LA INTERFAZ .......................................................................................................................... 4 1.2 COMPILAR PROGRAMAS: ................................................................................................................................ 5

2. FUNDAMENTOS DE PROGRAMACIÓN EN MB............................................................................................ 6

2.1 VARIABLES ................................................................................................................................................... 6 2.2 TIPOS DE DATOS ........................................................................................................................................... 6 2.3 OPERADORES ............................................................................................................................................... 7 2.4 CONTROLES DE FLUJO Y BUCLES........................................................................................................................ 9 2.5 PROCEDIMIENTOS SUB Y FUNCTION ................................................................................................................ 12

3. CREACIÓN DE INTERFACES EN MAPBASIC ............................................................................................... 14

3.1 GESTIÓN DE MENÚS .................................................................................................................................... 14 3.2 GESTIÓN DE BARRA DE HERRAMIENTAS: ........................................................................................................... 16 3.3 FUNCIÓN COMMANDINFO() ......................................................................................................................... 17 3.4 CUADROS DE DIALOGO ................................................................................................................................. 21

4. TRABAJO CON TABLAS: ........................................................................................................................... 25

4.1 SENTENCIA CREATE TABLE ............................................................................................................................ 25 4.2 SENTENCIA ALTER TABLE .............................................................................................................................. 26 4.3 SENTENCIA CREATE MAP .............................................................................................................................. 26 4.4 SENTENCIA PACK TABLE ............................................................................................................................... 26 4.5 FUNCIÓN TABLEINFO ................................................................................................................................... 26 4.6 FUNCIÓN NUMTABLES ................................................................................................................................. 27 4.7 SENTENCIA OPEN TABLE ............................................................................................................................... 27 4.8 SENTENCIA COMMIT TABLE, ROLLBACK TABLE .................................................................................................. 27 4.9 TABLAS ESPECIALES ..................................................................................................................................... 28 4.10 FUNCIÓN OBJECTINFO ................................................................................................................................. 28

5. TRABAJO CON VENTANAS ....................................................................................................................... 29

5.1 SENTENCIA MAP ......................................................................................................................................... 30 5.2 FUNCIÓN WINDOWID ................................................................................................................................. 30 5.3 FUNCIÓN FRONTWINDOW ........................................................................................................................... 30 5.4 FUNCIÓN NUMWINDOWS, NUMALLWINDOWS ............................................................................................... 30 5.5 FUNCIÓN WINDOWINFO .............................................................................................................................. 31 5.6 SENTENCIA SET MAP ................................................................................................................................... 32 5.7 AGREGAR Y QUITAR CAPAS ............................................................................................................................ 33 5.8 BÚSQUEDA Y LOCALIZACIÓN DE OBJETOS.......................................................................................................... 34

6. VENTANA DE PRESENTACIÓN: ................................................................................................................. 34

6.1 SENTENCIA LAYOUT ..................................................................................................................................... 34 6.2 SENTENCIA CREATE FRAME ........................................................................................................................... 35 6.3 SENTENCIA CREATE TEXT .............................................................................................................................. 35 6.4 TABLA LAYOUTN......................................................................................................................................... 36 6.5 IMPRESIÓN DE LA VENTANA DE PRESENTACIÓN .................................................................................................. 36

7. TRABAJO CON DBMS:.............................................................................................................................. 36

7.1 DIFERENCIA ENTRE BBDD ESPACIAL Y NO ESPACIAL ........................................................................................... 36 7.2 CONEXIÓN DBMS SIN BBDD ESPACIAL .......................................................................................................... 37

Page 3: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 3

7.3 CONECTAR, DESCONECTAR A SQLSERVER Y ORACLE. ......................................................................................... 38 7.4 HACER UNA TABLA REPRESENTABLE CON COORDENADAS X E Y ............................................................................. 38 7.5 VINCULAR, DESVINCULAR TABLAS ................................................................................................................... 40 7.6 REFRESCAR DATOS ...................................................................................................................................... 41 7.7 CONEXIÓN DBMS CON BBDD ESPACIAL ........................................................................................................ 41 7.8 CREAR ESPACIOS EN EL SERVIDOR. .................................................................................................................. 42

8. INTEGRACIÓN CON OTROS LEGUAJES DE PROGRAMACIÓN: ................................................................... 43

8.1 ESTABLECIENDO LA CONEXIÓN CON LA INSTANCIA DE MAPINFO ........................................................................... 44 8.2 ENVÍOS DE COMANDOS Y CONSULTAS A MAPINFO DESDE VB6.0, .NET ................................................................ 44 8.3 USO DE LOS MÉTODOS CALLBACK .................................................................................................................. 45

Page 4: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 4

1. Editor de MapBasic Para ingresar al editor y compilador de MapBasic, realice lo siguiente: • En el menú Inicio haga clic en programas, luego MapInfo y enseguida MapBasic 9.5 • O en el escritorio haga clic en el icono de la aplicación.

1.1 Descripción de la interfaz

Barra de Menú

Área de trabajo

Page 5: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 5

Menú Archivo (File):

• Nuevo (New): Permite crear un nuevo archivo de MapBasic. • Abrir (Open): Abre un archivo de MapBasic previamente guardado (*.MB) • Guardar (Save): Permite guardar los cambios realizados sobre un archivo de MapBasic. • Guardar Como (Save As): Permite guardar los cambios realizados sobre un archivo de

MapBasic. • Cerrar (Close): Cierra un archivo de MapBasic. • Cerrar todo (Close All): Cierra todos los archivos de MapBasic abiertos. • Revertir (Revert): Permite revertir todos los cambios realizados después de la última versión

guardada. Menú Edición (Edit):

• Deshacer (Undo): Permite deshacer la última acción realizada. • Cortar (Cut): Permite cortar un texto seleccionado. • Copiar (Copy): Permite copiar un texto seleccionado. • Pegar (Paste): Permite pegar el contenido (texto) que se encuentra en el portapapeles. • Limpiar (Clear): Borra todo el texto seleccionado. • Seleccionar todo (Select All): Permite seleccionar todo el contenido.

Menú Buscar (Search):

• Buscar (Find): Muestra un cuadro de diálogo para buscar el texto ingresado. • Buscar Siguiente (Find Again): Busca el siguiente resultado para el texto ingresado como

búsqueda. • Buscar y reemplazar (Replace and Find Again): Busca y reemplaza el texto ingresado por el

nuevo texto. • Ir a Línea (Go to Line): Permite ir a la línea indicada.

Menú Proyecto (Project):

• Compilar archivo (Compile current file): Permite compilar el archivo actual (*.MB) en formato ejecutable (*.MBX).

• Ejecutar (Run): Permite ejecutar el archivo (*.MBX) en MapInfo.

1.2 Compilar programas: Para crear un programa en MapBasic, necesitamos que por lo menos se tenga la siguiente estructura.

Código:

‘Declarar la estructura Declare Sub Main()

‘Primer procedimiento que se ejecuta cuando se inicia la aplicación Sub Main() Note “Hola Mundo” End Sub

Page 6: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 6

2. Fundamentos de programación en MB Expresiones: Una expresión es un conjunto de variables, constantes, llamada a funciones, referencias a tablas y operadores. Por ejemplo:

Código:

Declare Sub Main() Sub Main() Dim nombre as String ‘Expresion variable nombre = “Hola Olibert” ‘Llamado a función UCase Note UCase$(nombre) End Sub

2.1 Variables Una variable es un identificador que guarda el valor en un tipo de datos determinado. Podemos ejecutar operaciones de lectura y escritura sobre el valor que contiene. En MapBasic se declaran las variables de la siguiente manera: Dim [nom_identificador] as [Tipo_Dato] Donde [nom_identificador] es el nombre de la variable con el cual la identificaremos en el programa y [Tipo_Dato] es el tipo de dato para el valor almacenado por la variable. A continuación se describen los tipos de datos y la forma de asignación de los mismos.

2.2 Tipos de datos

Tipo Ejemplo de Asignación Notas

Integer i = 1073741824

SmallInt i = 16384

Float F = 4

tam = 3.36

resul = 3.4e9

String Nombre = “Olibert” Para agregar caracteres

especiales se puede usar la

función Chr$()

Page 7: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 7

Logical Visible = 1

Visible = TRUE

Se puede definir el valor lógico

de la siguiente manera 1 = True;

0 = false. Si se tiene el archivo

de definición se podría usar las

constantes TRUE, FALSE

Date Fecha_ped = 20100324

Fecha_ven = “3/24/10”

Fecha_pago = “03-24-10”

Ayer = Curdate() – 1

Alias Columna = “Total”

Tabla = “TabDistritos”

Dato exclusivo de MapInfo, es

utilizado para identificar el

nombre de un campo o tabla de

MapInfo

Pen StyleLinea = MakePen(1, 3, BLACK) Dato exclusivo de MapInfo, es

utilizado para almacenar un

estilo de línea.

Brush StyleRelleno = MakeBrush(5, BLUE,

WHITE)

Dato exclusivo de MapInfo, es

utilizado para almacenar un

estilo de Relleno.

Font StyleFuente = MakeFont(“Helv”, 1,

20,BLACK, WHITE)

Dato exclusivo de MapInfo, es

utilizado para almacenar un

estilo de fuente.

Symbol StylePunto = MakeSymbol(44, RED, 16) Dato exclusivo de MapInfo, es

utilizado para almacenar un

estilo Símbolo.

Object Myobj = CreateLine(73.2, 40, 73.6, 40.4) Dato exclusivo de MapInfo, es

utilizado para almacenar un

objeto (Punto, Línea, Región,

Polilínea, etc.)

2.3 Operadores Un operador actúa sobre una o más variables para producir un resultado. Los operadores se clasifican según el tipo de dato o valor que producen. Operadores Numéricos: Los operadores numéricos actúan sobre los valores numéricos para obtener un resultado. Los operadores numéricos son los siguientes:

Page 8: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 8

Operador Operación Ejemplo

+ Sumar X = A +B - Restar Y = A – B * Multiplicar Z = A * B / División X = A / B \ División entera Y = A \ B

Mod Residuo Z = A Mod B ^ Exponenciación X = A ^ B

Operadores Cadena: Los operadores de cadena trabajan sobre variables de este tipo para realizar operaciones de concatenación o de comparación. Los operadores de cadena son los siguientes:

Operador Operación Ejemplo

& (+) Concatenar NomCompleto = Apellidos & “, “ & nombres NomCompleto = Apellidos + “, “ + nombres

Like Evalua una cadena contra un determinado patrón. Devuelve un valor lógico Caracteres comodín: % : Representa cero o mas caracteres _ : Representa un carácter.

varIgual = nombre like “Ol_b%”

La diferencia entre el operador & (ampersand) y el operador + (plus) es que & obliga a que los tipos de datos sean cadena, sin embargo para que se ejecute correctamente debe ir separado de la variable a la cual concatena. El operador + puede concatenar una cadena sin embargo si es utilizado con dos variables de tipo numérico interpretaría que se está realizando una suma. Operadores de fechas: Los operadores sobre fechas permiten sumar o restar fechas de la siguiente manera:

Expresión Retorno

Date + Integer Retorna un tipo fecha con N días más, el número de días agregados está determinado por la variable entera.

Date – Integer Retorna un tipo fecha con N días menos, el número de días disminuidos está determinado por la variable entera.

Date – Date Retorna un valor entero, con la diferencia de días entre ambas fechas. Operadores de comparación: Los operadores de comparación evalúan dos valores y retornan valores lógicos.

Operador Retorna verdadero cuando: Ejemplo

= Iguales IF A = B THEN <> Diferentes IF A <> B THEN < Menor IF A < B THEN

Page 9: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 9

> Mayor IF A > B THEN <= Menor igual IF A <= B THEN >= Mayor igual IF A >= B THEN Between… And … Dentro del rango IF A Between 1 And 100 THEN

Operadores lógicos: Los operadores lógicos evalúan valores lógicos y retornan como resultado un nuevo valor lógico TRUE o FALSE.

Operador Retorna Verdadero cuando: Ejemplo

AND Ambas expresiones son verdaderas IF A AND B THEN OR Una de las expresiones o ambas son

verdaderas IF A OR B THEN

NOT Niega la expresión, si es IF NOT A THEN Operadores Geográficos: Estos operadores son exclusivos de MapInfo y operan sobre expresiones de tipo objeto, retornando un valor lógico.

Operador Retorna Verdadero cuando: Ejemplo

CONTAINS Primer objeto contiene el centroide del segundo objeto.

IF A CONTAINS B THEN

CONTAINS PART Primer objeto contiene parte del segundo objeto.

IF A CONTAINS PART B THEN

CONTAINS ENTIRE

Primer objeto contiene totalmente al segundo objeto.

IF A CONTAIN ENTIRE B THEN

WITHIN El centroide del primer objeto esta dentro del segundo objeto

IF A WITHIN B THEN

PARTLY WITHIN El primer objeto está parcialmente dentro del segundo objeto.

IF A PARTLY WITHIN B THEN

ENTIRELY WITHIN

El primer objeto está enteramente dentro del segundo objeto.

IF A ENTIRELY WITHIN B THEN

INTERSECTS Los dos objetos se intersecan en algún punto.

IF A INTERSECTS B THEN

2.4 Controles de flujo y bucles Las sentencias de control de flujo afectan el orden en que se ejecutan las operaciones dentro de la lógica de un programa, se dividen en: If … then … else Así como en otros lenguajes de programación la sentencia IF… evalúa una condición que de ser verdadera ejecuta lo que se encuentra dentro del bloque THEN, caso contrario si la condición es falsa ejecuta lo que se encuentra dentro del bloque ELSE. Sintaxis: IF <expression>THEN

Page 10: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 10

<Bloque de instrucciones si es verdadero> ELSE

<Bloque de instrucciones si es falso> END IF Ejemplo:

Código:

Declare Sub Main() Sub Main() Dim nombre as String ‘Expresion variable nombre = “Olibert” ‘Evalua la condición IF nombre = “Olibert” THEN ‘se ejecuta si es verdadero NOTE “Bienvenido al sistema” ELSE ‘se ejecuta si es falso NOTE “Usuario desconocido” END IF End Sub

Do Case Ejecuta uno de varios grupos de instrucciones según el valor de una expresión determinada. Sintaxis: DO CASE <expression> CASE <valor1> <Bloque de instrucciones si expression es igual a valor1> CASE <valor2> <Bloque de instrucciones si expression es igual a valor1> CASE ELSE <Bloque de instrucciones si expression no ingreso en ningún caso> END CASE Ejemplo:

Código:

Declare Sub Main() Sub Main()

Page 11: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 11

Dim Cantidad as Integer ‘Expresion variable Cantidad = 10 ‘Evalua la condición DO CASE Cantidad CASE Cantidad < 10 NOTE “La cantidad es menor que 10” CASE 10 NOTE “La cantidad es igual a 10” CASE ELSE NOTE “La cantidad es mayor a 10” END CASE End Sub

For … Next Repite una instrucción o bloque de código un determinado número de veces. Sintaxis: FOR <valor_inicial> TO <valor_final> <Bloque de instrucciones> NEXT Ejemplo:

Código:

Declare Sub Main() Sub Main() Dim contador as Integer Dim fin as Integer ‘Establecer el valor final fin = 10 ‘Evalua la condición FOR contador = 1 TO fin Print “Ejecucion “ + contador NEXT End Sub

Do … Loop Repite una instrucción o bloque de código mientras la condición que evalúa sea verdadera.

Page 12: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 12

Sintaxis: Forma 1: DO WHILE <Condición> <Bloque de instrucciones> LOOP Forma 2: DO <Bloque de instrucciones> LOOP WHILE <Condición> Ejemplo:

Código:

Declare Sub Main() Sub Main() Dim seguir as Logical DO ‘Ingresa una vez y pregunta para continuar seguir = ASK(“Seguro que desea continuar?”, “Sí”, “No”) PRINT CURTIME() LOOP WHILE seguir ‘Se repite siempre que sea verdadero End Sub

Declare Sub Main() Sub Main() Dim seguir as Logical ‘Se pregunta antes de entrar al bucle seguir = ASK(“Seguro que desea continuar?”, “Sí”, “No”) DO WHILE seguir ‘Entra solo cuando seguir es verdadero seguir = ASK(“Seguro que desea continuar?”, “Sí”, “No”) PRINT CURTIME() LOOP End Sub

2.5 Procedimientos Sub y Function Los procedimientos y funciones nos ayudan a ordenar, estructurar y reutilizar una porción de código. Según su comportamiento se pueden clasificar en Procedimientos Sub y Function. Se diferencian uno

Page 13: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 13

del otro en que los procedimientos Sub realizan un conjunto de rutinas sin retornar ningún tipo de valor tras su ejecución, caso contrario los procedimientos Function si retornan un valor en un determinado tipo de dato. Sintaxis: SUB <NombreProcedimiento> ([<Parametros>])

<Bloque de instrucciones> END SUB FUNCTION <NombreFuncion> ([<Parametros>]) AS <TipoDato_Retorno>

<Bloque de instrucciones> END FUNCTION Ejemplo:

Código:

Declare Sub Main() Sub Main() Dim num1 as Integer Dim num2 as Integer Dim resul as Integer resul = Sumar(num1, num2) Mostrar_Resultado(resul) End Sub Sub Mostrar_Resultado(cad as String) NOTE cad End Sub Function Sumar(n1 as Integer, n2 as Integer) Sumar = n1 + n2 End Function

Los parámetros son opcionales, si no se especifica su ámbito por defecto todos los parámetros se pasan por referencia, si se desea que un parámetros se pase por valor se debe indicar la palabra clave BYVAL antes del parámetro. Ejemplo:

Código:

Declare Sub Main() Sub Main() Dim cadena as String cadena = “Valor” Cambiar_Mostrar_Resultado(resul)

Page 14: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 14

NOTE cadena End Sub Sub Cambiar_Mostrar_Resultado (ByVal cad as String) cad = cad & “ Cambio” NOTE cad End Sub

3. Creación de interfaces en MapBasic Menús Un menú nos permite brindar al usuario una lista de opciones a escoger. Un menú está conformado por ítems a la vez un menú puede ser parte de otro menú (Sub-Menú), a continuación se muestra los menús, submenús e ítems.

3.1 Gestión de Menús A continuación se muestran las sintaxis para realizar operaciones básicas sobre los menús:

Operación Sintaxis

Crear menú Create Menu nuevo_menu [ ID menu_id ] As

item [ ID menu_item_id ]

{Calling handler}

[ , menuitem ... ]

Redefinir la barra de menú Alter Menu Bar { Add | Remove }

{ menuname | ID menu_id }

[ , { menuname | ID menu_id } ... ]

Agregar ítems a un menú Alter Menu {menuname | ID menu_id }

Add menudef [, menudef...]

1. Barra de Menú

2. Items

3. Sub Menú

Page 15: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 15

Quitar ítems de un menú Alter Menu {menuname | ID menu_id }

Remove {handler | submenuname | ID menu_item_id }

[, {handler | submenuname | ID menu_item_id}...]

Ejemplo:

Código:

Declare Sub Main() Declare Crear_Menu() Sub Main() ‘Llama al procedimiento crear Menu Crear_Menu End Sub Sub Crear_Menu() ‘Crea un menú llamado archivo con tres opciones y un separador CREATE MENU “Archivo” AS “&Nuevo” Calling opt_nuevo, “&Abrir” Calling opt_abrir, “(-”, “&Salir” Calling opt_salir ALTER MENU BAR ADD “Archivo” End Sub

Declare Sub Main() Sub Main() ‘Quita el menú que acabamos de agregar de la barra de menú ALTER MENU BAR REMOVE “Archivo” End Sub

Barras de herramienta: Una barra de herramientas es una ventana flotante o fija que contiene botones, los cuales podemos programar para ejecutar algunas acciones. Los tipos de botones que se pueden agregar son tres: PushButton: Este tipo de botón lanza una acción a penas se pulse sobre él no se queda presionado luego de que el usuario termine de hacer clic. ToggleButton: Este tipo de botón maneja dos estados (Checked, Unchecked) un ejemplo de uso de este botón podría ser para mostrar u ocultar una ventana.

Page 16: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 16

ToolButton: Este tipo de botón no ejecuta ninguna acción de inmediato sino cuando se hace clic sobre una ventana de mapa, listado, presentación, etc. Un ejemplo de este botón son las herramientas de dibujo.

3.2 Gestión de barra de herramientas: A continuación se muestran las sintaxis para realizar operaciones sobre las barras de herramientas:

Operación Sintaxis

Crear una barra de herramientas Create ButtonPad {title_string | ID pad_num } As

button_definition [ button_definition ... ]

[ Title title_string ]

[ Width w ]

[ Position ( x, y ) [ Units unit_name ] ]

[ ToolbarPosition ( row, column ) ]

[ { Show | Hide } ]

[ { Fixed | Float } ]

Modificar una barra de herramientas

Alter ButtonPad { current_title | ID pad_num }

[ Add button_definition [ button_definition ... ] ]

[ Remove { handler_num | ID button_id } [ , ... ] ]

[ Title new_title ]

[ Width w ]

[ Position ( x, y ) [ Units unit_name ] ]

[ ToolbarPosition ( row, column ) ]

[ { Show | Hide } ]

[ { Fixed | Float } ]

[ Destroy ]

Modificar un botón Alter Button { handler | ID button_id }

[ { Enable | Disable } ]

[ { Check | Uncheck } ]

Definir un botón { PushButton | ToggleButton | ToolButton }

Calling { procedure | menu_code | OLE methodname | DDE server, topic }

[ ID button_id ]

[ Icon n [ File file_spec ] ]

[ Cursor n [ File file_spec ] ]

[ DrawMode dm_code ]

Page 17: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 17

[ HelpMsg msg ]

[ ModifierKeys { On | Off } ]

[ Enable ] [ Disable ]

[ Check ] [ Uncheck ]

MapInfo reserva números de Id para algunas de sus barras de herramientas estándar.

ID Barra de herramientas

1 Principal (Main)

2 Dibujo (Drawing)

3 Herramientas (Tools)

4 Éstandar (Standard)

5 ODBC

3.3 Función CommandInfo() Esta función se utiliza dentro de un procedimiento que haya sido invocado por un ToolButton para poder capturar información de por ejemplo las coordenadas donde el usuario ha hecho clic. Sintaxis: CommandInfo (Atributo) Atributo: Para el caso de los ToolButton los valores posibles para atributo son los siguientes

Atributo Valor que retorna

CMD_INFO_X Cuando se hace clic sobre una ventana de mapa retorna la coordenada X del lugar donde se hizo clic.

Cuando se hace clic sobre una ventana de listado retorna el índice de la columna correspondiente a la celda donde se hizo clic.

Cuando se hace clic sobre una ventana de presentación retorna la distancia entre el margen izquierdo y el lugar donde se hizo el clic.

CMD_INFO_Y Cuando se hace clic sobre una ventana de mapa retorna la coordenada Y del lugar donde se hizo clic.

Cuando se hace clic sobre una ventana de listado retorna el índice de la fila correspondiente a la celda donde se hizo clic.

Cuando se hace clic sobre una ventana de presentación retorna la distancia entre el margen superior y el lugar donde se hizo clic.

Page 18: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 18

CMD_INFO_X2 Retorna la Coordenada X cuando se suelta el botón del mouse y se aplica solo cuando se utiliza la forma de dibujo para línea. DM_CUSTOM_LINE.

CMD_INFO_Y2 Retorna la Coordenada Y cuando se suelta el botón del mouse y se aplica solo cuando DRAWMODE es DM_CUSTOM_LINE.

CMD_INFO_SHIFT Retorna un valor lógico TRUE si el usuario tiene presionado el botón SHIFT mientras se usa la herramienta.

CMD_INFO_CTRL Retorna un valor lógico FALSE si el usuario tiene presionado el botón CTRL mientras se usa la herramienta.

CMD_INFO_TOOLBTN Retorna un entero con el ID del botón al que se hace clic.

CMD_INFO_CUSTOM_OBJ Retorna un objeto: Polilínea o polígono. Y se aplica solo cuando DRAWMODE es DM_CUSTOM_POLYLINE o DM_CUSTOM_POLYGON

Ejemplo:

Código:

‘Este ejemplo crea una barra de herramientas con dos botones PushButton un separador y luego un botón ToogleButton ‘Hacemos referencia a los archivos .DEF de iconos y generales de MapBasic Include “icons.def” Include “mapbasic.def” ‘Declaración de los prototipos Declare Sub Main() Declare Sub Crear_BarraPush() Declare Sub opt_primero() Declare Sub opt_segundo() Declare Sub opt_tercero() Dim flg_Activo as Logical Sub Main() ‘Llama al procedimiento crear BarraPush Call Crear_BarraPush End Sub Sub Crear_BarraPush() ‘Crea una barra de herramientas CREATE BUTTONPAD “Utilidades” AS ‘Primer botón PushButton

Page 19: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 19

ID 1001 Icon MI_ICON_RUN Calling opt_primero HelpMsg “Ejecutar primera opción” Disable ‘Segundo botón PushButton ID 1002 Icon MI_ICON_CLIP_REGION Calling opt_segundo HelpMsg “Ejecutar segunda opción” Disable ‘Separador Separator ‘Tercer botón ToogleButton ID 1003 Icon MI_ICON_HELP Calling opt_tercero HelpMsg “Muestra/Oculta los primeros botones” UnCkeck End Sub Sub opt_primero() End Sub Sub opt_segundo() End Sub Sub opt_tercero() IF flg_Activo THEN ‘Habilita y deshabilita los botones por su ID ALTER BUTTON ID 1001 Disable ALTER BUTTON ID 1002 Disable ALTER BUTTON ID 1003 Check ELSE ‘Habilita y deshabilita los botones por su ID ALTER BUTTON ID 1001 Enable ALTER BUTTON ID 1002 Enable ALTER BUTTON ID 1002 UnCheck End Sub

‘Este ejemplo crea una barra de herramientas 3 botones ToolButton el primero muestra la coordenada donde hace clic, el segundo envía las coordenadas inicial y final donde hizo clic y el tercero envía un conjunto de coordenadas por donde ha pasado. ‘Hacemos referencia a los archivos .DEF de iconos y generales de MapBasic Include “icons.def” Include “mapbasic.def” ‘Declaración de los prototipos Declare Sub Main() Declare Sub Crear_BarraPush() Declare Sub opt_primero() Declare Sub opt_segundo() Declare Sub opt_tercero()

Page 20: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 20

Sub Main() ‘Llama al procedimiento crear BarraPush Call Crear_BarraTool End Sub Sub Crear_BarraTool() ‘Crea una barra de herramientas CREATE BUTTONPAD “Tools Custom” AS ‘Primer botón ToolButton ID 1001 Icon MI_ICON_SYMBOL DRAWMODE DM_CUSTOM_POINT CURSOR MI_CURSOR_CROSSHAIR Calling opt_primero HelpMsg “Ejecutar primera opción” ‘Segundo botón ToolButton ID 1002 Icon MI_ICON_LINE DRAWMODE DM_CUSTOM_LINE CURSOR MI_CURSOR_CROSSHAIR Calling opt_segundo HelpMsg “Ejecutar segunda opción” ‘Tercer botón ToolButton ID 1002 Icon MI_ICON_POLYLINE DRAWMODE DM_CUSTOM_POLYLINE CURSOR MI_CURSOR_CROSSHAIR Calling opt_tercero HelpMsg “Ejecutar segunda opción” End Sub Sub opt_primero() ‘Validar de que se haya hecho clic en una ventana de mapa IF WindowInfo(FrontWindow(), WIN_INFO_TYPE) <> WIN_MAPPER THEN NOTE “Debe hacer clic sobre una ventana de mapa” ELSE Dim x1 as Float Dim y1 as Float x1 = CommandInfo(CMD_INFO_X) y1 = CommandInfo(CMD_INFO_Y) NOTE “Coordenas (X,Y) ” & x1 & y1 END IF End Sub Sub opt_segundo() ‘Validar de que se haya hecho clic en una ventana de mapa IF WindowInfo(FrontWindow(), WIN_INFO_TYPE) <> WIN_MAPPER THEN

Page 21: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 21

NOTE “Debe hacer clic sobre una ventana de mapa” ELSE Dim x1 as Float Dim y1 as Float Dim x2 as Float Dim y2 as Float x1 = CommandInfo(CMD_INFO_X) y1 = CommandInfo(CMD_INFO_Y) x2 = CommandInfo(CMD_INFO_X2) y2 = CommandInfo(CMD_INFO_Y2) NOTE “Coordenadas 1 (X,Y) ” & x1 & “-” & y1 & “ Coordenadas 2 (X,Y) ” & x2 & “ - ” & y2 END IF End Sub Sub opt_tercero() ‘Validar de que se haya hecho clic en una ventana de mapa IF WindowInfo(FrontWindow(), WIN_INFO_TYPE) <> WIN_MAPPER THEN NOTE “Debe hacer clic sobre una ventana de mapa” ELSE Dim newobj as Object newobj = CommandInfo(CMD_INFO_CUSTOM_OBJ) END IF End Sub

3.4 Cuadros de dialogo Los cuadros de dialogo permiten al usuario interactuar con la aplicación. Con la finalidad te tomar los datos ingresados para luego ejecutar su lógica y mostrar el resultado. Diálogos estándar NOTE. Muestra un mensaje con el texto indicado. Sintaxis: NOTE <texto>

ASK(). Muestra un mensaje con dos botones, un botón aceptar y otro cancelar. Se utiliza mayormente cuando se quiere preguntar al usuario si se va a ejecutar o cancelar una acción.

Page 22: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 22

Sintaxis: ASK(“Texto mensaje”, “Texto Aceptar”, “Texto Cancelar”)

Como resultado después de su ejecución retorna un tipo lógico verdadero si se hizo clic en el botón correspondiente a Aceptar caso contrario retorna falso. FILEOPENDLG() y FILESAVEASDLG(). Muestra una ventana de dialogo para abrir o guardar un archivo. Sintaxis: FileOpenDlg(ruta_directorio, nombre_archivo, tipo_archivo, titulo) FileSaveAsDlg(ruta_directorio, nombre_archivo, tipo_archivo, titulo) Ruta_directorio: Ruta del directorio donde se inicia por defecto. Nombre_archivo: Nombre del archivo sugerido para buscar o guardar. Tipo_archivo: Tipo del archivo a abrir. Ver cuadro tipos de archivo. Titulo: Titulo del cuadro de diálogo. Tipos de archivo:

Parametro Tipo_archivo Tipo de archivo

“TAB” Tabla de MapInfo

“WOR” Espacio de trabajo de MapInfo

“MIF” Formato de MapInfo en modo texto

“DBF” Archivo dBase o compatible

“XLS” Archivo de Microsoft Excel

“TXT” Archivos de texto

Diálogos personalizados Los cuadros de dialogo personalizados permiten crear interfaces a medida. Para ello MapBasic cuenta con una serie de controles para ingreso, selección entre otras.

Page 23: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 23

Sintaxis: Dialog [Title title ] [Width w ] [Height h ] [Position x, y ] [Calling handler] Control control_clause [Control control_clause...] La clausula Control sirve para indicar los controles que se va a agregar a la ventana de dialogo. Cada control a la vez puede guardar su valor en una variable para luego procesarla al momento de ejecutar el comando Aceptar (OK). Los controles que se pueden agregar son los siguientes: StaticText. Crea un control etiqueta no editable, es decir, no permite el ingreso de datos. EditText. Crea un control cuadro de texto editable, permite el ingreso de datos por teclado. CheckBox. Crea un control casilla de verificación. GroupBox. Crea un control marco con posibilidad de poner un titulo en la parte superior. Este control es utilizado para contener controles dentro y ordenarlos de forma coherente. RadioGroup. Crea un contenedor de controles radio para seleccionar uno a la vez. ListBox. Crea un control cuadro de lista para seleccionar un elemento de una lista de opciones. MultiListBox. Crea un control cuadro de lista para seleccionar uno o varios elementos de una lista de opciones. PopupMenu. Crea un control cuadro combinado (combo) con una lista desplegable de opciones para que el usuario seleccione solo una. Button. Crea un control botón de comando. OKButton. Crea un control botón de comando con función predeterminada. Se ejecuta cuando el usuario presiona ENTER en cualquier otro control y luego cierra la ventana de dialogo. CancelButton. Crea un control botón de comando con función predeterminada. Se ejecuta cuando el usuario presiona ESC en cualquier otro control y luego cierra la ventana. Pickers. Crea controles de selección de estilos, los controles Pickers pueden ser para seleccionar los estilos de: Símbolo, línea, relleno y fuente.

Código:

‘Este ejemplo crea un cuadro de dialogo usando cada tipo de control. ‘Declaración de los prototipos Declare Sub Main() Declare Sub Crear_Dialogo() Declare Sub ok_sub() Declare Sub reset_sub()

Page 24: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 24

Sub Main() ‘Llama al procedimiento crear Dialogo Call Crear_Dialogo End Sub Sub Crear_Dialogo() ‘Variables para almacenar los resultados Dim titulo as String Dim i_detalle as String Dim sym_var as Symbol Dim i_cuarter as Integer Dim i_alcance as Integer Dim l_mostrarleyenda as Logical ‘Crea una barra de herramientas DIALOG TITLE “Selecciones” ‘StaticText (etiqueta) Control StaticText Title "Ingrese el título:" Position 5, 10 ‘EditText (cuadro de texto) Control EditText Value "Nuevo mapa" Into titulo ID 1 Position 65, 8 Width 90 ‘GroupBox(Marco) Control GroupBox Title "Nivel de detalle" Position 5, 30 Width 70 Height 40 ‘RadioGroup(Opciones radio) Control RadioGroup Title "&Detalles completos;&Detalles parciales" Value 2 Into i_detalle ID 2 Position 12, 42 Width 60 ‘SymbolPicker(Selecionar estilo de Símbolo) Control SymbolPicker Position 95, 45 Into sym_var ID 3 ‘ListBox(Cuadro de lista simple) Control ListBox Title "1er Qrtr;2do Qrtr;3er Qrtr;4to Qrtr" Value 4 Into i_cuarter ID 4 Position 5, 90 Width 65 Height 35 ‘MultiListBox(Cuadro de lista múltiple) Control MultiListBox Title "Streets;Highways;Towns;Counties;States" Value 3 ID 5 Position 95, 90 Width 65 Height 35 ‘PopupMenu(Cuadro combinado)

Page 25: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 25

Control PopupMenu Title "Town;County;Territory;Entire state" Value 2 Into i_alcance ID 6 Position 5, 140 ‘CheckBox(Casilla de verificación) Control CheckBox Title "Incluir &Legend" Into l_mostrarleyenda ID 7 Position 95, 140 ‘Button(Botón de comando) Control Button Title "&Limpiar" Calling reset_sub Position 10, 165 ‘OKButton(Botón de comando OK) Control OKButton Position 65, 165 Calling ok_sub ‘CancelButton(Botón de comando Cancelar) Control CancelButton Position 120, 165 End Sub Sub ok_sub() End Sub Sub reset_sub() End Sub

4. Trabajo con tablas: Las tablas de MapInfo Professional se diferencian de otro tipo de tabla que normalmente vemos en DBMS en que estas tablas no solo tienen filas y columnas con datos planos sino que además contienen columnas que pueden almacenar objetos geométricos y pueden realizar operaciones espaciales y geométricas sobre estas columnas.

4.1 Sentencia Create Table Permite crear una nueva tabla en MapInfo Professional para ello debemos indicar el formato que tendrá además de las columnas y sus tipos de datos. Sintaxis: Create Table table ( column columntype [ , ... ] ) | Using from_table } [ File filespec ]

Page 26: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 26

[ { Type NATIVE | Type DBF [ CharSet char_set ] | Type { Access | ODBC } database_filespec [ Version version ] Table tablename [ Password pwd ] [ CharSet char_set ] } ] [ Version version ]

4.2 Sentencia Alter Table Permite alterar la estructura de una tabla de MapInfo Professional, se pueden agregar nuevas columnas, quitar columnas creadas y/o reordenar la ubicación de las columnas. Sintaxis: Alter Table table ( [ Add columnname columntype [, ...] ] [ Modify columnname columntype [, ...] ] [ Drop columnname [, ...] ] [ Rename oldcolumnname newcolumnname [, ...] ] [ Order columnname, columnname [,...] ] ) [ Interactive ]

4.3 Sentencia Create Map Una vez creada la estructura de una tabla en MapInfo Professional, si queremos almacenar datos en esta tabla debemos hacerla representable Create Map permite hacer una tabla plana representable brindando así la posibilidad de poder agregarla a una ventana de mapa. Sintaxis: Create Map For table [ CoordSys... ] Using from_table]

4.4 Sentencia Pack Table Parte del mantenimiento que se realiza sobre una tabla incluye el empaquetado de las tablas que no es más que limpiar la tabla de registros u objetos que han sido eliminados y han dejado residuos de su creación. Pack Table permite empaquetar la tabla eliminando esos residuos y disminuyendo su tamaño en disco. Sintaxis: Pack Table table { Graphic | Data | Graphic Data } [ Interactive ]

4.5 Función TableInfo Permite obtener información acerca del estado, características y/o propiedades de una tabla Sintaxis: TableInfo(table_id, atributo)

Page 27: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 27

Atributo Valor que retorna

TAB_INFO_COORDSYS_CLAUSE Retorna una cadena indicando el Sistema de coordenadas en el formato de la clausula CoordSys. Por ejemplo: “CoordSys Earth Projection 1, 0"

TAB_INFO_EDITED Retorna TRUE si la tabla tiene cambios pendientes de guardar.

TAB_INFO_MAPPABLE Retorna TRUE si la tabla es representable.

TAB_INFO_NAME Retorna una cadena indicando el nombre de la tabla.

TAB_INFO_NCOLS Retorna el número de columnas que tiene la tabla.

TAB_INFO_NROWS Retorna el número de filas que tiene la tabla.

TAB_INFO_READONLY Retorna verdadero si la tabla es de solo lectura.

TAB_INFO_TABFILE Retorna la ruta del archivo .TAB de la tabla evaluada.

TAB_INFO_TEMP Retorna TRUE si se trata de una tabla temporal, por ejemplo una consulta Query1.

4.6 Función NumTables Devuelve el número de tablas que están abiertas en la sesión de MapInfo Professional. Sintaxis: NumTables()

4.7 Sentencia Open Table Permite abrir una tabla de MapInfo que se encuentra en disco. Sintaxis: Open Table filename [ As tablename ] [ Hide ] [ ReadOnly ] [ Interactive ] [ Password pwd ] [ NoIndex ] [ View Automatic ] [ DenyWrite ] [ VMGrid | VMRaster | VMDefault ]

4.8 Sentencia Commit Table, Rollback Table La sentencia Commit Table permite guardar los cambios de una tabla editada. Por otro lado la sentencia RollBack Table permite deshacer los cambios de una tabla editada. Sintaxis: Commit Table tablename [ As filespec] [Interactive] Rollback Table tablename

Page 28: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 28

Tablename; es el nombre de la tabla (alias en MapInfo) Leer y escribir en los registros de una tabla Muchas de las operaciones comunes que se realizan sobre las tablas incluyen la edición de sus datos para esto MapInfo Professional brinda accesos a sus datos por medio de cursores. Para aplicar estas operaciones se utiliza la sentencia FETCH. Sintaxis: Fetch {First | Last | Next | Prev | Rec n} From table n; Es el índice del registro al cual se mueve el cursor. table; El nombre de la tabla en la cual se efectúa el movimiento del cursor.

4.9 Tablas especiales MapInfo Professional utiliza tablas especiales que son creadas y gestionadas por la misma aplicación para guardar información adicional. Estas tablas son: Selection; Tabla que se crea por defecto cada vez que se hace una consulta y no se especifica la tabla resultado. Cosmetic; Esta tabla se crea cada vez que se genera una ventana de mapa. Y su nombre va cambiando de manera correlativa cada vez que se crea una nueva ventana de mapa. Layout; Esta tabla se crea cada vez que se genera una ventana de presentación. Al igual que la tabla Cosmetic su nombre va cambiando de manera correlativa cuando se crea una nueva ventana de presentación. Columna OBJ La columna OBJ es una columna no visible para el usuario pero si se pueden realizar lectura, escritura y cálculos sobre esta columna. Sentencia Create Point, Line, Region, Pline Estas sentencias permiten crear objetos de tipo Punto, línea, región y Polilínea y pueden ser almacenados en una variable de tipo objeto.

4.10 Función ObjectInfo Permite tomar información acerca de una variable de tipo objeto. Sintaxis: ObjectInfo( object, attribute )

Atributo Valor que retorna

OBJ_INFO_TYPE (1) Retorna el tipo de objeto que contiene la variable. Ver la tabla de tipos de objeto.

OBJ_INFO_PEN (2) Retorna el estilo de línea del objeto.

Page 29: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 29

OBJ_INFO_BRUSH (3) Retorna el estilo de relleno del objeto.

OBJ_INFO_TEXTFONT (2) Retorna el estilo de fuente del objeto.

OBJ_INFO_SYMBOL (2) Retorna el estilo de símbolo del objeto.

OBJ_INFO_NPNTS (20) Retorna un entero con el número de nodos que tiene la Polilínea o región.

OBJ_INFO_NPOLYGONS (21) Retorna el número de polígonos que tiene el objeto región. O numero de secciones que tiene el objeto Polilínea.

OBJ_INFO_NPOLYGONS+N (21) Retorna el numero de nodos que tiene el polígono N de la región, o el sector N en caso sea una Polilínea.

Constantes para OBJ_INFO_TYPE

Descripción

OBJ_TYPE_ARC Objeto arco.

OBJ_TYPE_ELLIPSE Objeto tipo circulo o elipse.

OBJ_TYPE_LINE Objeto tipo línea.

OBJ_TYPE_PLINE Objeto tipo polilinea.

OBJ_TYPE_POINT Objeto tipo punto.

OBJ_TYPE_FRAME Objeto tipo marco (usado en la ventana de presentación)

OBJ_TYPE_REGION Objeto tipo región poligonal.

OBJ_TYPE_RECT Objeto tipo rectangular.

OBJ_TYPE_ROUNDRECT Objeto tipo rectangular con bordes redondeados.

OBJ_TYPE_TEXT Objeto tipo texto.

5. Trabajo con Ventanas MapInfo Professional puede trabajar con diferentes tipos de ventana para visualizar información tanto tabular como geográfica entre otras. Ventana de Mapa La ventana de Mapa es sobre la cual se administran las capas en MapInfo Professional, para trabajar con estas ventanas MapBasic proporciona una serie de funciones y sentencias que permiten realizar operaciones sobre esta.

Page 30: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 30

5.1 Sentencia Map Permite crear una nueva ventana de mapa con las capas, dimensiones y posición indicada en sus parámetros. Sintaxis: Map From table [ , table ... ] [ Position ( x, y ) [ Units paperunits ] ] [ Width window_width [ Units paperunits ] ] [ Height window_height [ Units paperunits ] ] [ { Min | Max } ] Ejemplo:

Código:

‘Este ejemplo crea una nueva ventana de mapa con las tablas Distritos, Manzanas y Clientes Map From Distritos, Manzanas, Clientes

5.2 Función WindowID Retorna el ID de la ventana. Sintaxis: WindowID (window_num)

5.3 Función FrontWindow Retorna el ID de la ventana que se encuentra al frente de todas las demás. Sintaxis: FrontWindow()

5.4 Función NumWindows, NumAllWindows NumWindows; Devuelve el número de documentos (ventana de mapa, listado, grafico y presentación) que se encuentras abiertas en la sesión de MapInfo Professional. Y NumAllWindows retorna todas las ventanas (documentos y flotantes) que se encuentran abiertas en la sesión de MapInfo Professional. Sintaxis: NumWindows() NumAllWindows()

Page 31: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 31

5.5 Función WindowInfo Permite tomar información sobre el estado de las ventanas. Sintaxis: WindowInfo(window_id, atributo) window_id; Identificador de la ventana. Atributo; valor constante con la propiedad a consultar de la ventana indicada en window_id. Algunos valores posibles para el parámetro atributo son las siguientes:

Atributo Valor que retorna

WIN_INFO_CLONEWINDOW (15)

Retorna una cadena con la sentencia necesaria para crear una ventana clonada a partir de la ventana consultada.

WIN_INFO_NAME (1) Retorna el nombre de la ventana.

WIN_INFO_STATE (9) Retorna el estado de una ventana puede ser:

WIN_STATE_NORMAL; ventana en tamaño normal.

WIN_STATE_MINIMIZED; ventana minimizada.

WIN_STATE_MAXIMIZED; ventana maximizada.

WIN_INFO_TABLE (10) Retorna una cadena con el nombre de la tabla que se crea por defecto en la ventana. Según el tipo de ventana puede retornar los siguientes valores.

Ventana de Mapa: Retorna la tabla CosmeticN

Ventana de Presentación: Retorna la tabla LayoutN

Ventana de listado: Retorna el nombre de la tabla que esta visualizando

WIN_INFO_TYPE (3) Retorna un entero con el tipo de ventana que se visualiza. Vea la tabla de tipos de ventana y sus constantes.

Tipo de ventana Descripcion

WIN_MAPPER Ventana de mapa.

WIN_BROWSER Ventana de listado.

WIN_LAYOUT Ventana de presentación

WIN_GRAPH Ventana de grafico.

WIN_MAPBASIC Ventana de MapBasic

WIN_MESSAGE Ventana de mensaje

Page 32: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 32

WIN_INFO Ventana de información

WIN_LEGEND Ventana de leyenda temática

WIN_STATISTICS Ventana de estadísticas

Ejemplo:

Código:

‘Este ejemplo clona una ventana de mapa actual Run Command WindowInfo(FrontWindow(), 15)

‘Este ejemplo devuelve el nombre de la tabla que contiene la ventana actual. Dim nameTable as String Dim idVentana as Integer idVentana = FrontWindow() nameTable = WindowInfo(idVentana, 10) Note NameTable

5.6 Sentencia Set Map Establece las características de la ventana de mapa como por ejemplo dimensiones, zoom, centro y capas a visualizar. Sintaxis: Set Map [ Window window_id ] [ Center ( longitude, latitude ) [ Smart Redraw ] ] [ Clipping { Object clipper | Off | On } | Using [Display { All | PolyObj } | Overlay ] } ]] [ Zoom { zoom_distance [ Units dist_unit ] | Entire [ Layer layer_id ] } ] [ Preserve { Scale | Zoom } ] [ Display { Scale | Position | Zoom } ] [ Order layer_id, layer_id [ , layer_id ... ] ] [ Pan pan_distance [ Units dist_unit ] { North | South | East | West } [ Smart Redraw ] ] [ CoordSys... ] [ Area Units area_unit ] [ Distance Units dist_unit ] [ Distance Type { Spherical | Cartesian } ] [ XY Units xy_unit ] [ Display Decimal { On | Off | [ Display Grid ] [ Scale screen_dist [ Units dist_unit ] For map_dist [ Units dist_unit ] ] [ Redraw { On | Off } ]

Page 33: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 33

{ Image Reprojection { None | Always | Auto } ] [ Image Resampling { CubicConvolution | NearestNeighbor } ] [ Relief { On | Off } ] [ Move Nodes { value | Default } ] [ LAYERCLAUSE LAYERCLAUSE ... ] Ejemplo:

Código:

‘Este ejemplo establece la ventana de Mapa Actual en 1.5 km de zoom y la centra en las ‘coordenadas -76.91 y -12.23 Set Map Zoom 1.5 Units "km" Center (-76.91, -12.23)

‘Este ejemplo hace no visible la capa con índice 2 Set Map Layer 2 Display Off

‘Este ejemplo hace no seleccionable la capa con índice 1 Set Map Layer 1 Selectable Off

‘Este ejemplo establece el sistema de coordenadas para la ventana actual en Latitud Longitud ‘WGS 84 Set Map CoordSys Earth Projection 1, 104

5.7 Agregar y quitar capas Add Map Layer Permite agregar una capa a la ventana de mapa indicada. Sintaxis: Add Map [ Window window_id ] [ Auto ] Layer table [ , table ... ] [ Animate ] Remove Map Layer Permite quitar una capa de la ventana de mapa indicada. Sintaxis: Remove Map [ Window window_id ] Layer map_layer [ , map_layer ... ] [ Interactive ] Ejemplos:

Código:

‘Este ejemplo agrega al mapa actual las capas de distritos y manzanas

Page 34: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 34

Add Map Window FrontWindow() Layer Distritos, Manzanas

‘Este ejemplo quita las tablas agregadas recientemente Remove Map Window FrontWindow() Layer Distritos, Manzanas

5.8 Búsqueda y localización de objetos Para buscar un registro en una tabla podemos usar las consultas SQL Select que nos brinda MapInfo Professional, sin embargo una vez encontrado un registro necesitamos que la ventana de mapa nos indique donde se encuentra dicho objeto. Ejemplos:

Código:

‘Este ejemplo selecciona un objeto y cambia la vista del mapa actual hasta el punto en que ‘podemos visualizar el objeto. SELECT * FROM Distritos WHERE IdDistrito=23 Run Menu Command 312

‘Si se desea buscar en todas las ventanas de mapa se ejecutaría el siguiente comando. Run Menu Command 306

6. Ventana de Presentación: La ventana de presentación nos permite diseñar una plantilla con objetos como: Texto, Marcos, Mapas entre otros. Para posteriormente enviar la impresión a la cola de trabajos.

6.1 Sentencia Layout Nos permite crear una nueva ventana de presentación sobre la cual podemos diseñar nuestras plantilla de impresión. Sintaxis: Layout [ Position ( x, y ) [ Units paperunits ] ] [ Width window_width [ Units paperunits ] ] [ Height window_height [ Units paperunits ] ] [ { Min | Max } ] Ejemplos:

Código:

‘Este ejemplo crea una ventana de presentación con la unidad de medida en centímetros (cm).

Page 35: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 35

Layout Set CoordSys Layout Units "cm"

6.2 Sentencia Create Frame Permite crear marcos contenedores para poder agregarlo a la ventana de presentación. Sintaxis: Create Frame [ Into { Window layout_win_id | Variable var_name } ] ( x1, y1 ) ( x2, y2 ) [ Pen... ] [ Brush... ] [ Title title ] [ From Window contents_win_id ] [ FillFrame { On | Off } ]

6.3 Sentencia Create Text Permite crear objetos de texto en la ventana de presentación. Sintaxis: Create Text [ Into { Window window_id | Variable var_name } ] text_string ( x1, y1 ) ( x2, y2 ) [ Font... ] [ Label Line { Simple | Arrow } ( label_x, label_y ) ] [ Spacing { 1.0 | 1.5 | 2.0 } ] [ Justify { Left | Center | Right } ] [ Angle text_angle ] Ejemplos:

Código:

‘Este ejemplo agrega una ventana de mapa a la ventana de presentación autoajustando su ‘contenido al marco, luego se agrega un texto que ira como titulo de la presentación

‘crea el estilo de la fuente para el texto Dim fuente as Font Fuente = MakeFont("Arial",1,18,0, 16777215)

‘crea el marco para alojar la ventana de mapa Create Frame (1,3) (20,28) Title “Distritos Mapa” FillFrame On ‘Crea el texto para agregar a la presentación Create Text "Titulo de presentación" (6, 0.5) (20,0.5) Font fuente Justify Left

Page 36: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 36

6.4 Tabla LayoutN Toda ventana de presentación tiene embebida una tabla oculta la cual tiene el nombre LayoutN donde N es un número correlativo que aumenta cada vez que se crea una nueva ventana de presentación. Si queremos borrar todo el contenido de una ventana de presentación deberíamos ejecutar el siguiente código:

Código:

‘Este ejemplo borra todos los objetos de la ventana de presentación actual Dim nameLayout as String

‘Tomar el nombre de la tabla Layout para la ventana de presentación actual nameLayout = WindowInfo(FrontWindow(), 10) Delete from nameLayout

6.5 Impresión de la ventana de presentación

7. Trabajo con DBMS: MapInfo Professional se puede comunicar a las Base de datos por de ODBC. Para ello es necesario que se cree un DSN (Data Source Name) en el Administrador de ODBC y tener registrado y correctamente instalado el controlador ODBC para la base de datos a la que queremos conectarnos. Para poder programar la gestión a realizar sobre los servidores de bases de datos MapBasic cuenta con una serie de instrucciones que le permiten leer y guardar información en las bases de datos.

7.1 Diferencia entre BBDD Espacial y no espacial Como hemos indicado MapInfo Professional se puede conectar a cualquier tipo de base de datos que tenga controladores ODBC. Sin embargo toma una actitud diferente cuando se conecta a una Base de Datos con componente espacial que cuando se conecta a una base de datos sin componente espacial. A continuación se muestra un cuadro comparativo indicado las acciones que se puede realizar sobre una base de datos espacial y una no espacial desde MapInfo Professional.

Acción a realizar BBDD

Espacial BBDD No espacial

Leer y guardar datos planos. Sí Sí

Leer y guardar datos espaciales. Sí No

Realizar consultas espaciales en el servidor. Sí No

Trabajo multiusuario sobre una misma tabla. Sí Sí

Las bases de datos que admiten componente espacial y son soportadas por MapInfo Professional son las siguientes:

Page 37: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 37

• Microsoft SQL Server 2000/2005 + Spatial Ware • Oracle 9i, 10g, 11g + Oracle Spatial

7.2 Conexión DBMS Sin BBDD Espacial MAPINFO_MAPCATALOG Para poder trabajar con tablas de una base de datos es necesario crear en el esquema del servidor la tabla MAPINFO.MAPINFO_MAPCATALOG esta tabla tiene la siguiente estructura:

Nombre columna Tipo dato Descripción SPATIALTYPE FLOAT Tipo de tabla espacial TABLENAME CHAR(32) Nombre de la tabla OWNERNAME CHAR(32) Nombre del propietario de la tabla SPATIALCOLUMN CHAR(32) Nombre de la columna espacial DB_X_LL FLOAT DB_Y_LL FLOAT DB_X_UR FLOAT DB_Y_UR FLOAT COORDINATESYSTEM CHAR(254) Sistema de coordenadas SYMBOL CHAR(254) Estilo para objeto símbolo XCOLUMNNAME CHAR(32) Nombre de columna con coordenada X YCOLUMNNAME CHAR(32) Nombre de columna con coordenada Y RENDITIONTYPE INT RENDITIONCOLUMN CHAR(32) RENDITIONTABLE CHAR(32) NUMBER_ROWS INT Numero de filas

La Instrucción a ejecutar seria: CREATE TABLE [MAPINFO.MAPINFO_MAPCATALOG] ( [SPATIALTYPE] [float] NULL , [TABLENAME] [char] (32) NULL , [OWNERNAME] [char] (32) NULL , [SPATIALCOLUMN] [char] (32) NULL , [DB_X_LL] [float] NULL , [DB_Y_LL] [float] NULL , [DB_X_UR] [float] NULL , [DB_Y_UR] [float] NULL , [COORDINATESYSTEM] [char] (254) NULL , [SYMBOL] [char] (254) NULL , [XCOLUMNNAME] [char] (32) NULL , [YCOLUMNNAME] [char] (32) NULL , [RENDITIONTYPE] [int] NULL , [RENDITIONCOLUMN] [char] (32) NULL , [RENDITIONTABLE] [char] (32) NULL , [NUMBER_ROWS] [int] NULL ) ON [PRIMARY] GO Esta tabla debe ser creada con el nombre de usuario mapinfo y su clave debe ser mapinfo. Este usuario debe tener permisos de propietario de objetos y de lectura/escritura sobre la base de datos.

Page 38: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 38

7.3 Conectar, desconectar a SQLServer y Oracle. Para conectarse a una base de datos usando MapBasic usaremos la sentencia Server_Connect. Y para desconectarnos usaremos Server Disconnect. Sintaxis: Server_Connect (toolkit, connect_string) Toolkit; Cadena que identifica la interface remota, puede ser “ODBC” o “ORAINET” cuando se quiere conectar a Oracle. Connect_string; Cadena con información adicional necesaria para conectarse a la Base de datos. Server <ConnectionNumber> Disconnect ConnectionNumber; Id de la conexión que se va a cerrar. Ejemplo:

Código:

‘Conexión a SQLServer Dim tk as String Dim cs as String Dim idConnect as Integer ‘Establecer los valores para el Toolkit y cadena de conexión tk = “ODBC” cs = “DSN=DSN_Sample;UID=olibert;PWD=secreto” idConnect = Server_connect(tk, cs)

‘Conexión a Oracle Dim tk as String Dim cs as String Dim idConnect as Integer ‘Establecer los valores para el Toolkit y cadena de conexión tk = “ORAINET” cs = “DSN=DSN_SampleOra;HOST=BS6;PORT=1521;SID=ORCL;UID=olibert;PWD=secreto” idConnect = Server_connect(tk, cs)

‘Desconectarse del servidor de base de datos Server idConnect Disconnect

7.4 Hacer una tabla representable con coordenadas X e Y Una vez que tenemos creado el archivo MAPINFO.MAPINFO_MAPCATALOG en la base de datos. Ya podemos hacer representable una tabla del servidor. Como no tenemos componente espacial en

Page 39: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 39

nuestro servidor solo se podrá crear una tabla representable con coordenadas x e y. Para ello usaremos la sentencia Server Create Map. Sintaxis: Server ConnectionNumber Create Map For linked_table Type { MICODE columnname | XYINDEX columnname | SPATIALWARE } CoordSys... [ MapBounds { Data | Coordsys | Values ( x1, y1 )( x2, y2 )} ] [ ObjectType { Point | Line | Region | ALL } ] [ Symbol (...) ] [ Linestyle Pen(...) ] [ Regionstyle Pen(...) Brush(...) ] [ Style Type style_number [ Column column_name ] ] ConnectionNumber; Id de la conexión en la cual se está trabajando. Linked_table; Nombre de la tabla a vincular. Ejemplo:

Código:

‘Este ejemplo hace una tabla del servidor representable. ‘El servidor no tiene componente espacial Dim tk as String Dim cs as String Dim idConnect as Integer ‘Establecer los valores para el Toolkit y cadena de conexión tk = “ODBC” cs = “DSN=DSN_Sample;UID=olibert;PWD=secreto” idConnect = Server_connect(tk, cs) Server idConnect Create Map For "tb_Programacion" Type XYINDEX ("COORDENADA_X","COORDENADA_Y") CoordSys Earth Projection 1, 0 mapbounds data ObjectType Point Symbol (34,16711680,9)

‘Este ejemplo hace una tabla del servidor representable. ‘El servidor tiene componente espacial Dim tk as String Dim cs as String Dim idConnect as Integer ‘Establecer los valores para el Toolkit y cadena de conexión tk = “ODBC” cs = “DSN=DSN_Sample;UID=olibert;PWD=secreto” idConnect = Server_connect(tk, cs) Server idConnect Create Map For "tb_Programacion" Type SPATIALWARE

Page 40: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 40

"SW_GEOMETRY") CoordSys Earth Projection 1, 0 mapbounds data ObjectType All Symbol (35,0,12) LineStyle Pen (1,2,0) RegionStyle Pen (1,2,0) Brush (2,16777215,16777215)

7.5 Vincular, desvincular tablas MapInfo Professional se puede vincular a tablas de una base de datos. Al vincular una tabla del servidor lo que hace MapInfo Professional es descargar una copia de la tabla del servidor en el disco del cliente. Si la tabla del servidor se ha hecho representable entonces además de bajar los datos también se podrá trabajar la tabla como una capa de MapInfo, si no se ha hecho representable solo se podrán bajar los datos. Para vincular tablas del servidor desde MapBasic se utiliza la sentencia Server Link Table, de igual manera para quitar el vínculo de una tabla se utiliza la sentencia UnLink Sintaxis: Server ConnectionNumber Link Table SQLQuery Into TableName Toolkit toolkitname [ File FileSpec ] [ ReadOnly ] [ Autokey { Off | On }] ConnectionNumber; Id de la conexión establecida. SQLQuery; Cadena con la consulta SQL SELECT a realizar. TableName; Nombre de la tabla en MapInfo Professional. ToolkitName: Cadena que identifica la interface remota. FileSpec; Cadena con la ruta del archivo donde se descargaran los datos. UnLink TableName TableName; Nombre de la tabla en MapInfo Professional. Ejemplo:

Código:

‘Este ejemplo vincula una tabla del servidor y la muestra en MapInfo Professional Dim tk as String Dim cs as String Dim idConnect as Integer ‘Establecer los valores para el Toolkit y cadena de conexión tk = “ODBC” cs = “DSN=DSN_Sample;UID=olibert;PWD=secreto” idConnect = Server_connect(tk, cs) Server idConnect Link Table "select * from tb_programacion" toolkit "ODBC" into "tb_Programacion" File "C:\tb_Programacion.TAB" Autokey ON ‘Este ejemplo quita el vinculo de una tabla vinculada previamente

Page 41: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 41

UnLink "tb_Programacion"

Nota: Para que una tabla vinculada pueda ser editada y actualizada debe contener una clave primaria.

7.6 Refrescar datos Al trabajar con conexión a bases de datos, MapInfo Professional permite que varios usuarios puedan estar visualizando y modificando una tabla al mismo tiempo. En este escenario si queremos obtener la última versión de los datos, en MapBasic tendríamos que ejecutar la sentencia Server Refresh. Sintaxis: Server Refresh TableName TableName; Nombre de la tabla en MapInfo Professional de la cual se quieren obtener la última versión. Ejemplo:

Código:

‘Este ejemplo hace una tabla del servidor representable Dim tk as String Dim cs as String Dim idConnect as Integer ‘Establecer los valores para el Toolkit y cadena de conexión tk = “ODBC” cs = “DSN=DSN_Sample;UID=olibert;PWD=secreto” idConnect = Server_connect(tk, cs) Server idConnect Link Table "select * from tb_programacion" toolkit "ODBC" into "tb_Programacion" File "C:\tb_Programacion.TAB" Autokey ON Server Refresh “tb_Programacion”

7.7 Conexión DBMS Con BBDD Espacial Como ya lo habíamos indicado antes MapInfo se puede conectar a bases de datos con componente espacial o sin él. En este punto mostraremos las herramientas que se utilizan cuando se trabaja con bases de datos que incluyen componente espacial. Easyloader Esta herramienta de MapInfo Professional permite cargar una tabla de MapInfo (.TAB) en una base de datos espacial. Para ello realicen los siguientes pasos:

1. Abra una tabla representable de MapInfo. 2. En el menú herramientas haga clic en EasyLoader, sino aparece vaya al administrador de

herramientas busque EasyLoader y marque los cuadros de Carga y automático.

Page 42: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 42

3. Cuando carga el EasyLoader se muestra la siguiente pantalla.

4. Ingrese la información de conexión haciendo clic en el botón ODBC. Si se trata de Oracle se haría clic en el botón Oracle Spatial.

5. Seleccione la tabla o tablas que cargara en la base de datos. 6. En la casilla Nombre de tabla del servidor indique el nombre de la tabla con la que se creara

en el servidor. 7. En el cuadro combinado procesamiento de tabla del servidor. Seleccione crear nueva tabla si

no existe. 8. Haga clic en cargar y espere el mensaje satisfactorio.

7.8 Crear Espacios en el servidor. Para crear bases de datos en SQL Server 2000/2005/2008 que soporten componentes espaciales es necesario instalar Spatial Ware 4.9.2 for SQL Server. En el caso de Oracle no es necesario instalar estos componentes ya que vienen incluidos dentro de la instalación. Sin embargo no se activa por defecto y es necesaria una instalación y configuración del componente espacial para poder utilizarlo. A continuación vamos a mostrar paso a paso como crear bases de datos y tablas espaciales en un servidor SQL Server 2000.

Page 43: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 43

1. Ingresar al administrador corporativo de SQL Server. 2. Crear una base de datos con el nombre que desee, para el ejemplo le pondremos BDSpatial. 3. En el analizador de consultas de SQLServer ejecutar el siguiente script.

Código:

‘Cambia a la base de datos BDSpatial USE BDSpatial ‘Ejecuta el procedimiento almacenado para crear espacios en la base de datos. EXEC sp_spatialize_db

4. Crear una tabla con los campos que guste, con clave primaria y agregar al final los campos

SW_GEOMETRY (ST_SPATIAL) y MI_STYLE (VARCHAR(254)).

Código:

‘Crea una tabla normal con las columnas para hacerla espacial. CREATE TABLE tabSpatial (CODIGO INT PRIMARY KEY, NOMBRE VARCHAR(50), SW_GEOMETRY ST_SPATIAL, MI_STYLE VARCHAR(254))

5. Ejecutar la siguiente sentencia para crear espacios en la tabla tabSpatial recientemente creada.

Código:

‘Ejecuta el procedimiento que hace la tabla espacial.Sintaxis: ‘EXEC sp_sw_spatialize_column ‘<owner>’, ‘<tablename>’, ‘<spatialcolumn>’, ‘<keycolumn>’ EXEC sp_sw_spatialize_column 'dbo','tabSpatial','sw_geometry','codigo'

6. Si se ejecuto correctamente el procedimiento se creara la tabla auxiliar: tabSpatial#t#SW_GEOMETRY#t#CODIGO

Terminados estos pasos ya podemos trabajar con esta tabla desde MapInfo para crear y/o modificar objetos.

8. Integración con otros leguajes de programación: MapInfo Professional puede ser controlado desde otras aplicaciones y no solamente desde MapBasic. Por ejemplo puede ser controlado desde una aplicación construida en Visual Basic. Este tipo de aplicaciones integran los elementos de MapInfo Professional dentro de los elementos de la aplicación, para lograr esto MapInfo crea una instancia nueva que se ejecuta junto con la aplicación.

Page 44: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 44

8.1 Estableciendo la conexión con la instancia de MapInfo Para crear un nuevo proyecto con integración a MapInfo Professional debe realizar los siguientes pasos:

1. Cree un nuevo proyecto de Visual Basic .Net 2. Haga clic derecho sobre el proyecto y luego Agregar referencia. 3. En cuadro de dialogo referencia haga clic en la ficha COM. 4. Busque y seleccione la referencia MapInfo 9.5 OLE Automation Type Library y haga clic

en Aceptar.

Comando Set Application Window Por medio de este comando le indicamos a MapInfo Professional cual será la aplicación o ventana sobre la cual responderán sus cuadros de dialogo. Comando Set Next Document Parent Por medio de este comando podemos embeber una ventana (Ventana de Mapa, listado, presentación, etc.) de MapInfo Professional dentro de un control de Visual Basic de tipo contenedor (Panel).

8.2 Envíos de comandos y consultas a MapInfo desde VB6.0, .NET Comando Do Permite enviar una instrucción MapBasic para que se sea ejecutada por la instancia embebida de MapInfo Professional. Sintaxis: mapInfoApp.Do <Instrucción MapBasic> mapInfoApp; Instancia de MapInfo Professional. Instrucción MapBasic; cadena con la instrucción MapBasic a ejecutar. Ejemplo: Funcion Eval Permite ejecutar una instrucción MapBasic en la instancia de MapInfo Professional y a la vez retornar un valor. Sintaxis: res = mapInfoApp.Eval(<Instrucción MapBasic>) mapInfoApp; Instancia de MapInfo Professional. res; Objeto con el tipo de dato que retorna la función Eval. Instrucción MapBasic; cadena con la instrucción que debe ejecutarse para retornar el valor requerido. Integrando barras de herramientas y menús de MapInfo en .NET Para realizar la integración de las barras de herramientas y menús de MapInfo usaremos la instrucción Run Menu Command la cual permite simular la selección de un menú o botón de comando.

Page 45: Manual Mapbasic

MANUAL DE MAPBASIC

[email protected] Página 45

Sintaxis: Run Menu Command <idComando> idComando; Id del comando a ejecutar. Para saber el ID de un comando de MapInfo Professional lo podemos averiguar abriendo el archivo menu.def que se encuentra en el directorio de MapBasic. A continuación se muestran algunos IDs que se encuentran en este archivo:

Archivo menu.def:

Define M_TOOLS_SELECTOR 1701 ‘Seleccionar Define M_TOOLS_RECENTER 1702 ‘Mover Define M_TOOLS_EXPAND 1705 ‘Acercar Define M_TOOLS_SHRINK 1706 ‘Alejar

8.3 Uso de los métodos CallBack A veces que cuando trabajamos con la integración de mapas en una aplicación Visual Basic, necesitamos ejecutar acciones cuando se lanza un evento. MapInfo Professional provee de métodos que actúan como eventos para capturarlos es necesario implementar las funciones de la clase MapInfoCallBack el cual lo podemos encontrar en el directorio Integrated Mapping el cual a su vez se encuentra dentro del directorio Samples de MapBasic. Para implementar esta Interface podemos usar la palabra clave Implements luego de la declaración de la clase en la que vamos a programar la implementación. Se crearan automáticamente los tres métodos que nos brinda MapInfo Professional. Ejemplo:

Código:

Public Class Form1 Implements MapInfo.MiPro.Samples.IM.ICallbackNotify #Region "Notify" Public Sub OnMenuItemClick(ByVal id As UInteger) Implements MapInfo.MiPro.Samples.IM.ICallbackNotify.OnMenuItemClick 'Sucede cuando se hace clic en un menú End Sub Public Sub OnStatusBarTextChanged(ByVal text As String) Implements MapInfo.MiPro.Samples.IM.ICallbackNotify.OnStatusBarTextChanged 'Sucede cuando cambia el texto de la barra de estado End Sub Public Sub OnWindowContentsChanged(ByVal windowId As UInteger) Implements MapInfo.MiPro.Samples.IM.ICallbackNotify.OnWindowContentsChanged 'Sucede cuando cambia el contenido de una ventana End Sub #End Region End Class