[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