math.pow?

Hallo zusammen,

ich versuche Tiles über eine math.pow Rechnung einzublenden

var tiles = new OpenLayers.Layer.OSM("Tiles", "../${z}/${x}/Math.pow(2,${z})-1-${y}.png", {numZoomLevels: 16, attribution:"Tiles", alpha: true, isBaseLayer: true, visibility: true});
map.addLayer(tiles);

Jetzt wird mir das math.pow leider nicht ausgeführt.
Die Variablen werden zwar gefüllt aber mehr als bsp: Math.pow(2,15)-1-11234 kommt dabei nicht raus.
Ist es überhaupt möglich, das math.pow direkt im Link auszuführen?
Oder muß ich das math.pow vorher errechnen und als Variable übergeben?

Gruß Wayne

EDIT:

Natürlich hab ich es bereits in verschiedenen Ausführungen ala: “…/${z}/${x}/“Math.pow(2,${z})-1-${y}”.png” usw versucht.

und math.pow kleingeschrieben? Hast du das auch versucht und die ${z}/${x} werden im String auch ersetzt?

Sieht so aus als wolltest du einen Layer einbinden mit TMS Tile Schema

Warum bindest du das nicht auch ein als TMS Layer, der ja genau dafür da ist ?

http://dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/OpenLayers/Layer/TMS-js.html

Alles schon versucht. > Im Liveheader sendet er den request mit allen nötigen Daten.
Nur er errechnet es eben nicht…

#request# GET /14/8885/math.pow(2,14)-1-5427.png

So, wie ichs im Code geschrieben habe, kann es ja nicht gehen. > Ohne Anführungsstriche ist das math.pow ja nix anderes als ein Text. :slight_smile:
Aber wie gesagt, hab ich schon sämtliche Möglichkeiten (mit Anführungsstrichen) versucht.

Meineserachtens müsste es so klappen, aber damit erhalte ich nur ne Fehlermeldung:

../${z}/${x}/" + math.pow(2,${z})-1-${y} + ".png"

Error: missing ) after argument list.

Hmmmmm…

EDIT:
Mir war nicht bekannt, das Tiles unterschiedliche Schema haben.
Bin davon ausgegangen, das die Tiles lediglich anderst beschriftet sind. :slight_smile: schäm

Für alle, die dieses Problem auch mal haben sollten, hier die Antwort…


function getTileURL(bounds)
{
    var res = this.map.getResolution();
    var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
    var ytile = Math.round((this.maxExtent.top - bounds.top) / (res * this.tileSize.h));
    var z = this.map.getZoom();
    var y = (Math.pow(2, z)-1-ytile);

    url = this.url;
    path= z + "/" + x + "/" + y + "." + this.type;
    if (url instanceof Array)
    {
        url = this.selectUrl(path, url);
    }
    return url+path;
}

map.addLayer(new OpenLayers.Layer.OSM("Tiles", "../tiles/", {numZoomLevels: 16, type: "png", getURL: getTileURL, attribution:"Tiles", alpha: true, isBaseLayer: true, visibility: true}));

Funktioniert optimal. :slight_smile:

Gruß Wayne