PHP MapScript: Cliente generado dinámicamente a partir del MapFile

[Visto: 13702 veces]

PHP mapscript es una librería para ampliar funcionalidades a PHP de manera que trabaje con MapServer.

Para comenzar a trabajar con MapScript recomiendo leer los posts sobre MapScript por un compatriota Jaime M. Tan Nozawa:

http://softwarelibre.lamula.pe/2007/11/05/php-mapscript-de-mapserver-parte-1-conceptos/

Además de la documentación de PHP mapscript

http://mapserver.org/mapscript/php/index.html

Dado que para publicar capas con MapServer se tiene que configurar una estructura de datos con nombres, fuentes de datos, descripción, metadatos, etc, (MapFile) me parece redundante tener que a su vez crear nuevamente una estructura de datos en javascript para visualizar el servicio creado.

Debido a ello, y sabiendo el potencial de MapScript para manejar y manipular MapFiles, decidí crear un código que genere dinámicamente el código javascript para visualizar un servidor MapServer en base a su MapFile.

CC-GNU GPL Descargue el código del siguiente enlace:
gisweb.php en zip

Para crear este script lo primero que hice fue diseñar un cliente con MapFish (ver post). Luego tomé las secciones que varían de MapFile en MapFile e inserté el código PHP necesario para que lea la información y cree el javascript dinámicamente.

Debido a que estoy trabajando con dos lenguajes de programación en un post y tratando de explicarlos, he tratado de poner guías como OL cuando hablo de objetos de OpenLayers y MS cuando hablo de objetos de MapServer y MapScript cuando considero que las cosas son un poco confusas. Pero dejo a los comentarios el pedir aclaraciones con respecto a los términos.

1. Cargando la Librería

<?php if (!extension_loaded("MapScript")) dl('php_mapscript.'.PHP_SHLIB_SUFFIX); ?>

Si se configura correctamente el php.ini para incluir MapScript no es necesario agregar esta linea, sin embargo, de manera mas específica solicita que se cargue si es que no está predeterminado que lo haga.

2. Declarando variables globales

<?php $nombreMapa = $_GET['gis']; if (!lnonly($nombreMapa)) exit("Error en el parametro 'mapa' del url."); $jMap = ms_newMapObj("/gismap/".$nombreMapa.".map"); $wms_title=$jMap->web->metadata->get("wms_title"); $wms_srs=strtok(trim($jMap->web->metadata->get("wms_srs")), " "); $wms_onlineresource=$jMap->web->metadata->get("wms_onlineresource"); $map_extent=$jMap->extent; ?>

Las variables que declaro son necesarias en el resto del código y/o son llamadas muy comunes:

$jMap es el objeto mapa. Para crearlo es necesario como parámetro su ubicación. Por seguridad solo permito MapFiles dentro de la carpeta /gismap/ y solo permito nombres alfanuméricos (no espacios ni ningún otro símbolo).

$wms_title es el título del servidor wms escrito en la metadata del MapFile.

$wms_srs es la proyección. La proyección es un poco problemática en términos de la lectura de la variable. La razón es que se pueden tener varias proyecciones, por ejemplo: “EPSG:32717 EPSG:4326”. Yo asumo que solo hay uno y si hubieran varios tomo el primero, sin embargo me parece que ahí se podría crear la funcionalidad de trabajar con las distintas proyecciones que ofrece el mapa.

$wms_onlineresource es el enlace al servidor WMS.

$map_extent es la extensión del mapa en coordenadas.

3. Título del Mapa

<h1 style="font-size: 20px;"><?php echo $wms_title; ?></h1>

Utilizamos la variable $wms_title para darle un título al mapa

4. Parámetros del Mapa

var options = { units:'meters', maxExtent: new OpenLayers.Bounds(<?php echo $map_extent->minx.",". $map_extent->miny.",". $map_extent->maxx.",". $map_extent->maxy; ?>), projection:new OpenLayers.Projection("<?php echo $wms_srs; ?>"), maxResolution: <?php echo ($map_extent->maxx-$map_extent->minx)/200; ?>, maxZoomLevel: 10 };
mapita=new OpenLayers.Control.OverviewMap( { div: $('overviewmap'), mapOptions:{ maxResolution: <?php echo ($map_extent->maxx-$map_extent->minx)/50; ?>, minResolution: <?php echo ($map_extent->maxx-$map_extent->minx)/400; ?> } });

Los parámetros del mapa que cambian de acuerdo al MapFile tienen que ver con la extensión y proyección del mapa.

Los bordes (bounds) permiten identificar el área del mundo que se observará en el mapa.

La proyección había sido obtenida en los parámetros globales.

Las resoluciones son cálculos basados en la extensión y también importante, en las unidades en las que están estas coordenadas (a pesar que las unidades están en hard code como metros, eso tiende a no hacer mucho efecto en el mapa).

El divisor de las resoluciones debería ser la extensión en píxeles del mapa en el html (alto o ancho), sin embargo, este número simplemente sirve de base para ir ajustando a la resolución que se vea mejor. Los número que se ven son los que funcionaron mejor para todos mis ejemplos.

5. Capas

<?php $jCapas=$jMap->getAllLayerNames(); foreach ($jCapas as $idx => $layer) { $capaObj=$jMap->getLayerByName($layer); $esBase=false; if ($capaObj->metadata->get("JC_BASE")!=") $esBase=$capaObj->metadata->get("JC_BASE"); else if ($capaObj->type==MS_LAYER_POLYGON || $capaObj->type==MS_LAYER_RASTER) $esBase=true; else $esBase=false; $visibility=($capaObj->status==MS_ON?"true":"false"); $singleTile=(($capaObj->labelitem!=")?"true":"false"); echo "tt".label_encode($capaObj->name). " = new OpenLayers.Layer.WMS(". "{$capaObj->name}",". "{$wms_onlineresource}",". "{". "units:'m',". "layers:'{$capaObj->name}',". "transparent:true,". "format:'image/png',". "'VERSION':"1.1.1". "},". "{". "isBaseLayer:".$esBase.",". "projection: new OpenLayers.Projection("{$wms_srs}"),". "visibility:".$visibility.",". "singleTile:".$singleTile. "}". ");n"; echo "ttmap.addLayers([".label_encode($capaObj->name)."]);n"; echo "ttmap.raiseLayer(".label_encode($capaObj->name).",-".$idx.");n"; } ?>

En este código obtenemos todas las capas con llamada getAllLayerNames() y con cada una de ellas generamos el código javascript que cree el objeto Layer de OpenLayers(OL) y lo agregue al mapa(OL).

5.1 isBaseLayer

Lo primero que necesitamos es definir si la capa es base (isBaseLayer). Para esto se asumen 2 reglas:

  • Si es que contiene un campo de metadata (MS) llamado JC_BASE, entonces ese campo define si la capa es base o no. No existe limitante en términos de como “crear un nuevo campo de metadatos”, es decir, se puede simplemente editar el MapFile y agregarlos manualmente.
  • De no existir el campo JC_BASE, entonces si es una capa (OL) Raster o Poligonal se trate toma como base, sino se toma como no base.

5.2 Visibilidad

Lo siguiente es determinar la visibilidad. En este caso admito que puedo estar errado en asignarlo de acuerdo al estado MS_ON, la documentación de MapServer no es muy clara. En todo caso, las capas me aparecen apagadas y he llegado a pensar que es lo mejor considerando la posibilidad de ejemplos con una gran cantidad de capas.

5.3 singleTile

Luego determinamos si la capa será tratada como un solo tile o como una serie de tiles pegados uno al otro. La idea de trabajar con múltiples tiles es que se tengan múltiples paneles que mejoren la manera en la que el usuario ve los mapas mientras están cargando y mientras se está moviendo por ellos. Sin embargo, el problema es que cuando se fracciona los mapas con etiquetas (labels) en múltiples tiles se genera fraccionamiento en los textos, debido a que cada tile es generado independientemente y sin la idea de que sean parte de un todo.

Para evitar que se genere este efecto, se utiliza singleTile cuando una capa posee el elemento labelitem (MS)

5.4 Creación de la variable Layer (OL)

Al crear la variable primero se crea su nombre con la llamada a la función label_enconde que elimina los espacios en blanco y otros caracteres para adaptar el nombre de la capa, y creamos el objeto OpenLayers.Layer.WMS (ciertos parámetros están en Hard Code, obviamente el código ha sido diseñado tomando un caso base en el cual funciona. Para hacerlo funcionar en otros casos se tiene simplemente que cambiar el Hard Code o pasar los datos como parámetro).

5.5 Añadir la Capa al mapa

Además de hacer la llamada a addLayers, también hago una llamada a raiseLayer para evitar que el orden en el que se insertan las capas haga que se vean en orden inverso en el cliente MapFish.

6. Modelo para LayerSwitcher (selector de capas)

var model = [ <?php $primero=true; $grupo=''; foreach ($jCapas as $idx => $layer) { $capaObj=$jMap->getLayerByName($layer); if ($grupo!=$capaObj->getMetaData('wms_layer_group')) { if ($grupo!='') { echo "tttt ]n". "ttt }n"; } $grupo=$capaObj->getMetaData('wms_layer_group'); if ($grupo!='') { if ($primero) $primero=false; else echo "ttt ,n"; echo "ttt {n". "tttt text:"{$grupo}",n". "tttt leaf:false,n". "tttt expanded:true,n". "tttt children:[n"; } } else if ($primero) $primero=false; else echo "ttt ,n"; echo "ttt {n". "tttt text:"{$capaObj->getMetaData('wms_title')}",n", "tttt layerName:"{$capaObj->name}",n", "tttt checked:false,n"; if (($capaObj->numclasses)>1){ echo "n". "tttt leaf:false,n". "tttt expanded:false,n". "tttt children:[n"; $primero2=true; for($i=0;$capaObj->getClass($i);$i++){ if ($primero2) $primero2=false; else echo "tttt ,n"; $Class = $capaObj->getClass($i); echo "tttt {n". "ttttt text:"{$Class->name}",n". "ttttt icon:".$wms_onlineresource.(strstr($wms_onlineresource,"?")?"&":"?"). "LAYER=".rawurlencode($capaObj->name). "&RULE=".rawurlencode($Class->name). "&SERVICE=WMS". "&VERSION=1.1.1". "&REQUEST=GetLegendGraphic". "&FORMAT=image%2Fpng". "&WIDTH=16". "&HEIGHT=16",". "ttttt leaf:truen". "tttt }n"; } echo "tttt ]n"; } else{ echo "n". "tttt leaf:true,n". "tttt icon:".$wms_onlineresource.(strstr($wms_onlineresource,"?")?"&":"?"). "LAYER=".rawurlencode($capaObj->name). "&RULE=".rawurlencode($capaObj->getClass(0)->name). "&SERVICE=WMS". "&VERSION=1.1.1". "&REQUEST=GetLegendGraphic". "&FORMAT=image%2Fpng". "&WIDTH=16&HEIGHT=16"n"; } echo "ttt }n"; } if ($grupo!='') echo "ttt ]nttt}n"; ?> ];

Ya he mencionado en el post anterior sobre MapFish que existe la opción de que el LayerSwitcher (OL) cree automáticamente el árbol que va a mostrar. Sin embargo, esa opción es muy simple y no maneja temas como layer_group (MS), que es un campo de metadata que se interpreta casi como carpetas en las cuales pueden estar las capas. La lógica que sigo para crear el modelo es la siguiente:

  • Los layer_group son obviamente los primeros en ir después de la raiz. También en la raíz están aquellas capas (MS) que no tiene layer_group (MS).
  • Las capas (MS) se insertan en la raíz o en su determinado layer_group y si es que tienen una sola clase (leyenda de 1 elemento) entonces la capa no tendrá nodos hijos y si tiene mas de una clase (leyenda de mas elementos) entonces su nodo a su vez tendrá como hijos la descripción de cada clase y su icono.
CC-GNU GPL Descargue el código del siguiente enlace:
gisweb.php en zip

Edit: Debido a algunos comentarios realizados de manera privada me he percatado que he agregado algunas cosas a la carpeta mfbase por lo que pongo mi versión para descargar mfbase (cliente web parte de MapFish)

Saludos.

Puntuación: 4.80 / Votos: 5

30 pensamientos en “PHP MapScript: Cliente generado dinámicamente a partir del MapFile

  1. ezequiel bellini

    hola ! la verdad que es muy buen material. estoy aprendiendo mucho gracias a usted!!

    soy de Argentina. Me llamo Ezequiel, lo que si me esta tirando un error, yo necesito poder llamar un mapfile que esta en otro computadora por lo que cambie la ruta
    $jMap = ms_newMapObj("/gismap/".$nombreMapa.".map");

    a algo asi:

    $jMap = ms_newMapObj("http://10.50.5.70/saludos/".$nombreMapa.".map");

    es decir que busque el mapfile de otra computadora.

    su busco http:///10.50.5.70/saludos/hola.map en el explorer lo puedo ver tranquilamente, pero si tiro el gisweb.php?gis=hola me tira el siguiente error:

    Warning: [MapServer Error]: msLoadMap(): (http://10.50.5.70/saludos/h…) in /var/www/website/htdocs/ms1/gisweb.php on line 87
    porque sera?

    un saludo muy grande !! tus posteos son geniales!! realmente estoy aprendiendo mucho !
    Ezequiel,
    Buenos Aires, Argentina

    Responder
  2. cortez-jc Autor

    Saludos Ezequiel,

    Agradezco mucho tus comentarios, que bueno que pueda ayudar a otros como en algun momento otros recursos me ayudaron a mi.

    Con respecto a tu problema, es que estás insertando una ruta que utiliza el protocolo HTTP lo cual no es una ruta del sistema de archivos. Explorer y los manejadores de archivos abren estas direcciones como una facilidad al usuario pero es importante entender que son cosas distintas.

    Copia el archivo que puedes descargar a una carpeta local, o si es que necesitas tener centralizado el .map puedes probar como archivo compartido y accediendo \ipruta (windows o samba) o ip:/ruta (linux). (OJO que tiene que ser la ruta de archivo compartido y no la de HTTP).

    Responder
  3. Damian

    Juan Carlos, dese ya muchas gracias por la ayuda que nos estas dando con todo esto, yo soy amigo de ezequiel y estaba queriendo realizarlo como mencionaste pero me arroja el sgte. error :S
    Warning: [MapServer Error]: msLoadMap(): (10.50.5.70:/c$/ms4w/Apache/htdocs/saludos/hola.map) in /var/www/website/htdocs/gisweb.php on line 89

    Warning: [MapServer Error]: msLoadMap(): (http://10.50.5.70/saludos/.map) in /var/www/website/htdocs/gisweb.php on line 89

    Warning: [MapServer Error]: msLoadMap(): (http://10.50.5.70/saludos/m…) in /var/www/website/htdocs/gisweb.php on line 89

    Warning: [MapServer Error]: msLoadMap(): (http://10.50.5.70/saludos/m…) in /var/www/website/htdocs/gisweb.php on line 89

    Warning: Failed to open map file 10.50.5.70:/c$/ms4w/Apache/htdocs/saludos/hola.map in /var/www/website/htdocs/gisweb.php on line 89

    Fatal error: Call to a member function get() on a non-object in /var/www/website/htdocs/gisweb.php on line 95

    si me puedes dar una mano, estaria mas que agradecido..
    Muchas gracias,
    Damian, Buenos Aires

    Responder
  4. Ezequiel Bellini

    Juan Carlos! muchisimas gracias por las rapidas respuestas. ahora mismo vamos a seguir haciendo pruebas. por ahora seguimos pegados al html, pero bueno seguimos luchando para ver como sacarlo andando!,. tienes un correo electronico? estas abierto a trabajar como consultor para un organismo del gobierno en buenos aires, Argentina?

    🙂

    saludos!
    Ezequiel Vladimir Bellini

    Responder
  5. cortez-jc Autor

    @hvasquez Necesitas buscar mas información con respecto a por qué se produce el error.

    Intenta abrir tu página en mozilla o chrome y ver que errores de javascript se producen (ie8 también tiene debugger pero no lo he probado).

    Si es algo de servidor como lo mencionas, habilita la visualización de errores (display_errors) de manera que puedas ver por que se queda en ese paso.

    Saludos.

    Responder
  6. Jose R

    Hola:

    Muchas gracias por todo este trabajo y los videos que has colgado en Youtube, me están ayudando mucho.

    Con este gisweb.php estoy teniendo un problema similar a hvasquez, que Javascript se queda cargando el archivo map. He mirado en la consola de errores de Firefox y me aparecen varias advertencias y un error:

    Error en gisweb.php:
    Error: syntax error
    Archivo de origen: http://mapserverdemo/gisweb
    Línea: 179, columna: 7
    Código fuente:
    eLayer:,projection: new OpenLayers.Projection("EPSG:25830"),visibility:true,singleTile:false});

    Mirando el código php referido:

    "{".
    "isBaseLayer:".$esBase.",".
    "projection: new OpenLayers.Projection("{$wms_srs}"),".
    "visibility:".$visibility.",".
    "singleTile:".$singleTile.

    parece ser que la variable $esBase la deja "vacía", dando el error. En mi .map tengo 5 capas (3 poligonales y 2 de tipo LINE), no tengo ninguna capa base definida.

    Gracias y un saludo

    Responder
  7. Rodrigo Nascimento Hernandez

    Hola Juan Carlos. Antes de todo perdóname se mi castellano no es el mejor, mi habla principal es el portugués de Brasil.
    Muchísimas gracias por los tutoriales y todo. Hace algunos años empecé con Mapserver pero realicé que no había como establecer una forma de trabajo practica, que se pudiera utilizarse en el día a día, principalmente visto que no soy expert en programación pero si me gusta mucho los asuntos de SIG. Veo que ahora las herramientas son muchas y por la primera vez ahora, a partir de su aula http://www.youtube.com/watc… y los tutoriales conseguí establecer una línea de producción en la disponibilizacion de mapas simples, quizás puede ser manejado por usuarios finales con algunos simples ajustes. Muchas gracias por la oportunidad.

    Algunos puntos interesantes en relación a todo lo proceso (en mi caso):
    1- El gvSIG parece que no le gusta las versiones mas recentes de Mapserver. No he conseguido cargar de WMS 1.3 (mapserver 5.6), tanto en gvSIG 1.1.2 como en gvSIG 1.9., considerando el mapfile previamente creado por el modulo de publicación en el 1.1.2. Creo sea un bug con gvSIG porque los mapfiles creados en el modulo de publicación se han cargado perfectamente con su script PHP. He conseguido apenas cargar de WMS utilizando versión compilada de mapserver 5.4 y WMS 1.1.1 (versiones de WMS informadas por gvSIG).
    2- En su código PHP hay un pequeño "problema" cuando interpretado por versiones mas recentes de PHP (acá PHP5.4 en Ubuntu). El comando ‘ereg_replace’ tiene que se substituir por ‘preg_replace’. ereg_replace está "deprecated" en las últimas versiones de PHP.

    Gracias, suerte en todo e saludos desde Brasil.

    Rodrigo

    Responder
  8. cortez-jc Autor

    Hola Ariel,

    Como está planteado el programa no, pero se puede adaptar.

    Puedes agregar una ruta determinada (por ejemplo: ruta de Buses), y representarla con este script. El "dinamismo" de mi programa es para evitar configurar el cliente si el servidor ya tiene la información, pero si lo que buscas es por ejemplo hacer click en 2 puntos y que el sistema represente la ruta entre ellos entonces estamos hablando de otra forma de "dinamismo" (disculpen las comillas mal usadas, no hay negrita)

    Si buscas algo mas orientado al segundo caso que te propongo entonces deberías revisar pgRouting (http://pgrouting.postlbs.org/).

    Aprovecho para comentarte que en el momento estoy trabajando en una herramienta con ese dinamismo.

    Saludos

    Responder
  9. Patricio Soriano

    Saludos Juan Carlos.
    En primer lugar darte mis felicitaciones por la entrada y el blog en general.

    Intentaré ser claro en mi problema por si me puedes ayudar.

    Sobre una máquina Ubuntu con servidor apache2 he intentado probar el fichero gisweb.php. He creado el .map sin problema con gvsig, el fichero y datos están en las carpetas /gismap y /gisdata.

    Tengo instalado igualmente mapfish (no sé si es necesario) y copiado tu carpeta mfbase en /mfbase.

    Al intentar abrir gisweb.php (http://localhost/gisweb.php…) la aplicación se queda iniciando.

    Revisado con firebug me sale el siguiente mensaje:
    Ext is not defined
    [Break on this error] Ext.BLANK_IMAGE_URL = ‘/mfbase/ext/resources/images/default/s.gif’;

    Y aqui me quedé. ¿Me podrías ayudar?. De ante mano muchas gracias.

    Patricio Soriano

    Responder
  10. cortez-jc Autor

    Jose Carlos, gracias por tus comentarios.
    Rodrigo, muchas gracias por tus aportes.

    Patricio,
    Ext es una variable de la librería ExtJS (http://dev.sencha.com/deplo…), que es utilizada por MapFish. El error indica que no está inicializándose o leyendola correctamente.

    Te recomiendo que revises el código fuente del javascript generado, tal vez algún warning o error del php no se esté mostrando pero si se esté imprimiendo dentro del código volviéndolo inservible.

    Si todo pareciera estar bien, otra opción es que grabes la página generada por php como un html estático y comiences a editarlo simplificándolo hasta hacerlo funcionar, así podrás identificar por qué deja de hacerlo.

    Saludos

    Responder
  11. Cristina Frutos

    hola tu trabajajo es muy interesante pero no me funciona tengo problema al cargar el archivo punto map
    Fatal error: Call to a member function get() on a non-object in C:ms4wApachehtdocsgismapgisweb.php on line 50
    la verdad no se como resolverlo si me puedes ayudar me ayudarias mucho
    gracias

    Responder
  12. Byron sliger

    Buenas noches Juan Carlos,
    Saludos desde Colombia,

    Tengo un error bien grave que no he podido dar con el, el error se presenta en javascript, la verdad no se si es porque halla configurado el .map (que dudo mucho ya que lo genere con gvSIG).
    El error se produce cuando llamo el metodo map.zoomToMaxExtent(); la una forma que me pude dar cuenta fue con el debug de google crhome y el firebug de mozilla.

    el error que sale es el siguiente
    1972Uncaught TypeError: Cannot call method ‘getCenterLonLat’ of null
    OpenLayers.Map.OpenLayers.Class.zoomToExtent Map.js:1972
    OpenLayers.Map.OpenLayers.Class.zoomToMaxExtent Map.js:2016
    createToolbar gisweb.php:191

    y se produce porque bounds se encuentra null e intenta llamar al metodo getCenterLonLat(), no se que pasara… pero al ocorrir ese error se queda el div con la mascara de "cargando…".

    espero me pueda ayudar Juan Carlos, o cualquier otro que se halla presentando el mismo caso mio, de antemano doy muchas gracias.

    Responder
  13. jaime

    saludos..
    tengo un error a la hora de publicar el wms del archivo .map, ya que cuando le doy conectar en gvSIG me sale un aviso que no es posible la conexion con el wms.
    Tengo instalado el ms4w con mapserver 4.
    Espero que me puedan ayudar…gracias..

    Responder
  14. Ernesto Javier Rua Aguirre

    Hola Juan Carlos, Excelentes vídeos, te escribo desde Cartagena,Colombia, soy Ing. Sistemas y estoy trabajando algo de GPS desde mi movil Android, de hecho envió la posiciones desde mi movil a un servidor web, almacenándo las posiciones en una BD de MYSQL, eh hecho la representación de los mapas con OpenLayers, ej: http://200.6.171.210/ol_cf, pero ahora como le hago para representar los puntos por donde se mueve mi movil que esta en la BD, eh investigado y no lograr encontrar software open que me ayude a realizar dicha tarea, de acuerdo a las investigaciones esto se llama creo TRANKING(rastreo), que que hago para representar los puntos cardinales en una mapa desde una BD o tambien?, si puedes ayudarme con cualquier link o tutorial o ejemplo te lo agradezco.

    Responder
  15. Ernesto Javier Rua Aguirre

    Hola Juan Carlos, Excelentes vídeos, te escribo desde Cartagena,Colombia, soy Ing. Sistemas y estoy trabajando algo de GPS desde mi movil Android, de hecho envió la posiciones desde mi movil a un servidor web, almacenándo las posiciones en una BD de MYSQL, eh hecho la representación de los mapas con OpenLayers, ej: http://200.6.171.210/ol_cf, pero ahora como le hago para representar los puntos por donde se mueve mi movil que esta en la BD, eh investigado y no lograr encontrar software open que me ayude a realizar dicha tarea, de acuerdo a las investigaciones esto se llama creo TRANKING(rastreo), que que hago para representar los puntos cardinales en una mapa desde una BD o tambien?, si puedes ayudarme con cualquier link o tutorial o ejemplo te lo agradezco.

    Responder
  16. cortez-jc Autor

    Hola Ernesto, si lo que deseas es representar puntos almacenados en una base de datos puedes hacerlo de 2 formas:

    1. Utilizar una base de datos GIS como postgis o mysql spatial extension y configurar un servidor GIS como mapserver o geoserver para mostrarlas.

    2. crea un php que tome la información y forme un archivo en formato vectorias (Ej Well Known Text)

    Responder
  17. Andres G.

    Disculpa tengo un pequeño gran problema, resulta que ya realice varias pruebas y despues de mucho puede echar a andar gran parte del ejemplo, ahorita tengo el problema de que al momento de obtener la informacion del metadata no encuentra ninguna llave. Sin embargo al cargar el mapfile desde el gvSIG, me muestra correctamente la informacion. Alguna idea?

    Responder
  18. rober

    Saludos, tengo varios dias tratando de hacer el ejercicio, pero me sale el siguiente error

    Call to undefined method webObj::get() in /var/www/gisweb/gisweb.php on line 78

    es en la parte dnd se sacan los sisguienes parametros

    $wms_title=$jMap->web->metadata->get("wms_title");

    Ojala y me pudieras ayudar, o si puedes subir un .map de jemplo

    Responder
  19. Ricardo De La Cruz

    Buenas, estoy interesado en contactarme con una empresa o profesional para hacer un diseño de base de datos SIG. En mi centro laboral contamos con ArcGIS 10, ArcGIS 10 SERVER también. Si alguien puede hacer ese tpo de trabajo contactse conmigo pro favor para mas detalles.

    Responder
  20. david calderon ruiz

    hola estoy trabajando con Gvsig e visto el tutorial Demo1 pero donde me queda la duda es cuando utiliza el mapfish no se como crea el archivo para publicacion, ya me esta corriendo desde gvsig ya tengo las capas pero como le hago para que mi mapfile(.map) se vizualise en el navegador es que usted ya lo tiene por defento y eso no se explica. me prodria decir JC ya lei sobre mapfish pero no me queda muy claro no se si pudiera realizar un video o si ya lo tiene si podria proporcionarlo estoy trabajando sobre linux (ubuntu) espero contestacion muchas gracias 🙂

    Responder
  21. David Calderon RUiz

    Hola juan carlos no le entiendo muy bien a todo esto soy nuevo no podrias hacer un video de como hacerlo ,primero creas el archivo .map desde gvsig ya pude publicar solo la imagen. Pero lo que me hace falta es vizualizar el mapa en el navegador con las capas, poder darle un zoom, mover y demas. Ya que estube revisando tu blog pero no logro comprender cuales son los archivos que debo modificar para vizualizar mi mapa es urgente por favor ayudame

    Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *