Source code for TileCache.Services.WorldWind
# BSD Licensed, Copyright (c) 2006-2010 TileCache Contributors
from TileCache.Service import Request, Capabilities
import TileCache.Layer as Layer
[docs]class WorldWind (Request):
[docs] def parse (self, fields, path, host):
param = {}
for key in ['t', 'l', 'x', 'y', 'request']:
if fields.has_key(key.upper()):
param[key] = fields[key.upper()]
elif fields.has_key(key):
param[key] = fields[key]
else:
param[key] = ""
if param["request"] == "GetCapabilities" or param["request"] == "metadata":
return self.getCapabilities(host + path, param)
else:
return self.getMap(param)
[docs] def getMap (self, param):
layer = self.getLayer(param["t"])
level = int(param["l"])
y = float(param["y"])
x = float(param["x"])
tile = Layer.Tile(layer, x, y, level)
return tile
[docs] def getCapabilities (self, host, param):
metadata = self.service.metadata
if "description" in metadata:
description = metadata["description"]
else:
description = ""
formats = {}
for layer in self.service.layers.values():
formats[layer.format()] = 1
formats = formats.keys()
xml = """<?xml version="1.0" encoding="UTF-8" ?>
<LayerSet Name="TileCache" ShowAtStartup="true" ShowOnlyOneLayers="false">
"""
for name, layer in self.service.layers.items():
if (layer.srs != "EPSG:4326"): continue
xml += """
<ChildLayerSet Name="%s" ShowAtStartup="false" ShowOnlyOneLayer="true">
<QuadTileSet ShowAtStartup="true">
<Name>%s</Name>
<Description>Layer: %s</Description>
<DistanceAboveSurface>0</DistanceAboveSurface>
<BoundingBox>
<West><Value>%s</Value></West>
<South><Value>%s</Value></South>
<East><Value>%s</Value></East>
<North><Value>%s</Value></North>
</BoundingBox>
<TerrainMapped>false</TerrainMapped>
<!-- I have no clue what this means. -->
<ImageAccessor>
<LevelZeroTileSizeDegrees>%s</LevelZeroTileSizeDegrees>
<NumberLevels>%s</NumberLevels>
<TextureSizePixels>%s</TextureSizePixels>
<ImageFileExtension>%s</ImageFileExtension>
<ImageTileService>
<ServerUrl>%s</ServerUrl>
<DataSetName>%s</DataSetName>
</ImageTileService>
</ImageAccessor>
<ExtendedInformation>
<Abstract>SRS:%s</Abstract>
<!-- WorldWind doesn't have any place to store the SRS -->
</ExtendedInformation>
</QuadTileSet>
</ChildLayerSet>
""" % (name, name, layer.description, float(layer.bbox[0]), float(layer.bbox[1]),
float(layer.bbox[2]), float(layer.bbox[3]), layer.resolutions[0] * layer.size[0],
len(layer.resolutions), layer.size[0], layer.extension, host,
name, layer.srs)
xml += """
</LayerSet>"""
return Capabilities("text/xml", xml)