#ElPerúQueQueremos

PHP-Mapscript de Mapserver. Parte 2: Volviendo dinámico el MapFile

Publicado: 2007-11-15

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.En esta segunda parte del tutorial intentaremos hacer más dinámico nuestro MapFile (.map). Como vimos en la parte 1, pudimos crear un archivo de configuración inicial y cargar los datos que se mencionan en el contenido del archivo. Ahora queremos capturar los datos(propiedades) y modificar los datos que se encuentran dentro del archivo; claro, sin tener que entrar al .map para realizar un cambio, sino sólo realizándolo por código.1. Primero el .map quedará como el siguiente para hacerlo más interesante:#Inicio mapfileMAPNAME PruebasSIZE 600 400EXTENT -87.9964 -19.0216 -63.114 1.19528WEBIMAGEPATH "C:/ms4w-php5/tmp/ms_tmp/" #Esto puede variar segun tu configuracionIMAGEURL "/ms_tmp/"ENDLAYERNAME "Departamentos"STATUS ONDATA "Lim_dep.shp"TYPE POLYGONCLASSITEM Nom_DepCLASSNAME "LIMA"EXPRESSION /LIMA/STYLECOLOR 200 150 2OUTLINECOLOR 200 200 200ENDENDCLASSNAME "OTROS"EXPRESSION /.*/STYLECOLOR 100 28 55OUTLINECOLOR 0 0 0ENDENDENDEND#Fin mapfileComo nos percatamos ahora he agregado nuevas opciones (en negrita) de nuestro mapfile inicial.Nuetra objeto layer ahora dispone de una propiedad más:CLASSITEM Nom_Dep con él podemos escoger un campo dentro de la tabla, en este caso Nom_dep, para poder hacer algunas búsqueda y filtrar o segmentar según diferentes criterios.En nuestro objeto CLASS que se encuentra dentro de LAYER ahora dispone de más propiedades: CLASSNAME "LIMA" EXPRESSION /LIMA/STYLECOLOR 200 150 2OUTLINECOLOR 200 200 200ENDENDEn este caso estoy poniéndole un nombre a ese CLASS : LIMA , y el filtro se hace según una expresión regular en este caso /LIMA/ osea busca dentro de la columna Nom_dep todas los registros que contienen la palabra" LIMA".En el otro STYLE denominado OTROS , la expresión regular /.*/ significa uno o más caracteres. En otras palabras todas los restantes. y fíjense que cada CLASS se colorea con colores diferentes tanto sus bordes como el contenido.2. Ahora procederemos a agregar más lineas en nuestro Ejemplo01.php y lo renombraremos aejemplo02.php 1 <?php2 // ejemplo02.php3 // Jaime M. Tan Nozawa45 //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);78 // instanciamos un nuevo objeto: map object. El constructor debe recibir al menos el parámetro de la ubicación del archivo .map9 $jMap = ms_newMapObj("ejemplo01.map");1011 // Renderización12 $jImagen = $jMap->draw();1314 // 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 <br>24 <?php25 // Obtenemos Propiedades del MapaObj llamado jMap26 echo "Nombre mapa: {$jMap->name}<br>";27 echo "Extent mapa: {$jMap->extent->minx} // {$jMap->extent->miny} // {$jMap->extent->maxx} // {$jMap->extent->maxy} <br>";28 echo "Tama&ntilde;o imagen: {$jImagen->width} {$jImagen->height}<br>";29 echo "Escala: 1/{$jMap->scale}<br><br>";30 // echo ms_GetVersion()31 ?>32 </BODY>33 </HTML>Vemos claramente como podemos acceder a las propiedades del MapObj: $jMap$jMap->name : propiedad nombre del object MapObject$jImagen->width : ancho de la imagen en pixels$jMap->extent->miny (minx) (maxx) (maxy) para capturar extent del mapaLa escala no está es muy buena proporción por que se esta usando coordenadas geodésicas (no obtiene áreas)en próximos tutoriales veremos como corregir esta opción.3. Ahora que ya mas o menos conocen los objetos y las propiedades , les dejo algo de código interesante para que lo analicen: 1 <?php2 // Obtenemos las capas34 $jCapas=$jMap->getAllLayerNames();5 $layersOn = array();6 foreach ($jCapas as $idx => $layer) {78 $capaObj=$jMap->getLayerByName($layer);910 if ($capaObj->status==MS_ON) {11 echo "** CAPA :{$capaObj->name} **<ul>";1213 for($i=0;$capaObj->getClass($i);$i++){14 $Class = $capaObj->getClass($i);15 echo "<li>CLASS:16 <ul>17 <li>NOMBRE CLASS: {$Class->name}</li>18 <li>EXPRESION: {$Class->getExpression()}</li>19 <li>COLOR: {$Class->getStyle(0)->color->red} {$Class->getStyle(0)->color->green} {$Class->getStyle(0)->color->blue}</li>20 </ul></li>21 ";2223 }2425 echo "</ul>";26 }2728 }29 ?>Resultado:continuará...


Escrito por

Jaime M. Tan Nozawa

Apasionado por la informática y ciberseguridad. Master en CiberSeguridad - MCIS (UCM), Sc.D. IT, MDTI (UEMC).


Publicado en

MulaSoft Libre

La libertad de codigo también mulea: PHP, GNU Linux, SIG libre, CASE libres y todo lo que se te ocurra