Diapositiva 1

Anuncio
WMSCWRAPPER. IMPLEMENTACIÓN WMS-C
OPENSOURCE PARA SERVICIOS WMS
TESELADOS
Ricardo García Martín
IDELab - Universidad de Valladolid
IV Jornadas SIG Libre, Girona
11 de Marzo de 2010
CONTENIDOS

Introducción



Proxies Web
Motivación
WMSCwrapper




Componentes
Configuración
Servicios ofertados
Rendimiento
CONFIGURACIONES PROXY WEB CACHE
Servidor
Servidores
Proxies
Internet
Internet
Clientes
LAN
Clientes
Proxy
Cliente
Proxy
Petición
Petición
Objeto
Cliente
Servidor
Objeto pedido no
está en caché (miss)
Objeto
Proxy
Petición
Objeto
Objeto pedido
está en caché (hit)
SERVICIO WEB DE MAPAS (WMS)
VERSION
REQUEST
LAYERS
STYLES
BBOX
SRS
WIDTH
HEIGHT
FORMAT
…
Muy flexible
Poco escalable
SISTEMAS TESELADOS
 División de la imagen en otras de menor tamaño (“teselas”)
 Mayor sensación de continuidad del mapa
SISTEMAS TESELADOS
WMS TILE CACHING (WMS-C)
Dos peticiones diferentes de una misma tesela WMS-C deben
formar la misma petición HTTP GET
1. Cadena de argumentos mínima (sin argumentos opcionales)
2. Ordenación de argumentos y capitalización de los caracteres fija
3. Rango fijo de posibles bounding boxes, calculados según el perfil
WMS-C
4. Precisión fija en los valores de bounding box
5. Tamaño fijo de las teselas medido en pixels
6. Nombres de capas y/o ordenación de los nombres de las capas fijos
7. Estilos fijos
8. Formato de salida fijo
IMPLEMENTACIÓN WMSCWRAPPER







Software Libre
100% compatible con WMS-C
Implementación Java J2EE
~20.000 líneas de código
Modular
Sobre cualquier servidor de aplicaciones J2EE
Con cualquier WMS estándar: Mapserver,
Deegree, Geoserver…
MOTIVACIÓN

Fines académicos y de investigación.

No alineado con otros desarrollos como TileCache
y GeoWebCache.

Experimentación con algoritmos heurísticos y
predictivos de gestión de la caché para entornos
con recursos escasos o con conjunto de datos
dinámicos.
ALMACENAMIENTO DE LAS TESELAS
raíz/layer/resolución/x/y.<extension>
CACHÉ CON ÍNDICE ESPACIAL
 Registro espacial en tiempo real de la actividad de la caché
 Índice QuadTree permite realizar búsquedas espaciales de gran eficacia
 Dada la naturaleza exponencial de la estructura de la pirámide se trunca el
índice a un nivel concreto
 Aproximación a la probabilidad de acceso a las zonas geográficas
representadas por las teselas
CAPA DE ESTADÍSTICAS
 Las estadísticas recogidas en el
índice espacial pueden mostrarse
mediante un tileset, como una capa
más de la caché.
Ofrece información visual al
administrador para la toma de
decisiones.
METATILING


Petición de mayor tamaño que la tesela a cachear
Reduce el número de peticiones al WMS remoto
Tesela
pedida por
el cliente
Metatile 3x3
pedido al
servidor WMS
METATILING



Petición de mayor tamaño que la tesela a cachear
Reduce el número de peticiones al WMS remoto
Reduce el problema del etiquetado redundante
METATILING



Petición de mayor tamaño que la tesela a cachear
Reduce el número de peticiones al WMS remoto
Reduce el problema del etiquetado redundante
METATILING




Petición de mayor tamaño que la tesela a cachear
Reduce el número de peticiones al WMS remoto
Reduce el problema del etiquetado redundante
Estrategia de mínima correlación con la caché
CONFIGURACIÓN DE LA CACHÉ
<?xml version="1.0" encoding="UTF-8"?>
<WMSCacheConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<KMLService>
PASARELA
<ServiceType>KML</ServiceType>
KML
<Name>KML gateway IDELab</Name>
<Title>Pasarela KML</Title>
<Abstract>Descripcion del servicio experimental</Abstract>
<OnlineResource>http://itastserver.tel.uva.es/WMS_C_wrapper</OnlineResource>
</KMLService>
<WMSCService>
<ServiceType>WMS-C</ServiceType>
<Name>WMS-C IDELab</Name>
<Title>Titulo del servidor</Title>
<Abstract>Descripcion del servicio experimental</Abstract>
<OnlineResource>http://itastserver.tel.uva.es/WMS_C_wrapper/wms</OnlineResource>
</WMSCService>
CONFIGURACIÓN DE LA CACHÉ
<?xml version="1.0" encoding="UTF-8"?>
<WMSCacheConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<KMLService>
<ServiceType>KML</ServiceType>
<Name>KML gateway IDELab</Name>
<Title>Pasarela KML</Title>
<Abstract>Descripcion del servicio experimental</Abstract>
<OnlineResource>http://itastserver.tel.uva.es/WMS_C_wrapper</OnlineResource>
</KMLService>
<WMSCService>
<ServiceType>WMS-C</ServiceType>
SERVICIO
<Name>WMS-C IDELab</Name>
WMS-C
<Title>Titulo del servidor</Title>
<Abstract>Descripcion del servicio experimental</Abstract>
<OnlineResource>http://itastserver.tel.uva.es/WMS_C_wrapper/wms</OnlineResource>
</WMSCService>
CONFIGURACIÓN DE LA CACHÉ (I)
<TileSet name="IDE" type="WMS">
URL servicio
<url><![CDATA[http://www.idee.es/wms/IDEE-Base/IDEE-Base?]]></url> WMS remoto
<SRS>EPSG:4326</SRS>
<BoundingBox SRS="EPSG:4326" minx="-37.474148" miny="2.7077813" maxx="22.74257"
maxy="57.752808" />
<profile type="global" levels="20" maxResolution="0.703125"> <!-- global|specific -->
<BoundingBox SRS="EPSG:4326" minx="-180.0" miny="-90.0" maxx="180.0"
maxy="90.0" />
<Resolutions levels="20"> 0.3515625 0.17578125 0.087890625 0.0439453125
0.0219726563 0.010986328125</Resolutions>
<Width>256</Width>
<Height>256</Height>
</profile>
<Format>png</Format>
<Layers>Todas</Layers>
<Styles />
CONFIGURACIÓN DE LA CACHÉ (I)
<TileSet name="IDE" type="WMS">
<url><![CDATA[http://www.idee.es/wms/IDEE-Base/IDEE-Base?]]></url>
Proyección
<SRS>EPSG:4326</SRS>
<BoundingBox SRS="EPSG:4326" minx="-37.474148" miny="2.7077813" maxx="22.74257"
maxy="57.752808" />
<profile type="global" levels="20" maxResolution="0.703125"> <!-- global|specific -->
<BoundingBox SRS="EPSG:4326" minx="-180.0" miny="-90.0" maxx="180.0"
maxy="90.0" />
<Resolutions levels="20"> 0.3515625 0.17578125 0.087890625 0.0439453125
0.0219726563 0.010986328125</Resolutions>
<Width>256</Width>
<Height>256</Height>
</profile>
<Format>png</Format>
<Layers>Todas</Layers>
<Styles />
CONFIGURACIÓN DE LA CACHÉ (I)
<TileSet name="IDE" type="WMS">
<url><![CDATA[http://www.idee.es/wms/IDEE-Base/IDEE-Base?]]></url>
<SRS>EPSG:4326</SRS>
Límites de la capa
<BoundingBox SRS="EPSG:4326" minx="-37.474148" miny="2.7077813" maxx="22.74257"
maxy="57.752808" />
<profile type="global" levels="20" maxResolution="0.703125"> <!-- global|specific -->
<BoundingBox SRS="EPSG:4326" minx="-180.0" miny="-90.0" maxx="180.0"
maxy="90.0" />
<Resolutions levels="20"> 0.3515625 0.17578125 0.087890625 0.0439453125
0.0219726563 0.010986328125</Resolutions>
<Width>256</Width>
<Height>256</Height>
</profile>
<Format>png</Format>
<Layers>Todas</Layers>
<Styles />
CONFIGURACIÓN DE LA CACHÉ (I)
<TileSet name="IDE" type="WMS">
<url><![CDATA[http://www.idee.es/wms/IDEE-Base/IDEE-Base?]]></url>
<SRS>EPSG:4326</SRS>
<BoundingBox SRS="EPSG:4326" minx="-37.474148" miny="2.7077813" maxx="22.74257"
maxy="57.752808" />
<profile type="global" levels="20" maxResolution="0.703125"> <!-- global|specific -->
<BoundingBox SRS="EPSG:4326" minx="-180.0" miny="-90.0" maxx="180.0"
maxy="90.0" />
Resoluciones
<Resolutions levels="20"> 0.3515625 0.17578125 0.087890625 0.0439453125
0.0219726563 0.010986328125</Resolutions>
<Width>256</Width>
<Height>256</Height>
</profile>
<Format>png</Format>
<Layers>Todas</Layers>
<Styles />
CONFIGURACIÓN DE LA CACHÉ (I)
<TileSet name="IDE" type="WMS">
<url><![CDATA[http://www.idee.es/wms/IDEE-Base/IDEE-Base?]]></url>
<SRS>EPSG:4326</SRS>
<BoundingBox SRS="EPSG:4326" minx="-37.474148" miny="2.7077813" maxx="22.74257"
maxy="57.752808" />
<profile type="global" levels="20" maxResolution="0.703125"> <!-- global|specific -->
<BoundingBox SRS="EPSG:4326" minx="-180.0" miny="-90.0" maxx="180.0"
maxy="90.0" />
<Resolutions levels="20"> 0.3515625 0.17578125 0.087890625 0.0439453125
0.0219726563 0.010986328125</Resolutions>
<Width>256</Width>
Tamaño imagen
<Height>256</Height>
</profile>
<Format>png</Format>
<Layers>Todas</Layers>
<Styles />
CONFIGURACIÓN DE LA CACHÉ (I)
<TileSet name="IDE" type="WMS">
<url><![CDATA[http://www.idee.es/wms/IDEE-Base/IDEE-Base?]]></url>
<SRS>EPSG:4326</SRS>
<BoundingBox SRS="EPSG:4326" minx="-37.474148" miny="2.7077813" maxx="22.74257"
maxy="57.752808" />
<profile type="global" levels="20" maxResolution="0.703125"> <!-- global|specific -->
<BoundingBox SRS="EPSG:4326" minx="-180.0" miny="-90.0" maxx="180.0"
maxy="90.0" />
<Resolutions levels="20"> 0.3515625 0.17578125 0.087890625 0.0439453125
0.0219726563 0.010986328125</Resolutions>
<Width>256</Width>
<Height>256</Height>
</profile>
Formato imagen
<Format>png</Format>
<Layers>Todas</Layers>
<Styles />
CONFIGURACIÓN DE LA CACHÉ (I)
<TileSet name="IDE" type="WMS">
<url><![CDATA[http://www.idee.es/wms/IDEE-Base/IDEE-Base?]]></url>
<SRS>EPSG:4326</SRS>
<BoundingBox SRS="EPSG:4326" minx="-37.474148" miny="2.7077813" maxx="22.74257"
maxy="57.752808" />
<profile type="global" levels="20" maxResolution="0.703125"> <!-- global|specific -->
<BoundingBox SRS="EPSG:4326" minx="-180.0" miny="-90.0" maxx="180.0"
maxy="90.0" />
<Resolutions levels="20"> 0.3515625 0.17578125 0.087890625 0.0439453125
0.0219726563 0.010986328125</Resolutions>
<Width>256</Width>
<Height>256</Height>
</profile>
<Format>png</Format>
<Layers>Todas</Layers> Capas WMS
<Styles />
CONFIGURACIÓN DE LA CACHÉ (II)
<cacheconfig method="SpatialCache" debug="false"
implementationClass="org.jp.cache.HeuristicalSpatialCacheManager">
<MaxCacheSize>260M</MaxCacheSize>
<CachePath>/var/cache/cartociudad</CachePath>
Gestor de caché
<MinimumTimeout>-1</MinimumTimeout>
<MinimumTimeout resIndex="10,11,12,13,14,15,16,17,18,19,20,21,22,23">9000000</MinimumTimeout>
<MinimumTimeout SRS="EPSG:4326" minx="-4.85287" miny="41.568" maxx="-4.61426" maxy="41.72710"
resIndex="1,2,3,4,5,6,7,8,9">60000</MinimumTimeout>
<task name="CacheCleaner IDEE" implementationClass="org.jp.task.tasks.FullCacheCleaner"></task>
<task name="Seeder for IDEE" implementationClass="org.jp.task.tasks.SeederJob">
<Seeder>
<SeederBoundingBox resIndex="5,6,7,8,9,10,11,12,13,14" SRS="EPSG:4326" minx="-4.85287
miny="41.568" maxx="-4.61426" maxy="41.72710"> </SeederBoundingBox>
<SeederBoundingBox resIndex="0,1,2,3,4" SRS="EPSG:4326" minx="-180" miny="-90" maxx="-180"
maxy="90"> </SeederBoundingBox>
</Seeder>
</task>
</cacheconfig>
CONFIGURACIÓN DE LA CACHÉ (II)
<cacheconfig method="SpatialCache" debug="false"
implementationClass="org.jp.cache.HeuristicalSpatialCacheManager">
Tamaño
<MaxCacheSize>260M</MaxCacheSize>
máx caché
<CachePath>/var/cache/cartociudad</CachePath>
<MinimumTimeout>-1</MinimumTimeout>
<MinimumTimeout resIndex="10,11,12,13,14,15,16,17,18,19,20,21,22,23">9000000</MinimumTimeout>
<MinimumTimeout SRS="EPSG:4326" minx="-4.85287" miny="41.568" maxx="-4.61426" maxy="41.72710"
resIndex="1,2,3,4,5,6,7,8,9">60000</MinimumTimeout>
<task name="CacheCleaner IDEE" implementationClass="org.jp.task.tasks.FullCacheCleaner"></task>
<task name="Seeder for IDEE" implementationClass="org.jp.task.tasks.SeederJob">
<Seeder>
<SeederBoundingBox resIndex="5,6,7,8,9,10,11,12,13,14" SRS="EPSG:4326" minx="-4.85287
miny="41.568" maxx="-4.61426" maxy="41.72710"> </SeederBoundingBox>
<SeederBoundingBox resIndex="0,1,2,3,4" SRS="EPSG:4326" minx="-180" miny="-90" maxx="-180"
maxy="90"> </SeederBoundingBox>
</Seeder>
</task>
</cacheconfig>
CONFIGURACIÓN DE LA CACHÉ (II)
<cacheconfig method="SpatialCache" debug="false"
implementationClass="org.jp.cache.HeuristicalSpatialCacheManager">
<MaxCacheSize>260M</MaxCacheSize>
<CachePath>/var/cache/cartociudad</CachePath> Directorio caché
<MinimumTimeout>-1</MinimumTimeout>
<MinimumTimeout resIndex="10,11,12,13,14,15,16,17,18,19,20,21,22,23">9000000</MinimumTimeout>
<MinimumTimeout SRS="EPSG:4326" minx="-4.85287" miny="41.568" maxx="-4.61426" maxy="41.72710"
resIndex="1,2,3,4,5,6,7,8,9">60000</MinimumTimeout>
<task name="CacheCleaner IDEE" implementationClass="org.jp.task.tasks.FullCacheCleaner"></task>
<task name="Seeder for IDEE" implementationClass="org.jp.task.tasks.SeederJob">
<Seeder>
<SeederBoundingBox resIndex="5,6,7,8,9,10,11,12,13,14" SRS="EPSG:4326" minx="-4.85287
miny="41.568" maxx="-4.61426" maxy="41.72710"> </SeederBoundingBox>
<SeederBoundingBox resIndex="0,1,2,3,4" SRS="EPSG:4326" minx="-180" miny="-90" maxx="-180"
maxy="90"> </SeederBoundingBox>
</Seeder>
</task>
</cacheconfig>
CONFIGURACIÓN DE LA CACHÉ (II)
<cacheconfig method="SpatialCache" debug="false"
implementationClass="org.jp.cache.HeuristicalSpatialCacheManager">
<MaxCacheSize>260M</MaxCacheSize>
<CachePath>/var/cache/cartociudad</CachePath>
Temporizadores
<MinimumTimeout>-1</MinimumTimeout>
<MinimumTimeout resIndex="10,11,12,13,14,15,16,17,18,19,20,21,22,23">9000000</MinimumTimeout>
<MinimumTimeout SRS="EPSG:4326" minx="-4.85287" miny="41.568" maxx="-4.61426" maxy="41.72710"
resIndex="1,2,3,4,5,6,7,8,9">60000</MinimumTimeout>
<task name="CacheCleaner IDEE" implementationClass="org.jp.task.tasks.FullCacheCleaner"></task>
<task name="Seeder for IDEE" implementationClass="org.jp.task.tasks.SeederJob">
<Seeder>
<SeederBoundingBox resIndex="5,6,7,8,9,10,11,12,13,14" SRS="EPSG:4326" minx="-4.85287
miny="41.568" maxx="-4.61426" maxy="41.72710"> </SeederBoundingBox>
<SeederBoundingBox resIndex="0,1,2,3,4" SRS="EPSG:4326" minx="-180" miny="-90" maxx="-180"
maxy="90"> </SeederBoundingBox>
</Seeder>
</task>
</cacheconfig>
CONFIGURACIÓN DE LA CACHÉ (II)
<cacheconfig method="SpatialCache" debug="false"
implementationClass="org.jp.cache.HeuristicalSpatialCacheManager">
<MaxCacheSize>260M</MaxCacheSize>
<CachePath>/var/cache/cartociudad</CachePath>
<MinimumTimeout>-1</MinimumTimeout>
<MinimumTimeout resIndex="10,11,12,13,14,15,16,17,18,19,20,21,22,23">9000000</MinimumTimeout>
<MinimumTimeout SRS="EPSG:4326" minx="-4.85287" miny="41.568" maxx="-4.61426" maxy="41.72710"
resIndex="1,2,3,4,5,6,7,8,9">60000</MinimumTimeout>
Cleaner de la caché
<task name="CacheCleaner IDEE" implementationClass="org.jp.task.tasks.FullCacheCleaner"></task>
<task name="Seeder for IDEE" implementationClass="org.jp.task.tasks.SeederJob">
<Seeder>
<SeederBoundingBox resIndex="5,6,7,8,9,10,11,12,13,14" SRS="EPSG:4326" minx="-4.85287
miny="41.568" maxx="-4.61426" maxy="41.72710"> </SeederBoundingBox>
<SeederBoundingBox resIndex="0,1,2,3,4" SRS="EPSG:4326" minx="-180" miny="-90" maxx="-180"
maxy="90"> </SeederBoundingBox>
</Seeder>
</task>
</cacheconfig>
CONFIGURACIÓN DE LA CACHÉ (II)
<cacheconfig method="SpatialCache" debug="false"
implementationClass="org.jp.cache.HeuristicalSpatialCacheManager">
<MaxCacheSize>260M</MaxCacheSize>
<CachePath>/var/cache/cartociudad</CachePath>
<MinimumTimeout>-1</MinimumTimeout>
<MinimumTimeout resIndex="10,11,12,13,14,15,16,17,18,19,20,21,22,23">9000000</MinimumTimeout>
<MinimumTimeout SRS="EPSG:4326" minx="-4.85287" miny="41.568" maxx="-4.61426" maxy="41.72710"
resIndex="1,2,3,4,5,6,7,8,9">60000</MinimumTimeout>
<task name="CacheCleaner IDEE" implementationClass="org.jp.task.tasks.FullCacheCleaner"></task>
<task name="Seeder for IDEE" implementationClass="org.jp.task.tasks.SeederJob">
Seeder
<Seeder>
<SeederBoundingBox resIndex="5,6,7,8,9,10,11,12,13,14" SRS="EPSG:4326" minx="-4.85287
miny="41.568" maxx="-4.61426" maxy="41.72710"> </SeederBoundingBox>
<SeederBoundingBox resIndex="0,1,2,3,4" SRS="EPSG:4326" minx="-180" miny="-90" maxx="-180"
maxy="90"> </SeederBoundingBox>
</Seeder>
</task>
</cacheconfig>
CONFIGURACIÓN DE LA CACHÉ (III)
<TileSet name="STATS" type="Stat">
Capa de
<LayersetRef>IDE</LayersetRef>
estadísticas
<SRS>EPSG:4326</SRS>
<BoundingBox SRS="EPSG:4326" minx="-23.0132795" miny="27.636523"
maxx="9.1810205" maxy="43.793673" />
<profile type="specific" levels="25" maxResolution="1.40625"> <!-- global|specific -->
<BoundingBox SRS="EPSG:4326" minx="-180.0" miny="-90.0" maxx="180.0"
maxy="90.0" />
<Resolutions levels="20">0.703125 0.494384765625 0.3515625 0.17578125
0.087890625 0.0439453125 0.0219726563 0.010986328125</Resolutions>
<Width>256</Width>
<Height>256</Height>
</profile>
<Format>png</Format>
<Layers>stats</Layers>
<Styles />
RENDIMIENTO DE LA CACHÉ
Tasa de transmisión con caché inicialmente llena
Throughput (peticiones/seg)
1200
1000
800
600
WMSCWrapper
GeoWebCache
400
TileCache
200
0
1
2
3
4
5
6
7
8
9
10
# Usuarios simultáneos
15
20
40
80
100
PASARELA KML PARA GOOGLE EARTH
GOOGLE MAPS
var tilelayer = new GTileLayer(<copyrights>, <minResolution>, <maxResolution>, {
tileUrlTemplate: 'http://<host>:<port>/WMS_C_wrapper/gm?
layers=<layer_name>&zoom={Z}&x={X}&y={Y}&format=<format>',
isPng:<{true/false}>,
opacity:<opacity>
} );
Proyección EPSG:900913 (“GOOGLE”)
MICROSOFT BING MAPS
var map = new VEMap('myMap');
var tileSourceSpec = new VETileSourceSpecification(
'TITLE_OF_LAYER','http://<host>:<port>/WMS_C_wrapper/ve?
quadkey=%4&format=image/png&layers=<layer>'
);
tileSourceSpec.Opacity = 0.5;
map.AddTileLayer(tileSourceSpec, true);
...
<body onload="GetMap();">
EN QUÉ SE PARECE WMSCWRAPPER Y …
EN QUÉ SE PARECE WMSCWRAPPER Y …
EN QUÉ SE PARECE WMSCWRAPPER Y …
Es rápido
EN QUÉ SE PARECE WMSCWRAPPER Y …
Es rápido
EN QUÉ SE PARECE WMSCWRAPPER Y …
Es inteligente
Es rápido
EN QUÉ SE PARECE WMSCWRAPPER Y …
Es inteligente
Es rápido
EN QUÉ SE PARECE WMSCWRAPPER Y …
Es inteligente
Es rápido
Es libre!!
EN QUÉ SE PARECE WMSCWRAPPER Y …
EN QUÉ SE PARECE WMSCWRAPPER Y …
Es rápido y
es inteligente
UNETÉ A LA COMUNIDAD!!
I WANT YOU TO JOIN
WMSCWrapper COMMUNITY
WMSCWRAPPER. IMPLEMENTACIÓN WMS-C
OPENSOURCE PARA SERVICIOS WMS
TESELADOS
Muchas gracias por vuestra atención
http://idelab.uva.es/
Descargar