当前位置: 首页 > 工具软件 > TileCache > 使用案例 >

arcgis切图与tilecache切图的区别及openlayers的代码实现

危寒
2023-12-01
1.命名方法不同
arcgis的命名为
缩放等级表示:L+两位十六进制
行表示:R+8位十六进制
列表示:C+8位十六进制
如:L02/R00000003/C00000004.png
tilecache的命名为:
它的缩放等级、行号、列号都是十进制数字表示
如:2/3/4.png
2.切图的起始坐标不同
arcgis的起始坐标为左上角的点

tilecache的起始坐标为右上角的点


3.openlayer 调用arcgis的切片的关键代码

var test=new OpenLayers.Layer.TMS(
            "ditu",
          "",
          {
              layerName: 'qgm', type: "png", 'getURL': function (bounds) {

              var res = map.getResolution();
        
               var bbox = this.map.getMaxExtent();
               var size = this.tileSize;

        
               var tileX = Math.round((bounds.left - bbox.left) / (res * size.w));
              var tileY = Math.round((bbox.top-bounds.top) / (res * size.h));
                        
              var tileZ = this.map.zoom;    
        
             if(tileZ == 3 && tileX > (Math.pow(2, tileZ) - 1)){
                   tileX = tileX-Math.pow(2, tileZ);                    
             }
        
        if(tileX < 0){tileX = tileX + Math.round(bbox.getWidth() / bounds.getWidth());}       
        if(tileY < 0){tileY = tileY + Math.round(bbox.getHeight() / bounds.getHeight());}   
              return "Layers/_alllayers/L" + convert16(2,z) + "/R" + convert16(8,y) + "/C" +convert16(8,x) + ".png";
              */
                  return "Layers/_alllayers/L" + convert16(2,tileZ) + "/R" + convert16(8,tileY) + "/C" +convert16(8,tileX) + ".png";
              }
          }
      );


function convert16(length,value){
var v=Math.abs(value);
var s=v.toString(16);
var len=length-s.length;
var tmp="";
for(var i=0;i<len;i++){
tmp+="0";
}
return tmp+s;
}


4.openlayers调用tilecache切片的关键代码

var test=new OpenLayers.Layer.TMS(
            quanguoditu,
          "",
          {
              layerName: 'qgm', type: "png", 'getURL': function (bounds) {

              var res = map.getResolution();
              var x = Math.round((bounds.left - map.maxExtent.left) / (res * 256));
              var y = Math.round((bounds.bottom - map.maxExtent.bottom) / (res * 256)); //从下面往上计算
              var z = this.map.getZoom();
              return CACHETMSURL + z + "/" + x + "/" + y + ".png";
              }
          }
      );

   
在此感谢网友“GIS-xyz”和“赵钊烽”给予的代码支持。


 类似资料: