Вы находитесь на странице: 1из 8

Apuntes de la materia de Programación en Ambiente SIG

Especialización en Cartografía Automatizada, Teledetección y SIG


UNIDA I. Personalización del programa Idrisi

UNIDAD I

PERSONALIZACIÓN DEL PROGRAMA IDRISI


OBJETIVOS DE UNIDAD:

Proporcionar al alumno la metodología fundamental para personalizar el programa Idrisi,


mediante el uso del lenguaje de programación Delphi 6.0 para llevar a cabo la construcción
de programas.

TEMAS:
1.1 Personalización del menú del programa Idrisi.
1.2 Conexión del programa Idrisi con el Delphi 6.0.
1.3 Utilización de la librería Idrisi.

1.1 PERSONALIZACIÓN DEL MENÚ DEL PROGRAMA IDRISI

Nota: Traducción realizada por el profesor de la materia a partir del original “IDRISI
Applications Programming Interface User’s Guide” (2003), pero con ejemplos
propios en algunos casos. Para una referencia completa se recomienda consultar el
original.

Idrisi ha sido especialmente diseñado para permitir al usuario incrementar su capacidad y


funcionalidad a través de la agregación de nuevos módulos. El menú de Idrisi es
totalmente personalizable, permitiendo el agregar en él un módulo como si fuese un
elemento original del sistema Idrisi. A continuación se presentan algunas instrucciones
concretas sobre cómo integrar un módulo en Idrisi.

El menú de Idrisi no se encuentra codificado de forma “dura” dentro del archivo


IDRISI32.EXE y, más bien, es creado a partir de un grupo de archivos de texto de menú
(con una extensión .Imn) que se ubican en la carpeta \IDRISI Andes\Extensions.
Como consecuencia de esto, el menú de Idrisi es completamente extensible y
reconfigurable.

La organización de estos archivos de texto de menú se realiza mediante un archivo


principal llamado Extensions.Lst, mismo que enlista los archivos de texto de menú en el
mismo orden en que aparecen en el menú de Idrisi. Cada uno de los archivos de texto es un
archivo ASCII con una extensión .Imn (Idrisi Menú) que contienen las entradas del menú
y su correspondiente llamada DLL (librería dinámica) o EXE (archivo ejecutable). Cuando
un usuario da clic sobre un elemento del menú, Idirisi invoca la función DLL o EXE dada
en el archivo de texto de menú.

1
Facultad de Geografía, Universidad Autónoma del Estado de México
Profesor: Luis Ricardo Manzano Solís
Octubre-Noviembre de 2007
Apuntes de la materia de Programación en Ambiente SIG
Especialización en Cartografía Automatizada, Teledetección y SIG
UNIDA I. Personalización del programa Idrisi

La estructura de Extensions.Lst es una lista simple en formato ASCII. Cada línea enlista
un archivo de texto de menú (sin su extensión .Imn) ordenado de manera tal como se
desea producir el menú final. El archivo original Extensions.Lst que viene con Idrisi
contiene lo siguiente:

Las primeras dos líneas de un archivo .Imn proporciona la información general sobre la
extensión:

La siguiente sección del .Imn contiene la lista de acciones (Action List). El nombre a la
izquierda del signo igual (=) es el nombre de la acción (Action Name). A la derecha del
mismo signo igual se encuentra el nombre del DLL o EXE, seguido por el nombre de la
función para llamarlo, seguido a su vez por un parámetro opcional. En el caso de diálogos
estándar de Idrisi, este último parámetro es un número que se refiere al dialogo particular
dentro de un DLL. Algunos de los diálogos están contenidos en el ejecutable principal de
Idrisi y están referidos como tales. De otra forma, estos son referenciados mediante un
DLL o EXE específico. Por ejemplo:

2
Facultad de Geografía, Universidad Autónoma del Estado de México
Profesor: Luis Ricardo Manzano Solís
Octubre-Noviembre de 2007
Apuntes de la materia de Programación en Ambiente SIG
Especialización en Cartografía Automatizada, Teledetección y SIG
UNIDA I. Personalización del programa Idrisi

En este ejemplo, las operaciones de Calculadora de Imagen y Editor (Image calculator y


Edit, respectivamente) se encuentran contenidas en el ejecutable principal de Idrisi,
mientras que las otras están contenidas en extensiones de DLL’s.

Cuando se integra un módulo desarrollado por un usuario, la lista de acciones únicamente


necesita contener el nombre del archivo ejecutable (el cual además ha de estar contenido
en la carpeta \IDRISI Andes\Mods). Por ejemplo:

MI_ACCION=MI_EJECUTABLE.EXE

Después de la lista de acciones se encuentra la descripción del orden y ubicación de los


elementos del menú. El menú es una estructura jerárquica, con submenús identificados
por la palabra branch (rama/ramificación del menú). Menubreak (divisor de menú)
indica la inserción de una línea para separar elementos. La sección inicia con
BEGINMENU y finaliza con ENDMENU. Cualquier BEGINBRANCH debe tener un
ENDBRANCH. A continuación se presenta un ejemplo (las líneas que comienzan con
“//” son comentarios):

3
Facultad de Geografía, Universidad Autónoma del Estado de México
Profesor: Luis Ricardo Manzano Solís
Octubre-Noviembre de 2007
Apuntes de la materia de Programación en Ambiente SIG
Especialización en Cartografía Automatizada, Teledetección y SIG
UNIDA I. Personalización del programa Idrisi

Breve descripción de los elementos de un .Imn:

BEGINMENU
INSERTIONDEPTH 1 //use zero if top level menu item (usar cero si se trata de un elemento de menu superior)
IdrMenuAnalysis //caption of menu item to be inserted under (título o leyenda del elemento de menú bajo el cual es
insertado este menú, esto es, nombre del menú del que se
desprende este submenú)
ITEMNAME ANALYSISMENUDatabaseQuery
ITEMCAPTION Database Query //caption of first item (título del primer elemento)
ACTION 0 //this one does no action so its action code is zero (este no es una acción, por lo tanto su código de acción es
cero)
HELPCONTEXT 0 //'0' means not yet linked (significa que no está vinculado)

BEGINBRANCH
ITEMNAME ANALYSISMENUReclass //Any unique name that makes sense (un nombre único que sea
significativo)
ITEMCAPTION RECLASS //This is what appears in the menu (esto es lo que aparece en el menú)
ACTION ANALYSIS_RECLASS //This refers to the action list above (se refiere a la acción mencionada arriba,
en la lista de acciones)
HELPCONTEXT 0

ITEMNAME ANALYSISMENUOverlay
ITEMCAPTION OVERLAY
ACTION ANALYSIS_OVERLAY
HELPCONTEXT 0

ITEMNAME ANALYSISMENUCrosstab
ITEMCAPTION CROSSTAB
ACTION ANALYSIS_CROSSTAB
HELPCONTEXT 0

MENUBREAK

ITEMNAME ANALYSISMENUEdit
ITEMCAPTION Edit
ACTION ANALYSIS_EDIT
HELPCONTEXT 0
ENDBRANCH

ITEMNAME ANALYSISMENUMathematicalOperators
ITEMCAPTION Mathematical Operators
ACTION 0
HELPCONTEXT 0

BEGINBRANCH
ITEMNAME ANALYSISMENUOverlay2
ITEMCAPTION OVERLAY
ACTION ANALYSIS_OVERLAY
HELPCONTEXT 0

ITEMNAME ANALYSISMENUScalar
ITEMCAPTION SCALAR
ACTION ANALYSIS_SCALAR
HELPCONTEXT 0
END BRANCH
ENDMENU

4
Facultad de Geografía, Universidad Autónoma del Estado de México
Profesor: Luis Ricardo Manzano Solís
Octubre-Noviembre de 2007
Apuntes de la materia de Programación en Ambiente SIG
Especialización en Cartografía Automatizada, Teledetección y SIG
UNIDA I. Personalización del programa Idrisi

1.2 CONEXIÓN DEL PROGRAMA IDRISI CON EL DELPHI 6.0.

INTERFAZ DE PROGRAMACIÓN DE APLICACIONES DE IDRISI

Idrisi Applications Programming Interface (Idrisi API)

Versión 2.0 Clark Labs 2003

Nota: El API trabaja con todas las versiones de Idrisi de 32 bits, incluyendo Idrisi uno, dos,
Kilimajaro (14) y Andes (15).

INTRODUCCIÓN

Idrisi ha sido diseñado como un servidor de automatización OLE usando tecnología COM
Object (Objeto COM). Como consecuencia, es posible emplear lenguajes de desarrollo de
alto nivel, tales como Delphi, Visual C++, Visual Basic o Visual Basic para Aplicaciones
(VBA) como macrolenguajes para controlar las operaciones de Idrisi. En resumen, se
pueden crear sofisticadas aplicaciones de Controlador de Automatización OLE que tienen
completo control sobre el funcionamiento de Idrisi.

El servidor de automatización OLE de Idrisi es registrado automáticamente en Windows


cuando Idrisi se instala en un equipo. Por lo tanto, al estar instalado Idrisi,
automáticamente se tiene el acceso a la totalidad de la Interfaz de Programación de
Aplicaciones (API, por sus siglas en inglés). El servidor de automatización OLE de Idrisi
otorga un amplio rango de funciones para controlar Idrisi, incluyendo correr módulos,
desplegar archivos y manipular variables del ambiente Idrisi.

INICIO RÁPIDO

El primer paso para usar la API de Idrisi es registrarlo en el ambiente de programación.


Esto normalmente toma poco tiempo, y se describe en la siguiente sección. Después de que
se ha registrado la API el programador tiene la posibilidad de controlar la mayoría de los
aspectos de operación del sistema Idrisi. A continuación se presentan algunas ideas
rápidas para iniciar:

Una vez que ha sido instalada la librería de Idrisi, cualquiera de los métodos o
propiedades incluidos con Idrisi puede ser usado con únicamente escribir el nombre de
la referencia de objeto de Idrisi (Idrisi object reference), seguida por un punto, seguida
por el nombre del método o propiedad (method o property) con sus parámetros
(parameters). Por ejmplo:

5
Facultad de Geografía, Universidad Autónoma del Estado de México
Profesor: Luis Ricardo Manzano Solís
Octubre-Noviembre de 2007
Apuntes de la materia de Programación en Ambiente SIG
Especialización en Cartografía Automatizada, Teledetección y SIG
UNIDA I. Personalización del programa Idrisi

La referencia de objeto de Idrisi (Idrisi object reference) es el nombre que el ambiente


de programación usa para referirse al controlador de automatización de Idrisi. Este se
establecido cuando se instala la librería de Idrisi. Los métodos (methods) son funciones
o procedimientos incluidos en la librería de controlador de automatización (p.e.
operaciones que invocan una acción), mientras que las propiedades (properties) son
los ajustes accesibles al usuario (tales como la ruta hacia la carpeta de trabajo [working
folder]).

En la mayoría de los ambientes de programación se podrá notar que tan pronto como
se teclea un punto después de la referencia del objeto de Idrisi (Idrisi object reference),
se despliega una lista de funciones desde la librería entre las cuales se puede elegir la
deseada para cierta función. Posteriormente, tan pronto como se teclea el paréntesis de
apertura de los parámetros (después del nombre de la función) inmediatamente se
enlistan todos los parámetros requeridos junto con su tipo de dato.

Si se crea un programa que accede a la API e Idrisi no está abierto, Windows


automáticamente inicia Idrisi al momento que es requerido dentro de dicho programa.

En el documento original de la API se muestra una larga lista de métodos (funciones y


procedimientos) y propiedades (atributos). Vale la pena mencionar que la mayoría de
los usuarios sólo necesitan tres o cuatro de estos elementos. Los más empleados son:

1. RunModule. Empleado para ejecutar un módulo propio de Idrisi; emplea la


misma lista de parámetros que un macro dentro de Idrisi.
2. DisplayFile. Como el nombre lo sugiere, es empleado para desplegar capas
vectoriales y/o matriciales.
3. AddLayerToDisplay. Para agregar una capa en una composición de mapa
existente.
4. GetWorkingDir. Empleado para determinar la ruta de la carpeta de trabajo
actual.
5. GetResourceDirCount. Usado para contar el número de carpetas de recurso
con que cuenta un proyecto.
6. GetResourceDir. Útil para conocer la ruta de una carpeta de recursos
específica.

El método RunModule tiene una opción de espera que causa que un programa espere
hasta que una operación en Idrisi finalice antes de ir a la siguiente línea de código del
programa.

El parámetro ModParams de RunModule es idéntico al macro comando del módulo


que se esté ejecutando, pero con dos excepciones: (1) el parámetro “x” del macro
comando no es necesario y (2) todas la referencias de archivos usados con RunModule
deben usar su ruta de acceso completa y su extensión. Para los archivos de Idrisi, la
extensión del archivo de datos principal debe ser usado (.rst, .vct, .avl), sin considerar
la de sus archivos de documentación.

Recomendación para acceder a la ruta de la carpeta de trabajo (working folder) (la


misma lógica se puede emplear para las carpetas de recursos):

6
Facultad de Geografía, Universidad Autónoma del Estado de México
Profesor: Luis Ricardo Manzano Solís
Octubre-Noviembre de 2007
Apuntes de la materia de Programación en Ambiente SIG
Especialización en Cartografía Automatizada, Teledetección y SIG
UNIDA I. Personalización del programa Idrisi

Empleando la variable WrkFld como cadena de caracteres:

WrkFld:=Idrisi32.GetWorkingDir

Y usar esta variable para referirse a esta carpeta cada vez que se requiera y así no estar
invocando el método en cada momento.

Se puede observar que existen algunos métodos de la librería de Idrisi que no están
documentados en el documento de la API de Idrisi. Esto se debe a que estos son sólo
para uso interno de Idrisi y, por tanto, no deben ser empleados en las aplicaciones
personales.

La flexibilidad de modificar el menú de Idrisi permite incorporar en el menú el acceso a


los módulos desarrollados por un usuario.

ACCESO EN DELPHI 6.0 A LA INTERFAZ DE PROGRAMACIÓN DE


APLICACIONES DE IDRISI

Idrisi es un Servidor de Automatización, entonces cualquier programa que acceda a los


métodos y propiedades descritos arriba es llamado Controlador de Automatización. Este
último es el caso de Delphi 6.0. La siguiente información es específica para Delphi 5.0 o
versiones posteriores.

Paso 1. Instalar la Librería de Tipo de Idrisi (esto se realiza sólo una vez)

• En el menú PROJECT en Delphi, seleccionar IMPORT TYPE LIBRARY.


• Buscar “IDRISI Library” en la lista de servidores instalados y seleccionarlo.
• Ajustar la página de paleta (palette page) en “Servers” y asegurarse de que la caja de
selección “Generate Component Wrapper” esté seleccionada.
• Clic en “Install”.
• Delphi preguntará cual paquete se ha de instalar la librería, siendo el paquete default
“dclusr5.dpk”. Este es el paquete de componente de Delphi principal. Clic en “Ok” para
indicar que se desea instalar la librería en ese paquete.
• Se desplegara una ventana de diálogo sobre el contenido de esta librería. Dar clic en
“Compile”.
• Ahora se puede cerrar esta ventana de diálogo.

Con esto se tendrá acceso a la librería de Idrisi en cualquier proyecto de Delphi que se creé.

PASO 2. Usar la librería de Idrisi (será necesario hacer esto para cada nuevo
proyecto dentro de Delphi)

Dentro de cualquier proyecto de Delphi que necesite acceder a Idrisi es necesario incluir la
siguiente declaración en “Uses”:

Uses IDRISI32_tbl;

Después, declarar un objeto de la clase IIdrisiApiServer como sigue:


7
Facultad de Geografía, Universidad Autónoma del Estado de México
Profesor: Luis Ricardo Manzano Solís
Octubre-Noviembre de 2007
Apuntes de la materia de Programación en Ambiente SIG
Especialización en Cartografía Automatizada, Teledetección y SIG
UNIDA I. Personalización del programa Idrisi

Var
IDRISI32:IIdrisiApiServer;

Aunque para la clase PASIG se recomienda usar:

Var
IdrAPI:IIdrisiApiServer;

Después, en la sección de implementación (implementation section), declarar el objeto API


de Idrisi como sigue:

IDRISI32:CoIdrisiApiServer.Create;

Aunque para la clase PASIG se recomienda usar:

IdrAPI: CoIdrisiApiServer.Create;

Se puede acceder ahora cualquier propiedad o método dado por Idrisi con simplemente
referir el objeto IDRISI32 (IdrAPI, para la clase), seguido por un punto, seguido por el
nombre del método o propiedad y el o los parámetros requeridos. Por ejemplo, para una
variable llamada “Working_Folder”:

Working_Folder:=IDRISI32.GetWorkingDir;

Para el caso de la clase PASIG quedaría:

Working_Folder:=IdrAPI.GetWorkingDir;

Finalmente, antes de permitir finalizar completamente a la aplicación, es necesario indicar


que ya no se requiere más la API como sigue:

IDRISI32:=nil;

Para el caso de la clase PASIG quedaría:

IdrAPI:=nil;

Con esta última operación se remueve un proceso de usuario como cliente de IDRISI 32 (o
IdrAPI, para la clase PASIG). Esto permite que IDRISI32 (o IdrAPI) sea finalizado o
desconectado cuando ya no se ocupa más dentro de una aplicación.

8
Facultad de Geografía, Universidad Autónoma del Estado de México
Profesor: Luis Ricardo Manzano Solís
Octubre-Noviembre de 2007

Вам также может понравиться