Sei sulla pagina 1di 9

Generación Masiva de Mapas usando MapServer, PostGIS, PHP y FPDF.

Sergio Gamarra
Instituto Nacional de Tierras, Coordinación de Sistemas de Información Geográfica sergiogamarra@gmail.com

RESUMEN

Generación automática y masiva de mapas usando programas, librerías y base de datos en Software
libre (MapSever, PHP, FPDF y PostGis). El proceso básicamente sigue los siguientes pasos:

1. Ingreso de la data depurada, adecuada y corregida en la base de datos PostGIS.


2. Aplicación de funciones de creación y adecuación de cobertura de vértices (generación, cálculo de
coordenadas UTM de acuerdo al datum y numeración).
3. Generación automática de los mapas.

De acuerdo al requerimiento se deben ajustar los parámetros, imágenes y funciones para que el
producto muestre la información que se desea. Actualmente el mapa generado de esta manera posee
información de situación relativa nacional, estadal y municipal que son generados de acuerdo al código
del estado y del municipio que se encuentren en la cobertura principal, información de tenencia y de
verificaciones con otras coberturas y finalmente el mapa central donde se despliegan algunas coberturas
básicas (vialidad, centros poblados, hidrografía, etc.) además del predio objeto de la impresión.

INTRODUCCIÓN

El Instituto Nacional de Tierras (INTi) es el encargado de la administración de las tierras con


vocación agrícola en Venezuela, por lo tanto maneja gran cantidad de información espacial referida a
registros prediales, en determinados momentos se hace necesaria su impresión masiva, debiendo el INTi
dedicar una gran cantidad de recursos humanos y tiempo en esa tarea.

Para solucionar esta problemática se desarrolló una serie de funciones en MapServer, PostGIS
(componente espacial de PostgreSQL), PHP y la librería de trabajo con pdf (FPDF), con la combinación
de estas herramientas, más la cobertura de los registros (o cualquier otra cobertura de interés) se
generaron mapas individuales de los mismos de manera automática y masivamente, otra posibilidad es la
de generación de planos individuales con ciertas características con la sola introducción de la lista de
coordenadas del fundo.

MATERIALES Y MÉTODOS

Software usados

Para la programación de las funciones de creación del mapa se utilizaron los siguientes programas:

1. MapServer: Es un entorno de desarrollo en código abierto para la creación de aplicaciones de


visualización, consulta y análisis de información espacial a través de internet/intranet. Es
multiplataforma, se puede ejecutar en Linux o en Windows, soporta los formatos vectoriales más
comunes (shapefile, PostGis, ArcSDE, GML y otros) y raster (JPG, PNG,GIF,GeoTiff, Tiff y
otros). Se puede programar en PHP, Java, Perl, Python, Ruby o C#.

Básicamente está configurado en un archivo de texto con la extensión .map que contiene todas las
características del mapa que queremos presentar: nombre del mapa, sistema de coordenadas,
extent, coberturas, estilos visuales, etc. El formato de salida puede ser gráfico (el mapa) o
alfanumérico (resultado de una consulta espacial). También se puede configurar usando el API de
MapScript, con esta metodología las posibilidades de manejo interactivo del MapServer aumentan
considerablemente.

2. PostGis: Es un módulo que convierte a la base de datos PostgreSQL en una base de datos
espacial, con posibilidades para ser usada en Sistemas de Información Geográfica (SIG), esta
publicada bajo la licencia GNU, se puede instalar en Linux, Windows ó Mac y es el formato ideal
para guardar coberturas de manera robusta para ser usadas por usuarios simultáneos.

3. PHP: Es un lenguaje de programación estructurado para desarrollar páginas web dinámicas con
acceso a información almacenada en una base de datos, usado principalmente para la
interpretación del lado de servidor. Es libre y puede ser desplegado en la mayoría de los
servidores web y en casi todos los sistemas operativos.

4. FPDF: Es una biblioteca escrita en PHP que permite generar archivos en formato pdf, se puede
usar y modificar sin costo alguno ya que es gratis y libre, además existe muchísima información
en internet sobre cómo desarrollar usando esta librería.

Implementación

El desarrollo se hizo usando el lenguaje de programación PHP, en un principio sobre una maquina
en Windows utilizando ms4w (MapServer For Windows), esta es una aplicación que contiene un servidor
Apache y MapServer para Windows y es muy fácil de instalar, sólo basta descargarla gratis de la página
http://www.maptools.org/ms4w/ y grabar la carpeta ms4w en el directorio c: de Windows, sólo se debe
ejecutar en un principio el archivo apache-install.bat y verificar en nuestro navegador que se haya iniciado
el servicio correctamente tecleando en la barra de navegación http://localhost/, debe aparecer el logo de
MapServer y una descripción de las versiones y programas instalados, con esto dejamos listo nuestro
servidor web geográfico para crear nuestra página que generará un documento pdf (el mapa) usando la
librería FPDF. Los datos a desplegarse deberán ser obtenidos de una base de datos geográfica, para ello se
utilizó PostGis, en un principio todas las coberturas que se encontraban en shapefile fueron exportadas a
PostGis usando el programa PostGis Shapefile and DBF loader que se instala por defecto. Posteriormente
se implemento todo en Linux.

Procesos para la generación del mapa

El archivo pdf que contendrá el mapa se compone de un archivo PHP principal más otros de funciones
de definición de variables y de gestión del mapa, el archivo principal contiene toda la estructura de código
necesaria para el funcionamiento de la librería FPDF y genera a través de muestreo por celdas todas las
partes del mapa. Similar al manejo de las coberturas en los SIG FPDF muestra información en el pdf por
capas, esto implica que la primera llamada a “pintar” que hagamos estará literalmente por debajo de las
siguientes llamadas a mostrar sectores en el pdf. De acuerdo a esta lógica lo primero que “pintamos” en el
mapa fue una imagen de fondo (ver figura 1) que contiene el marco general y los marcos internos más los
logotipos, leyenda y cualquier otra información estática que contenga el mapa, y sobre esta información
base iremos colocando cada una de las secciones del mapa que varían de acuerdo al registro a mapear.
Figura 1: Imagen de fondo en formato png.

A continuación un resumen de estas secciones y procesos que se irán pintando sobre nuestra imagen
de fondo:

1. Creación del predio en PostGIS: El proceso comienza con la introducción de coordenadas y el


datum y el huso de las mismas en el archivo de gestión de mapa, que es una página web hecha en
PHP, de acuerdo al datum introducido se produce o no un proceso automático de reproyección al
datum Regven, que es el datum oficial de Venezuela1, en el mismo proceso de reproyección se
crea el polígono correspondiente en la base de datos PostGIS.
Todos estos procesos son gestionados por funciones propias de PostGis llamados por
consultas SQL desde PHP, la consulta utilizada es la siguiente:
"INSERT INTO cons_geo.cg_poligonos (nro_memo,the_geom) VALUES
('".$nro_memo."',(transform(GeometryFromText('MULTIPOLYGON
(".$texto_geometria.")',".$cod_utm."), 4189)));"

Donde $text_geometria es un arreglo con las coordenadas introducidas y $cod_utm es el


código inicial del datum y huso introducido, por ejemplo el datum Regven y el huso 19
corresponden al código SRID 2202, que según la función de transformación utilizada en la

1
Artículo 11 de la ley de Geografía, Cartografía y Catastro Nacional: Toda persona que realice levantamientos
geodésicos o topográficos los referirá al Sistema Geodésico Nacional, de acuerdo a las normas técnicas establecidas
por el Instituto Geográfico de Venezuela Simón Bolívar
consulta será reproyectada al código SRID 4189 correspondiente al sistema de coordenadas
geográficas en datum Regven.

2. Creación del objeto mapa principal: El mapa posee varias secciones, una de estas es el mapa
principal, el que contiene las diferentes coberturas (polígono principal, hidrografía, vialidad,
ortofotos, etc), la grilla y la escala. Para la generación de esta sección se utilizan las funciones de
MapServer que crean una imagen con el mapa, esta imagen es capturada desde la página principal
del mapa y mostrada sobre la imagen marco de fondo en el lugar que le corresponde (ver figura
2). En esta sección del mapa también se introduce un cuadro con la lista de coordenadas que
forman el polígono.

Figura 2: Imagen principal (generada por MapServer) colocada encima del fondo.

3. Creación de los objetos mapas referenciales: Usando la metodología anterior se generaron 3


mapas referenciales: Situación Relativa Nacional, Situación Relativa Estadal y Situación Relativa
Municipal (ver figura 3), utilizando la función de intersección de PostGis obtenemos la ubicación
del estado y el municipio con sus respectivos códigos, estos códigos filtran las coberturas a cargar
y definen el área a mostrar (extent)

Figura 3: Imagen de los mapas referenciales colocados encima del fondo.


Para una eficiente personalización se usó MapScript para la manipulación de MapServer (al igual
que en el mapa principal), un ejemplo del código usado para crear el mapa referencial nacional es
el siguiente:

function sit_rel_nac($cod_est){

$n_min_x=-73; $n_min_y=0.5; $n_max_x=-58; $n_max_y=12.5;

$pdfMapN = ms_newMapObj("pdfN.map");
$pdfMapN->setExtent($n_min_x,$n_min_y,$n_max_x,$n_max_y);
$nLayer = ms_newLayerObj($pdfMapN);
$nLayer->set( "type", MS_LAYER_POLYGON);
$nLayer->set( "status", MS_ON);
$nLayer->setConnectionType(MS_POSTGIS);
$nLayer->set("connection", "user=postgres dbname=desarrollo_sig host=localhost
port=5432 password=1");
$nLayer->set( "name", "Situacion Relativa Nacional");
$nLayer->set("data", "the_geom from (select the_geom, cod_estado, gid from
base.estados where cod_estado='".$cod_est."') as foo using unique gid using
SRID=4189");
$nLayer->set("classitem", "cod_estado");
$nClass = ms_newClassObj($nLayer);
$nClass->setExpression("$codest");
$nStyle = ms_newStyleObj($nClass);
$nStyle->outlinecolor->setRGB(255, 0, 0);
$nStyle->color->setRGB(255, 0, 0);
$imagenN=$pdfMapN->draw();
$imagen_urlN = $imagenN->saveWebImage($imagenN, 0, 0, -1);
$imagen_urlN="C:/ms4w/apache/htdocs".$imagen_urlN;

return $imagen_urlN;

Donde $cod_est guarda la variable del código de estado obtenida en la intersección inicial y filtra
la cobertura a mostrar de acuerdo a este valor, posteriormente obtenemos la imagen del mapa de
referencia, guardado en la variable $imagen_urlN, y lo introducimos en nuestro pdf en el lugar
que le corresponde. Similar proceso ocurre con los otros mapas de referencia.

4. Funciones de verificación espacial: Existen una serie de verificaciones que se les hace al lote de
terreno generado por las coordenadas introducidas a fin de precisar características de tenencia y de
restricciones, así como información adicional que sirven, dependiendo de la escala, como guía
para la caracterización general del predio. Básicamente lo que ocurre es un proceso de
comparación entre el predio creado y las diferentes coberturas de interés para el INTi, que arroja
resultados de superposición entre uno y otros, obteniendo información asociada al predio de las
siguientes coberturas:
a. Fundos Inti.
b. ABRAES.
c. Fundos Zamoranos.
d. Baldíos Genéricos.
e. Registro de Predios Rurales.
f. Otras características físico naturales.
g. Estructuras Presentes.
Utilizando funciones de intersección de PostGis, a través de consultas en SQL, obtenemos la
información asociada al predio además del polígono producto de la intersección, un ejemplo de
consulta utilizada en la verificación del predio principal con los fundos INTi es el siguiente:

"SELECT a.gid, a.expediente, a.fundo, AsText(ST_Multi(ST_Buffer(


ST_Intersection(a.the_geom, b.the_geom),0.0)
)) As clipped_geom, area(transform((ST_Multi(ST_Buffer(
ST_Intersection(a.the_geom, b.the_geom),0.0)
)),$cod_utm)) as mts_int
FROM tematicas.fundos_inti as a
INNER JOIN cons_geo.cg_poligonos as b
ON ST_Intersects(a.the_geom, b.the_geom)
WHERE Not ST_IsEmpty(ST_Buffer(ST_Intersection(a.the_geom,b.the_geom),0.0)) and
b.cod_cg=$cod_cg;";

En esta consulta, cuando hacemos la intersección, obtenemos la información de solapamiento y la


geometría resultante de la misma (ver figura 4), procesos similares se aplican para la verificación
con todas las coberturas de interés.

Figura 4: Información de solapamiento y visualización del área solapada.


5. Mapa Resultado: Finalmente en el mapa resultado convergen todos los procesos descritos
anteriormente. (ver figura 5)

Figura 5: Mapa Resultado.

6. Gestión del mapa: Para corregir detalles asociados a la estética del mapa, por ejemplo, quitar
alguna cobertura que sobrecarguen al mapa y no lo haga visualmente agradable, el módulo que
sirve para la carga de coordenadas también sirve para gestionar las coberturas del mapa, en este
podemos decidir que ver y que no ver según nuestro criterio (ver figura 6)

Figura 6: Módulo de gestión del mapa.


Proceso de generación por lotes.

Los procesos descritos anteriormente sirven para hacer un mapa automáticamente con sólo
introducirle una lista de coordenadas, sin embargo hay momentos donde es necesaria la impresión masiva
de mapas, generalmente para la sustanciación de expedientes, y aunque el ahorro en la elaboración del
mapa es sustancial cuando sólo es necesario introducir una lista de coordenadas no es suficiente para
cumplir con los requerimientos de la institución, es por esto que, con leves modificaciones, e
introduciendo una cobertura en PostGis con la información de todas las poligonales y con un proceso
reiterativo tipo bucle, podemos generar masivamente todos los mapas, la experiencia nos ha demostrado
que podemos generar un aproximado de 2100 mapas con características similares al mapa mostrado a lo
sumo en 30 minutos, sin contar el tiempo invertido en la creación de la cobertura general y la adecuación
de la misma. Para estos casos la página de gestión del mapa no se utiliza.

RESULTADOS

La implementación de estas técnicas en el Instituto Nacional de Tierras han supuesto un ahorro


importante en recursos humanos y tiempo, tareas que antes tardaban semanas y muchas personas hoy se
hacen en cuestión de horas y con un mínimo de personal.

Hasta la fecha se han usado estas técnicas en aproximadamente cuatro jornadas masivas de
impresión de mapas individuales, lo que representaría un aproximado de más de 5000 mapas generados
de esta manera, téngase en cuenta que estos procesos de impresión no son lo cotidiano en la dinámica del
instituto mas cuando se necesitan, los tiempos de la solicitud del requerimiento son extremadamente
cortos para el caudal de trabajo que representa, en estos momento es cuando se hace evidente la
importancia del uso de estas técnicas.

Por otro lado la impresión individual del mapa con fines de verificación de tenencia y
restricciones representa un porcentaje importante del trabajo cotidiano que se hace en la Sala de Geografía
del INTi, logrando con el uso de esta herramienta reducir y homogeneizar la respuesta del requerimiento
de información que se le hace a esta instancia.

CONCLUSIONES

El resultado aquí descrito (creación de mapas) es generalmente asociado exclusivamente al uso de


SIG ó de herramientas de dibujo CAD por su versatilidad y posibilidades casi infinitas de personalización,
mientras que contrario a esto, la creación de un mapa, ya sea para su impresión o visualización vía web,
hecho por MapServer, implica todo un proceso complejo y de mucho trabajo laborioso, hacer un mapa en
MapServer con las características básicas (grilla, situación relativa, leyenda, etc.) toma muchísimo más
tiempo que hacerlo en un software SIG de escritorio, sin embargo cuando ya tenemos un mapa
desarrollado con estas características podemos hacer miles en el tiempo en que en un software SIG
convencional de escritorio se hace sólo uno.

BIBLIOGRAFIA

REPÚBLICA BOLIVARIANA DE VENEZUELA (2001). Ley de Tierras y Desarrollo Agrario.


Documento en Línea. Disponible en:
http://www.efemeridesvenezolanas.com/documentos/html/leytierras.htm.
http://es.wikipedia.org/wiki/MapServer
http://es.wikipedia.org/wiki/PostGIS
http://es.wikipedia.org/wiki/PHP
http://es.wikipedia.org/wiki/Fpdf
http://www.fpdf.org/
http://mapserver.gis.umn.edu/
http://www.pmapper.net/
http://www.php.net/
http://www.postgresql.org/
http://postgis.refractions.net/

*Para más información y consultas ver http://sergiogamarra.blogspot.com/

Potrebbero piacerti anche