Un Mapa de México con OpenLayers y MapServer
Pues he seguido jugando con OpenLayers y he creado un mapa digital de México donde se pueden ver las ortofotos del INEGI, división estatal y municipal. Todo esto en un lapso tal vez de 4 hora contando la instalación de mapserver.
OpenLayers no es un servidor de mapas web como lo son MapServer, ArcGIS Server, Geoserver, MapGuide Open Source, sino una librería en JavaScript que tiene la cualidad de poder acceder a información geoespacial ya sea de servidores que cumplan con el estándard WMS y WFS del OpenGeospatial Consortium (OGC) o de los principales servicios comerciales que hay en la actualidad como son Google Maps, Virtual Earth, TerraServer, WorldWind. En pocas palabras OpenLayers es una opción de código abierto similar a la API de Google Maps, pero con la libertad de acceder a más fuentes de datos.
Instalar MapServer en Windows
Para esta prueba lo primero que se debe de hacer es descargar MapServer, el programa que servirá los mapas de división política de México. Esto puede realizarse de distintas maneras, pero la más sencilla es descargar el paquete MS4W desde esta dirección. MS4W (MapServer For Windows) es un paquete que incluye Apache, PHP, el mismo MapServer y sus utilerías.
Al descargar MS4W tendrás un archivo *.zip que deberás de descomprimir directamente en el disco C:\ de tu computadora, debiendo quedar un directorio llamado c:\ms4w al hacerlo. De ahí lo único que debes de realizar es ejecutar el archivo apache-install.bat que se encuentra dentro de dicho directorio. Lo único que debes de fijarte es no tener instalado otro servidor HTTP en la computadora (como el Internet Information Server de Microsoft) pues de lo contrario el servicio del Apache entrará en conflicto y no podrá ejecutarse.
Si se instaló de manera correcta MapServer podrás ver una pantalla similar al accerder a la dirección http://localhost

Crear un archivo *.map de configuración
Ahora es cuestión de crear un archivo MAP de configuración con el cual MapServer identifica qué datos se usarán y con qué simbología se representarán. En este caso el archivo se los dejo en esta liga y a continuación se puede ver cada sección del mismo.

Esta primera sección del archivo indica los datos generales del proyecto, nombre, status, tamaño de la imágen a crear en pixeles, las coordenadas mínimas y máximas de inicio del mapa, las unidades en las que se encuentra y la ruta del directorio donde se encuentran los shapefiles que vamos a utilizar.

Posteriormente hay que definir una sección WEB que indica la ruta física donde se grabarán los archivos que MapServer generará, al igual que la dirección URL desde la cual se pueden acceder. Y por último para nuestro caso la sección METADATA donde se describen las propiedades de nuestro servicio WMS, las tres propiedades forzosas que debes de configurar son wms_title - nombre del servicio, wms_onlineresource - URL para acceder al servicio y wms_srs - sistemas de coordenadas que el servicio soportará. La sección PROJECTION que está fuera de la sección WEB debe de indicarse también de manera forzosa.
Y por último se crean las secciones LAYER por cada capa de información que vamos a mostrar en el mapa. En la imágen de la izquierda está la de los límites municipales. Hay que resaltar que al igual que en la sección WEB descrita arriba, cada layer debe de tener una sección METADATA donde se indique mínimamente el título del layer para el servicio WMS. Con excepción de este punto el resto del layer se similar a cualquier otro que se defina para MapServer.
El archivo que creamos (mexico.map) lo podemos guardar en cualquier directorio que deseemos, en este caso en c:\ms4w\Apache\htdocs\wmsserver.
Aunque en este artículo describo la creación del archivo map como si se editara manualmente es preciso decir que hoy en día es posible hacerlo desde editores especiales, inclusive uDig y qGIS tienen opciones para exportar las capas que tengas abiertas en un archivo *.map que posteriormente puedes insertarle las secciones METADATA necesarias para que funcione como servicio WMS (tal vez en otro post ponga un ejemplo).
Configurando OpenLayers para leer el servicio WMS creado.
Creo que el paso más fácil de los tres, y es que OpenLayers tiene la virtud de estar diseñado precisamente para acceder de manera simple a servicios de mapas en la red. por lo tanto y usando el ejemplo del post anterior, solo debemos de agregar estas líneas a nuestra página html para que se carguen las capas que estamos sirviendo via MapServer:
var mexicourl = “http://148.235.89.18/cgi-bin/mapserv.exe?map=/ms4w/apache/htdocs/wmsserver/mexico.map”;
var wmsmexico = new OpenLayers.Layer.WMS(”Estados y Municipios”,mexicourl,
{layers: “municipios,estados”, transparent: true, format: “image/png”});
map.addLayer(wmsmexico);
En conclusión les puedo comentar que el uso combinado de MapServer y OpenLayers ofrece una buena alternativa para crear aplicaciones de mapas web con herramientas de código abierto. Ambos productos parten de la simpleza en su estructura y el que OpenLayers funcione con JavaScript ofrece grandes posibilidades para extender su funcionalidad.
El único detalle que he encontrado es el problema de las etiquetas que se llegan a repetir debido a que MapServer no sabe que las peticiones que le hacen son para crear un mosaico dentro de OpenLayers, dejando un resultado como el de la imágen de abajo. La solución es ya sea instalar ka-map o el mismo Tile-Cache, los cuales generan la imágen completa que se necesita desplegar en OpenLayers y posteriormente la dividen para crear el mosaico y hacer más eficiente su despliegue.

El ejemplo completo lo puedes ver en esta liga, en el cual puedes ver las instrucciones usadas abriendo el código fuente de la misma página.


Enhorabuena por el artículo, me ha gustado mucho.
La verdad es que publicar con MapServer es un placer por su sencillez y potencia. Ahora mismo creo que es el que mejores resultados estéticos ofrece (tal vez salvando a Mapnik, pero no lo conozco mucho).
Un par de cosas:
No estoy seguro, pero creo que en MapServer se pueden fijar las posiciones de las etiquetas, si esto lo combinas con la opción de que puedan quedar partidas (creo que era PARTIAL) entonces el etiquetado de cada tesela del mosaico debería solapar con las otras correctamente. Repito que no lo he probado, últimamente trabajo con deegree y no he tenido ocasión de probar esto.
La otra, creo que TileCache no hace una petición “enorme” y luego las parte sino que simplemente hace la faena de pedir las teselas en el servidor y luego ofrecer una interfaz hacia los clientes soportando diferentes protocolos, entre ellos uno específico para teselas que han llamado WMSC.
Esta es una propuesta de especificación que ha hecho MetaCarta y que dista todavía bastante de ser un estándar (sólo la soportan ellos!) aunque creo que la gente de GeoServer también están trabajando en ello.
Repito, da gusto ver artículos tan bien escritos sobre el mejor servidor de mapas libre y uno de los clientes ligeros que más prometen. Se nota que te has tomado tu tiempo.
Un saludo.
Comment by XuRxO
April 21st, 2007 @ 4:03
[...] Un Mapa de México con OpenLayers y MapServer | hablandodesigs: Un Mapa de México con OpenLayers y MapServer [...]
Comment by OpenLayers Blog » Blog Archive » MapServer
April 22nd, 2007 @ 6:33
[...] Un Mapa de México con OpenLayers y MapServer [...]
Comment by La Cartoteca » Blog Archive » Sobre MapServer y OpenLayers
April 22nd, 2007 @ 9:08
Gracias XuRxo por tus observaciones, voy a revisar mas a detalle las opciones de MapServer para ver si hay algo que mejore el etiquetado.
Ahora con respecto a Tile-Cache, tal vez no me explique bastante bien, pero básicamente es la opción de crear metatiles, con lo que en vez de generar cada tesela a la vez se genera un grupo de ellas y posteriormente se subdividen. Sinceramente ya no quise ahondar mucho en el tema pues creo que mezclaría muchos temas en el mismo post. De todas maneras es algo que pronto quiero probar y ya les platicaré.
Comment by admin
April 23rd, 2007 @ 10:41
eeeee
hello world!
Comment by a
April 23rd, 2007 @ 17:22
Hola, si la verdad tu articulo esta muy interesante. Yo también he estado probando con esto del mapserver y el openlayer, pero aun estoy confundido con lo del Tile Cache.
No se si estoy bien, pero entiendo que como el admin del sitio, que el genera un grupo de teleselas y luego las subdivides. Lo que no vi en el còdigo fuente de tu pagina es si dividiste el layer de la division politica? y lo otro que he encontrado es que cuando empiezas a bajar de zoom (a acercarte), el mapa se queda colgado y no renderiza buena parte de los tiles, es un problema que estoy tratando de resolver ahora y me gustaria saber si alguien mas sabe como solucionarlo…
Saludos
Comment by carlos gordon
April 24th, 2007 @ 16:32
Hi My Name Is ivavag.
Comment by ivapid
May 12th, 2007 @ 16:42
Alguien me podrìa decir donde puedo bajar el fuente de MapServer! O la forma de refrescar automàticamente un capa!!
Comment by Juan Josè
July 7th, 2007 @ 10:11
no hay
Comment by samuel cirne
July 13th, 2007 @ 14:21
Hola!
necesito ayuda urgentemente. Estoy creando un servicio con map server para luego poder visualizarlo con la ayuda de openlayers, pero me encuentro con el problema que:
-o no me detecta bien el mapfile
-o el mapfile tiene algun error porque todo se vuelve de color rosa.
-o es un tema de configuración
He estado buscando y creo que puede ser un problema de TILES pero no veo como arreglarlo.
De hecho, cuando intento ver el visor de Mexico directamente desde el link de mas arriba me sucede lo mismo.
Gracias por adelantado
Comment by xavi
July 18th, 2007 @ 4:12
Si lo que estas viendo es todo del color de fondo que tenes determinado en tu .map probablemente tengas un problema con tu zoom o con tu extent.
Mira http://trac.openlayers.org/wiki/SettingZoomLevels
Acordate que este tipo de preguntas las podes ( debes ) hacer en las listas tanto de mapserver como de openlayers.
Saludos
Muy bueno el blog
Comment by ArkatPDA
July 20th, 2007 @ 8:30
Estoy haciendo una preuba en mapserver, pero no se como hacer si una coordenada UTM cae dentro del poligo de unos de mis shapes, podria proporcionarme algun script o como puedo hacerlo
Comment by Romelia
July 26th, 2007 @ 14:05
Un datalle que me costo descubrir hasta que lo encontre en un foro.
No podia iniciar el servidor apache y esto era por tener el skype corriendo que usa el puerto 80
Solución cerrarlo iniciar el apache y luego ejecutar el skype que al verlo ocupado usa otro puerto.
Saludos de
Buenos Aires
Comment by Javier
September 20th, 2007 @ 8:41
hola bueno tengo un problemita para abrir el archivo .map q cree no se donde debo guardarlo y ademas no me sale la opcion de maplap (la parte donde se debe cargar el archivo ) no se sime pueden ayudar a la configuracion para el montado del mapa a mapserver paso a paso porfavor ok gracias espero su respuesta
Comment by jhon guzman quiroz
October 15th, 2007 @ 8:10
hola. tengo un problema, teno w. vista y no puedo instalar apache desde el simbolo de sistema, sencillamente no hace nada, ni siquiera ejecutando como administrador. alguna idea?.
gracias!
Comment by sanuel bravo
November 10th, 2007 @ 10:43
Mapserver es una excelente herramienta para SIG pero cuando se corre sobre linux, de hecho existe una version de linux especial llamada HostGis, el unico pero es que el servidor no tiene entorno grafico, se recurre a comandos.
Les recomiendo que para este tipo de aplicaciones utilicen linux y se olvidan de caidas de sistema, virus y sobre todo de tener que utilizar software pirata
Comment by david hara
November 24th, 2007 @ 21:49
Como genero mi map sin ningun problema…. con el ejemplo que dieron, hago lo mismo solo cambio algunos datos pero no llego a visualizar la información,carga el servicio pero no se vee nada
Comment by Mario Valenzuela
January 28th, 2008 @ 13:53
Hola estaba probando la instalacion del MapServ con el ejemplo de Hello World y me manda un error: loadWeb(): Unknown identifier. Parsing error near (/ms_tmp/): (line1).
esto en el valor del map_web_imagepath.
comento que lo estoy corriendo en win XP.
Saludos.
Comment by namen
May 26th, 2008 @ 17:22