Framework Introduction
3.6 FAA-iCMM
El Servidor de Mapas implementado por el grupo de desarrollo de software GeoMIX presenta las facilidades básicas de un servidor de mapas ya que implementa las interfaces propuestas para ese fin por OpenGIS que son: Capabilities, Map y FeatureInfo, tratadas en el Capítulo I de esta tesis. Al menos las dos primeras son obligatorias en el proceso de obtención de un Mapa y la tercera aunque es opcional es de gran importancia cuando se habla de desarrollar Sistemas de Información Geográfica basados en Web.
En sentido general las tres interfaces anteriores serán expuestas a través de una más general que se nombra ”Request” mediante ella se le dirá al servidor que interfaz se está encuestando.
Además esta interfaz general tiene que llevar como parámetro la versión de servidor de mapas que se solicita y puede o no tener alguna información adicional del usuario. A continuación hacemos una breve explicación de la función de las interfaces implementadas para el servidor de mapas y se adjunta un ejemplo de cómo emplearlas, para mejor comprensión del mismo aclaramos que opera con un CGI que se llama MapServer.exe, la colección de la Base de Información Geográfica a la que se hace la consulta se llama Geo_VC.Municipios (municipios de Villa Clara) y que en todos los casos el formato del fichero de salida de la información en XML, excepto cuando es una imagen o cuando es la solicitud de un objeto geográfico que este se devuelve en formato GML.
La interfaz Capabilities es requerida en un servidor de mapas. La misma está diseñada para proveer una lista de qué interfaces soporta el servidor de Mapas, qué capas de mapas puede servir, qué formatos y otros detalles.
Un ejemplo de solicitud de capabilities, para el servidor GeoMIX, sería:
Componente URL Descripción
http://localhost/scripts/MapServer.exe Prefijo URL del Servidor. Requerido.
WMTVER=1.0.0 Versión de la solicitud. Requerido.
REQUEST=capabilities Nombre de la interfaz. Requerido.
La respuesta es en forma de XML, el cual debe ser validado contra una Definición de tipo de Dato (DTD) que se publica bajo el nombre de Capabilities.dtd. A continuación, en la figura IV.3, se puede observar la respuesta que da el servidor de mapas de GeoMIX a la solicitud de capabilities.
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <WMT_MS_Capabilities version="1.0.0" updateSequence="0">
- <Service>
<Name>Geomix:WMS</Name>
<Title>Servidor de Mapas de Geomix</Title>
<Abstract>Mantenido por Geomix de Geocuba</Abstract> </Service>
- <Capability>
+ <Request>
+ <Exception>
- <Layer>
<Title>Capas del Servidor de Mapas de Manicaragua</Title>
<SRS>EPSG:4267</SRS>
- <Layer queryable="0">
<Name>Geo_VC.Vista</Name> <Title>Vista</Title>
- <Layer queryable="1">
<Name> Geo_VC.Municipios</Name> <Title>Municipios de Villa Clara </Title> <SRS>EPSG:2085</SRS>
<LatLonBoundingBoxminx="22.5601978302002" miny="-
82.9814300537109" maxx="23.1880397796631" maxy="- 81.5842514038086" />
<BoundingBoxminx="296220.59375" miny="304909.9375" maxx="440181.1875" maxy="373210.09375" SRS="EPSG:2085" /> </Layer> + <Layer queryable="1"> + <Layer queryable="1"> + <Layer queryable="1"> + <Layer queryable="1"> + <Layer queryable="1"> + <Layer queryable="1"> + <Layer queryable="1"> <LatLonBoundingBox minx="-82.9814300537109" miny="22.3436908721924" maxx="-81.5842514038086" maxy="23.1880397796631" />
<BoundingBoxminx="296220.59375" miny="280667.78125" maxx="440181.1875" maxy="373210.09375" SRS="EPSG:2085" /> </Layer> </Layer> </Capability> </WMT_MS_Capabilities>
En este momento el servidor dispone de una base de información geográfica que tiene una vista denominada Geo_VC.Vista, que cuenta con ocho temas (capas) Figura # IV.3: Fichero XML devuelto por el servidor de mapas GeoMIX a una solicitud de Capabilities.
dentro de los que se expone Municipios de Villa Clara con todos sus atributos. Por último en el fichero están los atributos referentes a la vista y como se puede observar estos son similares a los de cada una de los temas, LanLongBoundingBox y BoundingBox.
La interfaz Map es de obligatoria implementación y mediante ella se puede obtener el mapa deseado. Esta interfaz está diseñada para proporcionar a los clientes del Servidor de Mapas imágenes de mapas. Una vez recibida una solicitud de mapa, el Servidor debe satisfacerla o generar una excepción acorde a las especificaciones de OpenGIS para cada caso de Servidor de Mapas.
Un ejemplo de solicitud de Map, para el Servidor GeoMIX, sería:
donde, según las especificaciones de OpenGIS:
URL Componente Descripción
http://localhost /Scripts/MapServer.exe Prefijo URL del servidor. Requerida
REQUEST=Map Nombre de interfaz. Requerida
LAYERS=layer_list Lista separada por coma de las capas. Requerida
STYLES=style_list Lista separada por coma de los estilos de dibujo por capa. Requerida BBOX=xmin,ymin,xmax,ymax Bounding box. Requerida
WIDTH=output_width Ancho en pixels de la imagen. Requerida HEIGHT=output_height Alto en pixels de la imagen. Requerida FORMAT=output_format Formato de salida del mapa. Requerida.
TRANSPARENT=true_or_false Opcional. FALSE por defecto
BGCOLOR=color_value Color de Background. Opcional 0xFFFFFF por defecto EXCEPTIONS=exception_format Formato de Excepciones. Opcional; INIMAGE por defecto http://localhost/Scripts/Mapserver.exe?request=Map&Layers= Geo_VC.Municipios &Styles = $FF0000&BBox = 591965.099, 236413.574, 629594.849, 281773.036&
Como respuesta a la solicitud hecha anteriormente se devuelve la imagen de un mapa como el que se muestra en la figura IV.4:
La interfaz FeatureInfo está diseñada para proporcionar más información a los clientes, la posibilidad de especificar sobre qué pixel está preguntando, sobre qué capa(s) debe preguntarse, y en qué formato debe devolverse la información. El uso principal de FeatureInfo es que un usuario vea el resultado de una solicitud de mapa y sobre ese mapa escoge un punto para conseguir más información.
Un ejemplo de solicitud de FeatureInfo, para el servidor GeoMIX, sería:
http://localhost/Scripts/mapserver.exe?request=Feature_Info&Layers= Geo_VC. Municipios&Styles=,&BBox=591965.099,236413.574,629594.849,281773.036&
=GIF&Width=300&Height=200&Query_Layers=Geo_VC.Municipios&X=
Según la especificación de OpenGIS esta interface del servidor de mapas cuenta con los siguientes parámetros.
URL Componente Descripción
http://localhost /Scripts/MapServer.exe Prefijo URL del Servidor
REQUEST=Feature_Info Nombre de la interfaz. Requerida.
<map request copy>
Copia de los parámetros de demanda de Mapa que se utilizaron para generar el mapa y de los que se desea información. Requerida
Query_Layers= layer_list Lista separada por coma de las capas que serán consultadas. Requerida. Info_Format = output_format Formato de retorno; MIME por defecto Feature_Count = number Cuantos elementos para retornar información Opcional; 1 por defecto
X = pixel_column Coordenada X del elemento. Requerida
Y = pixel_row Coordenada Y del elemento. Requerida
La solicitud de FeatureInfo, que aparece en este informe, permite obtener del servidor de datos un GML como el que se observa en la figura IV.5:
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <FeatureCollections>
- <FeatureCollection>
<Name>Geo_VC.Municipios</Name> - <Feature>
<Geometria>Polygon</Geometria> <Nombre>Manicaragua</ Nombre > <Extension>1064 km</ Nombre >
</Feature>
</FeatureCollection> </FeatureCollections>
En el ejemplo que se mostró anteriormente se hizo una solicitud de información sobre la capa municipios y como se puede ver en el GML devuelto este objeto geográfico tiene tres propiedades, la geometría, que es en este caso un polígono y las propiedades nombre y extensión son extraidas de una base de datos alfanumérica en el momento de la consulta lo que hace muy dinámica la configuración de este tipo de solicitud.
A las tres interfaces expuestas anteriormente, se les sumó otras tres que permiten la creación y publicación de mapas temáticos, de mucha utilidad a la hora de implementar un Sistema de Información Geográfica, estas interfaces son Get_Schema, Get_Legend y Create_Link_Map.
La interfaz Get_Schema permite acceder a la descripción de las propiedades que tiene determinada colección de elementos geográficos desde Internet. Como formato de salida tiene a GML.
Un ejemplo de solicitud de Get_Schema sería:
Esta solicitud devuleve un GML como el que aparece en la figura IV.6: <?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- File: feature.xsd -->
- <schema targetNamespace=http://www.opengis.net/gml xmlns:gml=http://www.opengis.net/gml
xmlns=http://www.w3.org/2000/10/XMLSchema
elementFormDefault="qualified" version="2.06">
- <complexType name="Municipio" abstract="false"> - <annotation>
<documentation>Municipio Telefonía Pública</documentation> </annotation>
- <complexContent> - <sequence>
<elementname="Geometria" type="Polygon" /> <elementname="Nombre" type="String" /> <elementname="Extension" type="Integer" />
</sequence> </complexContent>
</complexType>
</schema>
En el ejemplo que se visualiza podemos observar el fichero que describe el esquema de la capa Municipios almacenada en la BIG, como se puede apreciar esta capa
http://localhost/Scripts/Mapserver.exe?request=Get_Schema&Layers= Geo_VC.Municipios
cuenta con tres propiedades geometría, que contiene los elementos geográficos, nombre, encargada de almacenar el nombre del municipio en este caso, y extensión que contiene el área del municipio en cuestión, este esquema se corresponde con las propiedades devueltas por la solicitud Feature_Info hecha más arriba.
La interfaz Get_Legend permite acceder al estilo con que se están ofreciendo los mapas de una colección determinada, esta leyenda se devuelve en formato GML y usa una especificación publicada por OpenGIS que se nombra Styled Layer Descriptor (Descriptor de Estilo de Capa).
Un ejemplo de solicitud de Get_Legend sería:
Esta solicitud devuleve un GML que se puede observar en la figura IV.7:
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <StyledLayerDescriptor>
- <UserStyle title="Geo_VC.Municipios" type="0">
<propertybased /> - <PolygonSymbol> - <profiles> - <profile> <label /> <strokecolor>#000000</strokecolor> <strokewidth>-1</strokewidth> <fillcolor>#FFFFDB</fillcolor> </profile> </profiles> </PolygonSymbol> </UserStyle> </StyledLayerDescriptor>
En este GML se devuelven las propiedades de visualización de los objetos geográficos de la capa Municipios para determinado tipo de leyenda. La BIG admite tres tipos de leyenda, de valor simple todos los elementos de la capa se pintan con el
http://localhost/Scripts/Mapserver.exe?request=Get_Legend&Layers= Geo_VC.Municipios
mismo color (tiene índice cero); de valor único, cada elemento de la capa se visualiza con un patrón diferente (índice uno) de acuerdo a una propiedad y por rangos, los elementos geométricos se visualizan en rangos de colores a partir de una propiedad o por una consulta a la base de datos (índice 3). En el caso del ejemplo se utiliza una leyenda de valor simple, type = 0, en ella se especifican el color y estilo de los bordes de los polígonos y el color de relleno de estos.
La interfaz Create_Link_Map permite crear nuevas capas en el servidor de mapas para ser consultadas desde Web. Esta interfaz ofrece como resultado un texto con el nombre de la capa que se mandó a crear. Este nombre puede no coincidir con el solicitado si el mismo ya existía en el servidor. De cualquier forma el nombre devuelto puede ser utilizado para acceder al mismo.
La respuesta a esta solicitud se puede observar en la figura IV.8: <?xml version="1.0" ?>
<layername>
Municipios1
</layername>
En este ejemplo se crea una capa nueva que se denomina Municipios1, a partir de las geometrías que están en la capa Geo_VC.Municipios, almacenada en la Base de Información Geográfica. La capa Geo_VC.Municipios, de la BIG, tiene una propiedad que se llama Extension que permitirá crear un mapa temático de cinco rangos (RankCount) utilizando una leyenda de tipo dos (LegendType), rango de valores. El resultado de esta solicitud es una nueva capa que se crea por parte del servidor y el usuario de este puede solictarla con la interfaz GetMap con posterioridad.
http://localhost/Scripts/Mapserver.exe?request=Create_Link_Map&NewLayerName= Municipios1&FromLayerName=Geo_VC.Municipios&PropertyName=Extension&
LegendType=2&RankCount=5
Figura # IV.8: Fichero GML devuelto por el servidor de mapas GeoMIX a una solicitud de Create Link Map.
El servidor de mapas fue desarrollado utilizando como herramienta de programación Borland Delphi7 por sus facilidades en la implementación de servidores Web, tanto CGI como ISAPI. Implementa el caso imagen o sea lo que viaja a través de Internet en respuesta a una solicitud del cliente no es más que una imagen de un mapa construida por el servidor con formato GIF, JPEG o PNG y fue desarrollado al estilo Microsoft utilizando el modelo de tres capas una capa de Datos, una capa Negocio y otra Usuario.
La capa Datos es donde está almacenada toda la información geográfica, lo que se logra utilizando la aplicación de montaje en una Base de Información Geográfica y su soporte es Microsoft SQL Server 2000 de la manera que se explicó en el epígrafe anterior, creemos necesario aclarar que esta información, en su parte geográfica, cumple con las más estrictas especificaciones de OpenGIS.
La capa Negocio se maneja a través de un servicio de mapas, que se ejecuta como un servicio de Windows, este se puede ejecutar a través de una aplicación de panel de control denominada Servidor de Mapas (ver figura IV.9) y permite al cliente seleccionar con que Base de Información Geográfica se va a conectar a través de una interfaz visual manuable y fácil de utilizar.
Con el botón Abrir BIG el usuario podrá abrir una Base de Información Geográfica creada con anterioridad, y después de abierta esta, se habilitarán los otros botones que permitirán interactuar con el servidor. Luego de abierta la BIG, se hace necesario conectarse con ella e iniciar el servicio lo que se logra con el botón Iniciar. Con estos dos simples pasos ya el usuario tendrá a su disposición toda la información almacenada en el fichero abierto y esta puede utilizarse a través de la web.
La capa Usuario es manejada por una aplicación, al igual que en los casos anteriores, desarrollada en Borland Delphi7.0, denominada MapServer.exe. Un servidor CGI en modo consola que interactúa desde Internet Information Server con el servidor de Bases de Información Geográfica para obtener la información que se desea. A partir de peticiones de una aplicación cliente, conforma una imagen con la información almacenada en la Base de Información Geográfica y la brinda lista para su visualización.
Esta aplicación CGI es la piedra angular del servidor de mapas, ya que es quien interpreta los XML y GML resultado de las solicitudes vistas anteriormente, interactúa con el servidor y conforma una respuesta que será enviada al cliente, en este caso la imagen de un mapa, para que este se encargue de visualizarla.
En el caso del CGI creado para la aplicación SIG Web de ETECSA este utiliza varias bibliotecas de enlace dinámico, explicadas en el capítulo anterior, que le van a permitir interactuar y conformar la información geográfica, estas bibliotecas son Vagosrs.dll biblioteca encargada de establecer los sistemas de referencia espacial, FeaturesGeometries.dll donde están definidas todas las operaciones entre las geometrías y LocalBIGManager.dll que implementa las operaciones con la Base de Información Geográfica en todos los casos las operaciones están regidas por las especificaciones de OpenGIS.