Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo utilizar delphi7.0 para operar el mapa electrónico mapinfo (urgente)

Cómo utilizar delphi7.0 para operar el mapa electrónico mapinfo (urgente)

Resumen: Este artículo toma la aplicación Delphi como ejemplo y presenta con más detalle cómo utilizar la tecnología de automatización OLE para integrar y desarrollar aplicaciones MapInfo. Presenta cómo utilizar llamadas OLE, devolución de llamadas y otras funciones. Finalmente, se utiliza un ejemplo para ilustrar cómo utilizar el método descrito en este artículo en aplicaciones prácticas.

Palabras clave: automatización OLE; MapInfo; integración de mapas

1 Descripción general

MapInfo Professional 6.0 es un sistema de información geográfica de escritorio desarrollado por la empresa estadounidense MapInfo. convertirse en el sistema de información geográfica de escritorio más popular del mundo porque es pequeño y exquisito, fácil de aprender y usar, y tiene funciones potentes como recopilación, almacenamiento y análisis de datos espaciales. Actualmente existen tres formas principales de desarrollar aplicaciones utilizando MapInfo. Simplemente utilizan el desarrollo MapBasic, utilizan herramientas de programación visual para integrar el desarrollo secundario y utilizan el desarrollo MapX.

Entre estos tres métodos, la programación MapBasic pura rara vez se utiliza debido a la falta de soporte del entorno de programación visual y al largo ciclo de desarrollo. Los dos últimos son métodos más utilizados en aplicaciones prácticas.

Las aplicaciones desarrolladas con MapX no necesitan el soporte de MapInfo en segundo plano, por lo que se ejecutan rápidamente, son pequeñas y flexibles, y actualmente son un método de desarrollo popular. Sin embargo, MapX no implementa todas las funciones de MapInfo. generación Y todavía falta la capacidad de editar mapas. Creo que con el lanzamiento de versiones superiores de MapX, este método de desarrollo se volverá cada vez más popular.

El desarrollo integrado utilizando herramientas de programación visual consiste en utilizar herramientas de programación visual (VC, VB, Delphi, etc.) en primer plano para desarrollar interfaces de usuario que no tienen nada que ver con funciones de información geográfica y llamar a MapInfo en en segundo plano cuando están involucradas funciones de información geográfica. De hecho, la ventana del mapa está integrada en aplicaciones desarrolladas en otros lenguajes de programación, y otros lenguajes de programación se utilizan para controlar MapInfo enviando comandos a MapInfo. Este método puede crear una interfaz hermosa y amigable a voluntad y puede realizar casi todas las funciones de MapInfo. Este método es muy efectivo, especialmente cuando es necesario agregar funciones de administración de información geográfica al sistema de aplicación maduro original.

2 Introducción a los métodos de llamada OLE

Hay dos formas principales en que las aplicaciones envían comandos a MapInfo:

Una es utilizar tecnología DDE para crear MapInfo y comunicación entre aplicaciones. Una sesión DDE es el proceso mediante el cual dos aplicaciones de Windows intercambian información. Una sesión DDE sólo es posible entre dos aplicaciones habilitadas para DDE cuando se están ejecutando. En una sesión, solo una aplicación está activa y se convierte en cliente, y la aplicación pasiva se convierte en servidor. Cuando realmente se ejecuta, MapInfo actúa como un servidor y es llamado por las aplicaciones cliente.

Otro método para enviar comandos a MapInfo es la tecnología de automatización OLE. MapInfo permite que otras aplicaciones habilitadas para OLE llamen a MapInfo como un objeto. MapInfo actúa como un servidor OLE para proporcionar sus objetos a otras aplicaciones, y otras aplicaciones usan sus objetos para operar MapInfo.

En aplicaciones reales, usar OLE es un método más común porque es más estable y confiable que DDE. Al mismo tiempo, también puede informar errores de ejecución de MapInfo, mientras que DDE no puede obtener códigos de error de MapInfo. Este artículo analiza principalmente el desarrollo integrado basado en la automatización OLE.

Tomando la integración de MapInfo por parte de Delphi como ejemplo, el método de desarrollo de integración automatizada OLE es el siguiente:

a) Inicie MapInfo

Utilice la siguiente declaración para comenzar MapInfo en el programa cliente:

var oleMapInfo: Variant; //Declarar una variable de tipo OLE Variant en la aplicación Delphi

oleMapInfo:= CreateOLEObject('MapInfo.Application'. );

La función CreateOLEObject() se utiliza para crear una instancia del servidor de automatización MapInfo. La declaración anterior también asigna el valor de retorno de la función a la variable de tipo variante oleMapInfo. El objeto oleMapInfo se define como una instancia de MapInfo. En el futuro, oleMapInfo es equivalente a un servidor MapInfo, y la aplicación Delphi es equivalente a administrar y operar MapInfo llamando a oleMapInfo.

b) Llamar a los métodos y propiedades de la instancia MapInfo

El objeto OleMapInfo tiene los siguientes métodos y propiedades

Objeto

Métodos

Propiedades

Aplicación

Do, Eval, RunCommand, SetCallBack, RunMenuCommand, DataObject,

Nombre, Aplicación, Padre, Versión, Visible, LastErrorCode, etc.

Se pueden lograr diferentes funciones llamando a diferentes métodos y atributos en la aplicación. Entre ellos, los más utilizados son:

1) Método Do: transmitir. instrucciones para MapInfo

Después de iniciar MapInfo, puede enviarle instrucciones MapBasic para permitirle implementar las funciones correspondientes a las declaraciones MapBasic correspondientes. Por ejemplo, la siguiente instrucción abre y carga un mapa:

MsgString:= 'Open Table "D:\Map\Map1.Tab" Interactive';

oleMapInfo.Do(MsgString );

MsgString := 'Map From Map1';

oleMapInfo.Do(MsgString);

El método Do es el más utilizado en desarrollo integrado. Método, básicamente se deben implementar algunas funciones importantes con él. Éstos son algunos.

①. Regenerar la ventana de MapInfo

Después de iniciar MapInfo, el primer paso suele ser regenerar la ventana de MapInfo:

MsgString:= 'Establecer documento principal siguiente. ' sWinHand ' Estilo 1';

//sWinHand es el identificador del control Delphi que contiene la ventana MapInfo

oleMapInfo.Do(MsgString);

Después de ejecutar la declaración anterior, el cuadro de diálogo MapInfo y el mensaje de error son propiedad del programa cliente.

②. Ejecute directamente el programa Mapbasic.

A veces, es necesario llamar al programa MapBasic ya preparado en el desarrollo secundario para implementar funciones específicas. siguiente:

MsgString:= 'Ejecutar la aplicación "D:\MapBasic\DrawArc.MBX"';

oleMapInfo.Do(MsgString);

③, Redefinir el menú contextual de MapInfo

Esta es una función muy práctica. Los desarrolladores pueden agregar o modificar el menú contextual de la ventana del mapa de MapInfo según las necesidades reales, o incluso bloquear completamente el menú contextual. of MapInfo:

MsgString: = 'Crear menú "MapperShortcut" ID 17 como "(-"'; // Proteger el menú contextual

oleMapInfo.Do(MsgString);

2) Método Eval: obtenido del valor de retorno de MapInfo

El método Eval de oleMapInfo puede devolver el valor de MapInfo al programa cliente. Este método debe aplicarse cuando el programa cliente necesita obtener información del mapa. La siguiente declaración devuelve las coordenadas horizontales y verticales del centro del mapa al programa cliente:

MsgString:= 'MapperInfo(WindowID(0), 3)';

CenterLongitude:= oleMapInfo(MsgString);

MsgString:= 'MapperInfo(WindowID(0), 4)';

CenterLatitude:= oleMapInfo.Eval(MsgString);

//MapperInfo es una función interna de MapInfo

3) Método RunMenuCommand: llame al menú MapInfo

Utilice el método RunMenuCommand para implementar convenientemente la función del menú MapInfo. En MapInfo, cada función de menú corresponde a un número de identificación. El número de identificación correspondiente a cada menú se puede encontrar en el archivo MENU.DEF en el directorio de instalación de MapBasic. Por ejemplo, cuando desee que aparezca el cuadro de diálogo Cambiar vista de MapInfo después de presionar un botón en el programa cliente (correspondiente al elemento de menú Cambiar vista del menú Mapa en MapInfo), solo necesita responder al evento OnClick de este botón y llame al método RunMenuCommand de oleMapInfo:

procedimiento TFormMap.cmdChangeViewClick(Sender: TObject);

begin

oleMapInfo.RunMenuCommand(805); /p>

//805 es el valor correspondiente a M_MAP_CHANGE_VIEW en MEMU.DEF

end;

Usando el mismo método, el botón correspondiente en la barra de herramientas principal de MapInfo puede También se integrará en la aplicación. El número de ID correspondiente al botón de la barra de herramientas también se puede encontrar en MENU.DEF.

3 Utilice el mecanismo de devolución de llamada para obtener información de MapInfo

En el desarrollo secundario integrado, el mecanismo de devolución de llamada generalmente se utiliza para obtener información de MapInfo.

La llamada devolución de llamada se refiere al mecanismo mediante el cual MapInfo envía automáticamente mensajes a la aplicación cliente a través de objetos de automatización OLE cuando ocurre un evento en la ventana del mapa de MapInfo integrada con el programa cliente.

Utilizando el mecanismo de devolución de llamada, MapInfo puede enviar información al programa cliente en las siguientes circunstancias:

1) Ejecutar el comando de la barra de menú o botón de herramienta en apInfo.

2) La ventana del gráfico cambia.

3) La barra de estado de MapInfo cambia (el usuario mueve el mouse sobre el mapa).

El programa cliente puede recibir la información correspondiente y procesarla en su propio método definido. Por lo tanto, puede utilizar el mecanismo de devolución de llamada para implementar las siguientes funciones en la aplicación:

1) Definir el menú contextual de MapInfo.

2) Interactuar con MapInfo a través de herramientas definidas por el usuario.

3) Controla el mapa modificado.

4) Personalizar el contenido que se muestra en la barra de estado del programa cliente.

La devolución de llamada es la dificultad del desarrollo secundario mediante la integración de automatización OLE. La idea central es que el servidor MapInfo envía mensajes al programa cliente. Tomando como ejemplo la barra de estado de un programa cliente personalizado, el mecanismo de devolución de llamada se utiliza de la siguiente manera:

1) Cree una clase y defina el método SetStatusText. Este método toma un parámetro StatusText de tipo WideString. MapInfo pasa este parámetro al programa cliente.

En Delphi6.0, seleccione Archivo | Nuevo | ActiveX | Objeto de automatización y abra el editor "Biblioteca de tipos" iniciando el asistente de objetos de automatización. Aquí se supone que la clase creada se llama TmyCallBack.

2) Añade una barra de estado al formulario de solicitud.

3) Crea un objeto usando la clase definida en el primer paso.

varCallBack:= TMyCallBack.Create;

4) Llame al método SetCallBack del objeto OLE automático para pasar parámetros.

oleMapInfo.SetCallback(varCallBack As IMyCallBack);

5) Procese el parámetro StatusText pasado por MapInfo en el método SetStatusText para controlar la visualización de la barra de estado.

procedimiento TMyCallBack.SetStatusText(const StatusText: WideString);

comenzar

MainForm.StatusBar1.Panels[0].Text:= StatusText;

//MainForm es el formulario que contiene el componente del mapa

end;

4 ejemplos de aplicación

El autor está desarrollando un EMC (electromagnético compatible ) Se ha aplicado la tecnología de automatización OLE en el sistema de predicción y análisis y, desde la perspectiva de la aplicación práctica, se han logrado resultados satisfactorios.

El sistema analiza la compatibilidad electromagnética de transmisores y receptores distribuidos en diferentes estaciones. Como uno de sus subsistemas, la función de información geográfica se desarrolla mediante una combinación de Delphi 6.0 y MapInfo 6.5. La base de datos utiliza MS SQL Server. La aplicación está desarrollada principalmente en Delphi Cuando es necesario visualizar de manera intuitiva información geográfica como mapas, estaciones, transmisores, receptores y señales de transmisión, se llama a la función MapInfo para lograrlo. Utilice la tecnología de automatización OLE para realizar la interacción entre los dos.

Las coordenadas de la estación, los parámetros, los parámetros del transmisor y del receptor, la ubicación de la estación y otra información se almacenan en la tabla de SQL Server.

Primero, use un programa MapBasic para conectarse a la base de datos de SQL Server, obtener información y almacenarla en la tabla MapInfo, cargar el mapa básico y crear capas separadas para estaciones, transmisores, receptores, señales, etc.

Delphi primero inicia el servidor MapInfo, luego ejecuta el programa MapBasic para cargar el mapa y luego interactúa con el servidor MapInfo a través de la automatización OLE. La estructura del sistema se muestra en la siguiente figura:

La interfaz de ejecución del sistema es la siguiente:

Entre ellas

Las capas de ocultación y visualización se implementan llamando a MapBasic declaraciones a través del método do de oleMapInfo.

Los botones de acercar, alejar y desplazarse se implementan mediante el método RunMenuCommand de oleMapInfo.

La obtención de las coordenadas del centro del mapa en la configuración se logra mediante el método Eval de oleMapInfo.

La barra de estado se actualiza mediante devoluciones de llamada OLE.

5 Conclusión

La práctica muestra que el uso de la tecnología de automatización OLE para desarrollar aplicaciones MapInfo ahorra el ciclo de desarrollo, puede controlar MapInfo de manera flexible y efectiva y realizar las funciones del sistema de información geográfica de MapInfo. Su desventaja es que necesita llamar a MapInfo en segundo plano, por lo que la velocidad de ejecución del programa es limitada. Sin embargo, antes de que madure la aplicación de control MapX, las llamadas y devoluciones de llamada OLE seguirán siendo métodos de desarrollo comúnmente utilizados.