/usr/share/pyshared/TileCache/Services/WMS.py is in tilecache 2.11-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | # BSD Licensed, Copyright (c) 2006-2010 TileCache Contributors
from TileCache.Service import Request, Capabilities
import TileCache.Layer as Layer
class WMS (Request):
def parse (self, fields, path, host):
param = {}
for key in ['bbox', 'layers', 'request', 'version']:
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":
return self.getCapabilities(host + path, param)
else:
return self.getMap(param)
def getMap (self, param):
bbox = map(float, param["bbox"].split(","))
layers = param["layers"].split(",")
tiles = []
for name in layers:
tile = self.getLayer(name).getTile(bbox)
if not tile:
raise Exception(
"couldn't calculate tile index for layer %s from (%s)"
% (layer.name, bbox))
tiles.append(tile)
if len(tiles) > 1:
return tiles
else:
return tiles[0]
def getCapabilities (self, host, param):
if host[-1] not in "?&":
if "?" in host:
host += "&"
else:
host += "?"
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="ISO-8859-1" standalone="no" ?>
<!DOCTYPE WMT_MS_Capabilities SYSTEM
"http://schemas.opengeospatial.net/wms/1.1.1/WMS_MS_Capabilities.dtd" [
<!ELEMENT VendorSpecificCapabilities (TileSet*) >
<!ELEMENT TileSet (SRS, BoundingBox?, Resolutions,
Width, Height, Format, Layers*, Styles*) >
<!ELEMENT Resolutions (#PCDATA) >
<!ELEMENT Width (#PCDATA) >
<!ELEMENT Height (#PCDATA) >
<!ELEMENT Layers (#PCDATA) >
<!ELEMENT Styles (#PCDATA) >
]>
<WMT_MS_Capabilities version="1.1.1">
<Service>
<Name>OGC:WMS</Name>
<Title>%s</Title>
<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="%s"/>
</Service>
""" % (description, host)
xml += """
<Capability>
<Request>
<GetCapabilities>
<Format>application/vnd.ogc.wms_xml</Format>
<DCPType>
<HTTP>
<Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="%s"/></Get>
</HTTP>
</DCPType>
</GetCapabilities>""" % (host)
xml += """
<GetMap>"""
for format in formats:
xml += """
<Format>%s</Format>\n""" % format
xml += """
<DCPType>
<HTTP>
<Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="%s"/></Get>
</HTTP>
</DCPType>
</GetMap>
</Request>""" % (host)
xml += """
<Exception>
<Format>text/plain</Format>
</Exception>
<VendorSpecificCapabilities>"""
for name, layer in self.service.layers.items():
resolutions = " ".join(["%.20f" % r for r in layer.resolutions])
xml += """
<TileSet>
<SRS>%s</SRS>
<BoundingBox SRS="%s" minx="%f" miny="%f"
maxx="%f" maxy="%f" />
<Resolutions>%s</Resolutions>
<Width>%d</Width>
<Height>%d</Height>
<Format>%s</Format>
<Layers>%s</Layers>
<Styles></Styles>
</TileSet>""" % (
layer.srs, layer.srs, layer.bbox[0], layer.bbox[1],
layer.bbox[2], layer.bbox[3], resolutions, layer.size[0],
layer.size[1], layer.format(), name )
xml += """
</VendorSpecificCapabilities>
<UserDefinedSymbolization SupportSLD="0" UserLayer="0"
UserStyle="0" RemoteWFS="0"/>
<Layer>
<Title>TileCache Layers</Title>"""
for name, layer in self.service.layers.items():
xml += """
<Layer queryable="0" opaque="0" cascaded="1">
<Name>%s</Name>
<Title>%s</Title>
<SRS>%s</SRS>
<BoundingBox SRS="%s" minx="%f" miny="%f"
maxx="%f" maxy="%f" />
</Layer>""" % (
name, layer.name, layer.srs, layer.srs,
layer.bbox[0], layer.bbox[1], layer.bbox[2], layer.bbox[3])
xml += """
</Layer>
</Capability>
</WMT_MS_Capabilities>"""
return Capabilities("text/xml", xml)
|