Una dificultad muy común que nos encontramos cuando trabajamos con OpenLayers, es la necesidad de un proxy para realizar determinadas acciones, como puede ser, solicitar información de un elemento que está en el mapa mediante un click del ratón.

Este problema se detecta al hacer peticiones de información a un archivo xml desde un dominio distinto a donde se aloja dicho archivo, es decir, tú ya tienes la información en formato imagen en tu visor, pero la información del punto donde estás pinchando con el ratón, openlayers debe pedírsela en formato xml al servidor donde está el servicio de mapas.

En ese caso por motivos de seguridad el navegador denegará la entrada de ese tipo de información y lanzará una excepción.

 

Este tipo de archivos son necesarios en algunos tipos de peticiones.

  • GetCapabilities.
  • GetFeatureInfo.
  • Para cargar un archivo wfs.

Es decir, siempre que intentemos hacer una petición del tipo XMLHTTPRequest desde Javascript.

Estas peticiones devolverán un archivo en formato xml, al contrario de las peticiones normales de OpenLayers “GetMap” que devuelven un archivo en formato .jpg y no dan ningún tipo de problema crossDomain.

Para solucionar este problema debemos de realizar la petición a través de un proxy. El proxy será configurado a través un archivo .cgi que actuará como intermediario y filtrará a su vez las peticiones.

El archivo proxy recomendado para este tipo de peticiones en OpenLayers puedes encontrarlo en la siguiente dirección.

http://trac.osgeo.org/openlayers/browser/trunk/openlayers/examples/proxy.cgi

Una vez que nos descargamos el archivo debemos guardarlo en carpeta cgi-bin de nuestro apache.

 

Y posteriormente habilitar la lectura de archivos phyton del Apache, ya que nuestro script está escrito en este lenguaje de programación. Si no habilitas este módulo de apache,  no será capaz de interceptar las peticiones.

Una vez hecho esto, debemos de indicar al comienzo del script que cargará OpenLayers, justo antes del init, una variable que apunta a la ruta de nuestro proxy.

Una vez que hemos hecho esto, las peticiones a URLs externas se procesarán con el proxy como intermediario, por lo que probablemente ahora haya cambiado el error que te muestra tu aplicación por el siguiente.

 

El error nos indica que el servidor y la puerta de enlace/proxy no se ponen de acuerdo sobre el protocolo para el intercambio de datos.

Para solucionar esto, debemos editar nuestro archivo e incluir en la matriz de entrada de URLs, las URLs sobre las que queremos hacer peticiones.

 

Una vez introducidos estos parámetros todo debería funcionar correctamente. Aquí podemos ver la respuesta de un GetFeatureInfo mostrado en un PopUp.