Las últimas semanas he estado trasteando con MapServer y OpenLayers en el curro y llegué a la conclusión de que tenía que “cachear” algunas de las grandes imágenes que usamos.
El problema llegó cuando intenté montar un TileCache de MapLabs y no estaba tan fácil como sugerían en su página. En parte por el famoso proxydel curro en parte porque voy un poco a bastonazos con este asunto y no encuentro un solo sitio dónde me expliquen cómo se hace.
Al final después de marear mucho la perdiz conseguí que funcionara y ahora os explico, en modo recetario, qué es lo que hice:
Primero:
Bajar la aplicación de la página de TileCache
Segundo:
Descomprimir en un directorio accesible vía web
C:\xampp\htdocs\tilecache
Tercero:
Permitir la ejecución CGI en el directorio,añadiendo la siguiente sección en httpd.conf
# Tilecache <Directory "C:/xampp/htdocs/tilecache"> AddHandler cgi-script .cgi Options +ExecCGI +Indexes </Directory>
Cuarto:
Editar la primera línea de tilecache.cgipara que apunte al ejecutable de Python
#!C:/Python24/python.exe
Quinto:
Modifica tilecache.cfg para que guarde elcache en el directorio temporal deseado
[cache] type=Disk base=d:/temp/tilecache
Sexto:
Modifica tilecache.cfg para que cargue lacapa WMS correspondiente (Con diferencia este es el paso que más por el… dió). Los ¶ son retornos de carro que hay que eliminar en tu fichero, puestos aquí para que quepan en el ancho del blog.
[rhyncho]
type=WMSLayer
url=http://tuservidor/cgi-bin/rhynchoms? ¶
map=c:/xampp/htdocs/mapas/tuarchivo.map
layers=BaseCarto
extension=png
srs=EPSG:23030
extent_type=loose
bbox=620193, 4189704, 819285, 4519881
resolutions=599.7218983723972,¶
88.19439681947017,¶
17.63887936389403,¶
8.819439681947015,¶
3.527775872778806,¶
1.763887936389403,¶
0.8819439681947016
Desde el primer día la configuración del Mapserver y de Openlayers me ha llevado por la calle de la amargura, sobretodo con el tema de las resoluciones y las escalas, para obtener qué resoluciones correspondían a los niveles de zoom que tengo definidos me tocó añadir en el código estándar de Openlayers (en la función init) las siguientes líneas:
var str = "";
for (var i = 0; i < myScales.length; i++) {
str +=
OpenLayers.Util.getResolutionFromScale(
myScales[i], 'm'
) + ',';
}
var element = document.getElementById('output');
element.innerHTML = str;
y añadir un contenedor <div>llamado outputpara que mostrara el resultado.
Séptimo:
Carga en el openlayers
base = new OpenLayers.Layer.WMS( "Base cartografica", "http://tuservidor/tilecache/tilecache.cgi", {layers: 'rhyncho' });
La receta es un poco “as is”, espero que os sirva, aunque uno de los inconvenientes de dar palos de ciego es que no voy a poder contestarlas preguntas con soltura, sin embargo si hay preguntas o sugerencias serán bien atendidas
¡Saludos!
Hola visitante anónimo,
Te recomiendo que envíes una descripción un poco más detallada de lo que has instalado (que versiones, etc) y de los archivos de configuración a lista de correo del capítulo hispanohablante de OSGeo donde te podrá contestar más gente con más experiencia.
Un saludo,
–
Pedro-Juan Ferrer Matoses (vehrka)
¡Muy guapo si señor!
Ahora falta que nos cuentes en unas semanitas qué tal te funciona esto "en producción" porque desde luego puede sernos muy interesante para varios proyectos.
A ver si sale una versión "java" de este proyecto (creo que en había algún proyecto en el Google Summer of Code del año pasado, lo miraré) porque muchas veces meter un componente en otro lenguaje de programación tira para atrás a los clientes.
Saludos!
Muy bueno me dio una idea de las cosas que ando haciendo bien y mal, por lo pronto yo estoy usando mapnick para generar los tiles, espero decirte pronto como me va
Bueno, pues ya nos contarás que tal esas experiencias con mapnick.
Podrías contarnos también si vais a poner el servidor en producción o cuantos accesos piensas que puedes tener, el rendimiento de la máquina con OpenLayers se estaba resintiendo un poco y no sé si es un problema de configuración.
Nos gustaría saber de la experiencia de la gente con este software y aprender un oco más.
¡Un saludo!
–
Pedro-Juan Ferrer Matoses (vehrka)
Buenos días.
Estoy intentando configurar tileCache (usando tilecache.cgi) con mapserver y openlayer.
cuando uso el ejemplo del fichero tilecache.cfg:
Hola visitante.
Yo tuve problemas parecidos a los tuyos, como se ve en la
parte del post en la que me quejo de la configuración de resoluciones.
Asegurate que el srs, el extent, el bbox y la
resolución son las adecuadas y coinciden con lo que te sirve Mapserver
(de ahí el truco de mirar las resoluciones con OpenLayers) ya que si no
te cansarás de ver teselas “rosas”.
¡A ver si hay suerte!
Un saludo.
–
Pedro-Juan Ferrer Matoses (vehrka)
Buenos días, estoy intentando configurar Tile-Cache con MapServer
y OpenLayer pero por ahora solo queda en el intento.
Mi configuración es la siguiente:
Apache
Mapserver
tilecache 2.04
python-2.5.2
Windows XP
Los ficheros de configuración son:
tilecache.cfg:
[Alaska]
type=WMSLayer
mapfile=C:/ms4w/apps/ka-map-1.0/gmap/mapas/gmap75.map
extension=png
size=256,256
bbox=-2200000, -712631, 3072800, 3840000
resolutions=10583.327618336418,5291.663809168209,3527.775872778807,2645.8319045841044,1763.8879363894034,881.9439681947017,529.166380916821,352.7775872778807,264.5831904584105,17.63887936389403,8.819439681947015,5.291663809168209,3.527775872778806,2.6458319045841043,1.763887936389403,0.8819439681947016,0.35277758727788067
layers=bathymetry,land_fn
srs=EPSG:42304
extent_type=loose
Nota*: El campo resolutions lo he sacado usando el procedimiento que describiste más arriba
Fichero de mapas: gmap75.map
#
# Start of GMAP map file
#
#
NAME GMAP_DEMO
STATUS ON
SIZE 400 300
SYMBOLSET ../etc/symbols.sym
EXTENT -2200000 -712631 3072800 3840000
UNITS METERS
SHAPEPATH "../data"
IMAGECOLOR 255 255 255
FONTSET ../etc/fonts.txt
# PROYECCIÓN UTM
PROJECTION
"init=EPSG:42304"
END
#
# Start of web interface definition
#
WEB
MINSCALE 2000000
MAXSCALE 50000000
#
# On Windows systems, /tmp and /tmp/ms_tmp/ should be created at the root
# of the drive where the .MAP file resides.
#
IMAGEPATH "/ms4w/tmp/ms_tmp/"
IMAGEURL "/ms_tmp/"
METADATA
"wms_title" "Alaska"
"wms_onlineresorce" "http://127.0.0.1/cgi-bin/mapserv.exe?map=C:/ms4w/apps/ka-map-1.0/gmap/mapas/gmap75.map&"
"wms_srs" "EPSG:42304"
END
END
…………………..
Fichero index.html
<script type="text/javascript">
var map;
function init(){
map = new OpenLayers.Map(‘map’,
{ controls: [
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.MouseDefaults(),
new OpenLayers.Control.MousePosition(),
new OpenLayers.Control.OverviewMap(),
new OpenLayers.Control.Permalink,
new OpenLayers.Control.LayerSwitcher
],
units: ‘m’,
projection: ‘epsg:42304′,
//maxResolution: ‘auto’,
maxExtent: new OpenLayers.Bounds( -2200000, -712631, 3072800, 3840000 ),
scales: [ 30000000,15000000,10000000,7500000,5000000,2500000,1500000,1000000,750000,50000,25000,15000,10000,7500,5000,2500,1000 ],
minScale: 30000000,
maxScale: 2500
} );
var urlArray = ["http://localhost/cgi-bin/mapserv.exe",
"http://127.0.0.1/cgi-bin/mapserv.exe"%5D;
var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
"http://labs.metacarta.com/wms/vmap0",
{layers: 'basic'} );
var jpl_wms = new OpenLayers.Layer.WMS( "Capa de Manzanas", urlArray,
{map:'C:/ms4w/apps/ka-map-1.0/gmap/mapas/gmap75_wms.map',
layers: 'bathymetry,land_fn',format: "image/png"} );
var dm_wms = new OpenLayers.Layer.WMS( "Tile Cache", "http://localhost/Openlayer/tilecache/tilecache.cgi?",
{layers: "Alaska", format: "image/png" });
jpl_wms.setVisibility(true);
ol_wms.setVisibility(false);
dm_wms.setVisibility(false);
map.addLayers([jpl_wms, dm_wms]);
if (!map.getCenter()) map.zoomToMaxExtent();
}
</script>
Cuando uso el servicio WMS que conecta con: http://labs.metacarta.com/wms/vmap0 se me generan en mi disco local las distintas celdas.
Cuando uso openLayer directamente contra mapserver también me funciona.
El problema esta cuando uso el servicio que ataca a tileCache (http://localhost/Openlayer/tilecache/tilecache.cgi?), todas la celdas se muestran de ese color que todos sabemos y estoy empezando a odiar.
He probado de todo y no consigo nada. Estaria muy agradecido si alguien me diese alguna pista para intentar arreglar el problema.
Saludos.
Hola a todos los lectores.
Hemos trasladado esta discusión a la lista de correo del capítulo hispanohablante de OSGeo.
Si no estáis suscritos podéis
seguirla a través de Nabble.
Un saludo.
–
Pedro-Juan Ferrer Matoses (vehrka)
holaaa
Necesito ayuda con tilecache,mapserver y openlayer…. esta es mi configuracion
[ejemplo2]
type=WMSLayer
url=http://localhost/cgi-bin/mapserv.exe?map=c:/ms4w/Apache/htdocs/mapFile/mapas/IV_region.map
layer=calle
srs=EPSG:24719
extent_type=loose
extension=gif
resolutions=0.036441265263157906,0.018220632631578953,0.009110316315789476,0.004555158157894738,0.036441265263157906,0.018220632631578953,0.009110316315789476,0.004555158157894738,0.002277579078947369,0.0011387895394736846,0.036441265263157906,0.018220632631578953,0.009110316315789476,0.004555158157894738,0.002277579078947369,0.0011387895394736846,0.0005693947697368423,0.00028469738486842114,0.00014234869243421057,0.00007117434621710528,0.00003558717310855264,0.00001779358655427632,0.00000889679327713816
las resoluciones las saque de la siguiente manera:
zoom=map.getZoom();
scale=map.getScale();
var str = document.getElementById(‘output’).innerHTML;
str +=OpenLayers.Util.getResolutionFromScale(scale, ‘dd’) + ‘,’;
var element = document.getElementById(‘output’);
element.innerHTML = str;
El problema es que me sale el siguiente error y ya no se que puede ser:
An error occurred: Current x value -68.477244 is too far from tile corner x -68.052433
ayuda pleasee
Antes que nada saludos, mire he hecho cada uno de los pasos que estan explicados al inicio pero no me ha funcionado. Tengo ms4w, instale python y descargue el tilecache, pero nada. Agradeceria cualquier ayuda al respecto