[Tilecache] Virtual Earth compatible TC-cache
Steven M. Ottens
steven at minst.net
Wed Feb 13 03:58:20 EST 2008
I only send this to chris, so here it is for the list:
Attached
Christopher Schmidt wrote:
> On Tue, Feb 12, 2008 at 03:48:19PM +0100, Steven M. Ottens wrote:
>
>> Hi all,
>>
>> Once I finished it, I realised that it is actually quite a useless piece
>> of code. There is hardly any asiteuation where you want to store the
>> cache inside TC as VE-tiles without exposing them to the outer world. So
>> I decided to write a service instead. The will take a request with a
>> quadkey and calculate the row and column in epsg:900913:
>> A typical request would be
>> http://steef/tilecache.py?ve=true&layer=hoogtes&tile=120
>>
>> where ve=true triggers the VETMS service in Service.py
>> layer=hoogtes gives yoou the layer
>> tile=120 gives you the quad key number.
>> 120 in this case means z= 3, x=4 and y=5
>>
>> In virtual earth you can add a tilecache-based layer this way:
>> var tileSourceSpec = new VETileSourceSpecification("ahn",
>> "http://steef/tilecache.py?ve=true&layer=hoogtes&tile=%4");
>>
>> Once again the only reason why you want to use this is if you're somehow
>> stuck with the VE-client, instead of a more friendly one like OpenLayers.
>>
>> Attached the VETMS service also you need to add the following lines to
>> Service.py
>> elif params.has_key("ve") and \
>> params['ve'] == "true":
>> from TileCache.Services.VETMS import VETMS
>> tile = VETMS(self).parse(params, path_info, host)
>>
>> just above:
>> else:
>> from TileCache.Services.TMS import TMS
>> tile = TMS(self).parse(params, path_info, host)
>> (line 173)
>>
>
> Can you turn this into a patch? checkout a copy of svn, add your file
> via svn add, make the above change, and then 'svn diff' and send it ot
> the list? I'll try and get it in if you do.
>
> Regards,
>
-------------- next part --------------
Index: C:/Documents and Settings/steveno/workspace/tilecache/TileCache/Services/VETMS.py
===================================================================
--- C:/Documents and Settings/steveno/workspace/tilecache/TileCache/Services/VETMS.py (revision 0)
+++ C:/Documents and Settings/steveno/workspace/tilecache/TileCache/Services/VETMS.py (revision 0)
@@ -0,0 +1,49 @@
+# BSD Licensed, Copyright (c) 2006-2007 MetaCarta, Inc.
+
+from TileCache.Service import Request, Capabilities
+import TileCache.Layer as Layer
+
+
+class VETMS (Request):
+ def parse (self, fields, path, host):
+ # <host>?ve=true&layer=global_mosaic&tile=000.jpg
+ for key in ['layer','tile']:
+ if fields.has_key(key.upper()):
+ fields[key] = fields[key.upper()]
+ elif not fields.has_key(key):
+ fields[key] = ""
+ layer = self.getLayer(fields['layer'])
+ tilenumber = str(fields['tile'])
+ quadkey = tilenumber.split(".")[0]
+ tile = None
+ cell = self.unQuad(quadkey)
+ tile = Layer.Tile(layer, int(cell[0]), int(cell[1]), int(cell[2]))
+ return tile
+
+ def unQuad (self, quad):
+ z = len(quad)
+ col = int(0)
+ row = int(pow(2,z)-1)
+ quadint = int(0)
+ cell = [0,0,0]
+ for i in range (0,z):
+ quadint =int(quad[i])
+ tmp = int(pow(2,z-(i+1)))
+ if (quadint ==1):
+ col += tmp
+ elif (quadint == 2):
+ row -= tmp
+ elif (quadint == 3):
+ col += tmp
+ row -= tmp
+ cell[0] = col
+ cell[1] = row
+ cell[2] = z
+ return cell
+
+ def serverCapabilities (self, host):
+ return Capabilities("text/xml", """<?xml version="1.0" encoding="UTF-8" ?>
+ <Services>
+ <VETileMapService version="1.0.0" href="%s?ve=true/" />
+ </Services>""" % host)
+
Index: C:/Documents and Settings/steveno/workspace/tilecache/TileCache/Service.py
===================================================================
--- C:/Documents and Settings/steveno/workspace/tilecache/TileCache/Service.py (revision 253)
+++ C:/Documents and Settings/steveno/workspace/tilecache/TileCache/Service.py (working copy)
@@ -187,6 +187,10 @@
(params['v'] == "mgm" or params['v'] == "mgmaps"):
from TileCache.Services.MGMaps import MGMaps
tile = MGMaps(self).parse(params, path_info, host)
+ elif params.has_key("ve") and \
+ params['ve'] == "true":
+ from TileCache.Services.VETMS import VETMS
+ tile = VETMS(self).parse(params, path_info, host)
else:
from TileCache.Services.TMS import TMS
tile = TMS(self).parse(params, path_info, host)
More information about the Tilecache
mailing list