PHP-Mapscript de Mapserver. Parte 1: Conceptos
Esta obra está bajo una licencia de Creative Commons.
© 2007 Jaime M. Tan Nozawa. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra, o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.
¿Qué es MapServer?
MapServer es un entorno de desarrollo en código abierto (Open Source Initiative) para la creación de aplicaciones SIG en Internet/Intranet con el fin de visualizar, consultar y analizar información geográfica a través de la red mediante la tecnología Internet Map Server (IMS).
Sus características principales son:
- Se ejecuta bajo plataformas Linux/Apache y Windows.
- Formatos vectoriales soportados: ESRI shapefiles, PostGIS, ESRI ArcSDE, GML y otros muchos vía OGR.
- Formatos raster soportados: JPG, PNG, GIF, TIFF/GeoTIFF, EPPL7 y otros vía GDAL.
- Fuentes TrueType
- Configuración “al vuelo” vía URL
¿Qué es PHP/Mapscript?
PHP/Mapscript es un módulo para PHP que permite acceder a la API de MapServer. Éstas funciones y clases estarían disponible dentro de nuestro entorno de desarrollo. El módulo fue desarrollado y es actualmente mantenida por la empresa DM Solutions Group.
La Familia mapscript está refresentada como el siguiente árbol (fuente de dato aquí):
MapServer /\ / \ / \PHPMapScript \ SWIGMapScriptPHP4 +----+-----+----+----+----+ | | | | | | Perl Python Ruby Java Tcl ...
Perl Python Ruby Java Tcl …Y como se ve claramente el PHP es un Mapscript que es más cercano al MapServer y por ende más nativo en la ejecución de nuestras aplicaciones.
El MapFile
El MapServer se caracteriza por tener un archivo de configuración denominado mapfile que tiene como extensión punto map (.map). Aquí se definen los datos a ser usados por nuestra aplicación como los siguientes mencionados: las capas, sus tipos y su configuración; fuente de datos de origen y forma de servir los datos; leyenda y proyecciones ; y muchos otras configuraciones que se desea que se cargen al inicio.
Por tal motivo, podríamos decir que el corazón del Mapserver se configura a través de un archivo de texto que es usado en tiempo de ejecución. Bajo la perspectiva del programador se puede presentar como una jerarquía de objetos con un padre principal y muchos objetos hijos que derivan de él.
Notas sobre MapServer CGI : Aunque este no es el objetivo de nuestro artículo, la forma de utilización como CGI de mapserver es la más tradicional y la usada usualmente en los tutoriales que encontramos en Internet. MapServer CGI trabaja a través de plantillas HTML (templates) y bajo estructuras rígidas de consulta básica. Ahí el archivo .map es de vital importancia para la inicialización de las capas.
El PHP Mapscript rompe ésta rigidez del .map (pues carga las capas configuradas en él al inicializar) y podemos modificar, cambiar e incluso agregar más capas según queramos. Ésto significa que si tenemos una capa de color verde inactiva, podemos modificarla a rojo y activa. Hacer acercamiento o consultar data relevante.
Requerimientos para desarrollar
- Servidor Web: Apache o IIS con el módulo de PHP y PHP-mapscript de Mapserver
- Librerías : PROJ4, OGR, GDAL y utilitarios que iremos requiriendo
- Fuente de Datos: shape files, PostGIS u otra fuente OGR
- Un archivo Mapfile (.map)
- Un editor de texto o ID preferido para PHP.
- Conocimiento básicos de Geodesia y SIG y lo más importante: Muchas ganas de aprender
Estamos con suerte porque los requerimientos 1,2,3 ya vienen incluidos para Windows en un paquete llamado MS4W y lo pueden conseguir aquí.
Para los que están metidos en Linux, verán que encontrarán infinidad de paquetes ya compilador tanto para Ubuntu, Debian o Fedora. Solo se intalarían los debs o rpms correspondientes.
Por otro lado, también en Linux podrían usar un paquete denominado FGS y se encuentra aquí.
Si la instalación en Linux se torna algo dificultosa, pueden solicitar con comentario para crear un artículo dedicado sólo a la instalación del mismo.
Un ejemplo básico:
ejemplo01.php
1
<?php
2 // ejemplo01.php
3 // Jaime M. Tan Nozawa
4
5 //Cargo la extensión MapScript . Verificamos si la extensión ya está cargada por defecto.
6 if (!extension_loaded("MapScript")) dl('php_mapscript.'.PHP_SHLIB_SUFFIX);
7
8 // instanciamos un nuevo objeto: map object. El constructor debe recibir al menos el parámetro de la ubicación del archivo .map
9 $jMap = ms_newMapObj("ejemplo01.map");
10
11 // Renderización
12 $jImagen = $jMap->draw();
13
14 // Creamos y capturamos la ruta de imagen renderizada.
15 $url_imagen = $jImagen->saveWebImage();
16 ?>
17 <HTML>
18 <HEAD>
19 <TITLE>Ejemplo 1</TITLE>
20 </HEAD>
21 <BODY>
22 <IMG SRC=<?php echo $url_imagen; ?> >
23 </BODY>
24 </HTML>
ejemplo01.map
MAP
NAME Pruebas
SIZE 600 400
EXTENT -87.9964 -19.0216 -63.114 1.19528
WEB
IMAGEPATH “C:/ms4w-php5/tmp/ms_tmp/”
IMAGEURL “/ms_tmp/”
END
LAYER
NAME “Departamentos”
STATUS ON
DATA “Lim_dep.shp”
TYPE POLYGON
CLASS
STYLE
COLOR 200 150 2
OUTLINECOLOR 0 0 0
END
END
END
END
En el archivo .map toda entrada es similar a etiquetas HTML porque tienen un inicio y un fin. El Mapfiles estonces está compuesto por objetos y otros que lo contiene.
La estructura de objetos del mapfile sería la siguiente (Fuente: Tutorial MapServer 4.X):
MAP
|+----+-----+----+----+----+| |WEB LAYER
|
+----+-----+----+----+----+| |CLASS ...
Explicando el .map
Una sección relevante del .map es el objeto Web:
WEB
IMAGEPATH “C:/ms4w-php5/tmp/ms_tmp/”
IMAGEURL “/ms_tmp/”
END
Aquí se especifica las rutas donde se van a crear las imágenes renderizadas. Aquí le configuramos que se guarden en: C:/ms4w-php5/tmp/ms_tmp/ (Cámbialo por uno de tu conviencia). Recuerda que esta carpeta debe de poder ser accedido públicamente a través de /ms_tmp/ . (El ms4w ya la configura automáticamente con un Alias en el Apache — httpd.conf : Alias /ms_tmp/ /ms4w-php5/tmp/ms_tmp/ –)
Eso significa que si creamos una archivo : C:/ms4w-php5/tmp/ms_tmp/prueba.gif
Se accede de la forma : http://localhost/ms_tmp/prueba.gif
IMPORTANTE: Cada vez que accedemos a nuestro script PHP : Ejemplo01.php , se percatarán que se crea automáticamente una imagen GIF o JPG con un nombre aleatorio. Esa es la imagen que se muestra hacia el navegante y es capturada en la variable $url_imagen.
El MAP tiene los siguientes atributos
SIZE 600 400
EXTENT -87.9964 -19.0216 -63.114 1.19528
Especifica el tamaño de la imagen (el gif o jpg autogenerado ) y su extent.
El Extent especifica el límite de coordenadas en el cual se mostrará el mapa. En el Caso del Perú, como estamos en el OESTE – SUR … corresponde los puntos: inferior-izquierdo (-87.9964 -19.0216) y superior-derecho (-63.114 1.19528). Mi analogía con trigonometría de matemáticas , es como si estuvieramos en el tercer cuadrante.
El objeto Layer se encuentra contenido dentro del objeto MAP. Y el CLASS dentro del Layer
LAYER
NAME “Departamentos”
STATUS ON
DATA “Lim_dep.shp”
TYPE POLYGON
CLASS STYLE COLOR 200 150 2 OUTLINECOLOR 0 0 0 END END
END
Vemos que nuestra capa llamada “Departamentos” carga un shape file de tipo polígono … y lo coloremos con colores RGB (200 150 2) a través del objeto STYLE que se encuentra dentro del OBJETO CLASS.
STATUS ON: dice que la capa esté activa y se muestre por defecto.
El Resultado:
Shape File : Lim_dep.shp

noviembre 5th, 2007 at 5:08 PM
leyendo tutorial recièn salido del horno….
me gusto ^.^ mapserver rulez..!!
noviembre 6th, 2007 at 4:53 PM
por cierto aqui los resultados…
http://img218.imageshack.us/img218/7744/mapin01pb3.jpg
ahora a hacer lo mismo pero usando PostGIS ^.^ juaa
noviembre 13th, 2007 at 11:29 AM
aja.. ta chevere esta primera parte hee,..
oe chino pon la segunta partex pex….
noviembre 17th, 2007 at 6:11 PM
Ya listo… segunda levantada
diciembre 23rd, 2008 at 3:44 PM
Bueno al fin puedo hacer mi pregunta:
Estoy siguiendo la parte uno del curso de php_MAPSCRIPT.
lo primero que hice es hacer mi mapfile todo sale bien cuando lo publico con el cgi mapserv se publica sin ningun problema.
Cuando le agrego el código PHP y lo llamo http://…../**.php
no me manda ningun error pero tampoco me presenta la imagen del mapa.
otro detalle en el directorio de temporales tampoco se genera ninguna imagen.
que puede pasar.
gracias
diciembre 23rd, 2008 at 4:08 PM
xxxxxxxxxxxxx
codigo .map
MAP
NAME Pruebas
SIZE 600 400
EXTENT -81.328393 -18.351232 -68.653396 -0.038607
#SHAPEPATH “/home/postgres/vectores”
WEB
IMAGEPATH “/usr/local/apache2/htdocs/tmp/”
IMAGEURL “/tmp/”
END
LAYER
NAME Peru_dep
DATA “/home/postgres/vectores/departamentos.shp”
STATUS OFF
TYPE POLYGON
CLASS
STYLE
COLOR 200 150 2
OUTLINECOLOR 0 0 0
END
END
END
END
diciembre 30th, 2008 at 12:37 AM
Yo digo que tu problema es que no tienes instalado el modulo mapscript en tu servidor Linux…
Haz un phpinfo y mira si tienes cargado el módulo… todo parece estar bien
enero 4th, 2009 at 9:21 AM
podrias crear una entada para la instalacion demapserver y todo lo requerido sobre ubuntu. Llevo arto tiempo conla intalacion y aun tengo dudas, instale el paquete de mapserver 5 en ubuntu, pero no puedo acceder alos mapas, por un problema en cgi, tambien tengo un probelma con los conceptos, pero te agradeceria que publicaras algoacercade la instalacion de mapserver sobre ubuntu.
de antemano muchas gracias
claudio Altamirano O.
Estudiante Ing. Informatica
UCtemuco
Chile
enero 5th, 2009 at 4:08 PM
holas ya me salio la leccion uno esro solo cambiar el status pasarlo a on.
sigo a delante con la leccion 2
enero 20th, 2009 at 11:53 AM
El enlace al fichero Lim_dep.shp no está disponible. Por favor, podrías decirme desde dónde puedo bajarlo.
Gracias, Oscar.
enero 20th, 2009 at 2:26 PM
Bueno si, el problema radica en que geocities esta con el limite del ancho de banda de lo que le doy… voy a ver, si lo pongo en algun otro sitio como rapidshare o gigasize
noviembre 11th, 2010 at 8:48 AM
…
BUY FASHION. TOP BRANDS: GUCCI, DOLCE&GABBANA, BURBERRY, DIESEL, ICEBERG, ROBERTO CAVALLI, EMPORIO ARMANI, VERSACE…