今天刚接触到openlayers这个东西,感觉挺好的,我从google的地图上抓了四张256*256的图片,放在自己的工程中,用OpenLayers.Layer.Image只能用一张图片作为地图,现在想把四张都用上弄成一张地图,该怎么弄呢??望大侠们给个帮助。

解决方案 »

  1.   

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>无标题页</title>
        <link rel="stylesheet" href="res/default/style.css" type="text/css" />
        <link rel="stylesheet" href="res/style.css" type="text/css" />    <script type="text/javascript" src="res/OpenLayers.js"></script>    <script type="text/javascript">var MinX = 22;
    var MinY = 10;
    var MaxX = 28;
    var MaxY = 14;var lat,lon;if (location.search == "") 
    {
    //全国
    //   lon=120.363808;
    //   lat=36.088506;
       
       lat=36.738403;
       lon=119.161835;
       
       
       zoom=6;
       }
       else
       {
       //http://ditu.google.cn/?ie=UTF8&ll=31.230344,121.472569&spn=0.015633,0.026436&z=15
      //http://ditu.google.cn/maps?f=q&hl=zh-CN&geocode=&q=%E9%9D%92%E5%B2%9B&ie=UTF8&ll=36.088506,120.363808&spn=0.118745,0.211487&z=12&iwloc=addr
    var PI = 3.14159265358979323846;
    lon = lon * 20037508.34 / 180;
    lat = Math.log (Math.tan ((90 + lat) * PI / 360)) / (PI / 180);
    lat = lat * 20037508.34 / 180;
    }
    var map;
    function get_imap_url (bounds) 
    {
    //         var res = this.map.getResolution();
    //         var x = Math.round ((bounds.left - this.maxExtent.left) / (res * this.tileSize.w)); //this 是指图层
    //         var y = Math.round ((this.maxExtent.top - bounds.top) / (res * this.tileSize.h));
    //         var z = 17 - this.map.getZoom();
    //         
    //         //----------------------------------
    //         //shanghai 109760 53556 qingdao 109344 51424 from coords.txt 
    //         //naming rule://map/1x/000/1x000000.png
    //         var myBounds={left:109344,top:51424};//109344 51424
    //         var myDir0=Math.pow(2,z);       
    //         x = Math.round (x - myBounds.left/myDir0 );
    //         var  myTileNum="000";
    //         if(x>=0)
    //         {
    //            myTileNum=x.toString();
    //            if(myTileNum.length==1)myTileNum="00"+myTileNum;
    //            if(myTileNum.length==2)myTileNum="0"+myTileNum;
    //         
    //         }  
    //         y =Math.round (y - myBounds.top/myDir0 );
    //         var myTileDir="000";
    //         
    //         if(y>=0)
    //         {
    //            myTileDir=y.toString();
    //            if(myTileDir.length==1)myTileDir="00"+myTileDir;
    //            if(myTileDir.length==2)myTileDir="0"+myTileDir;
    //            
    //            }     
    //         
    //         var path = myDir0+"x/"
    //          + myTileDir + "/" 
    //          + myDir0+"x" + myTileDir + myTileNum + "." + this.type;
    //         if(x<0 || y<0)path="blank.png"; 
    //         var url = this.url;
    //         if (url instanceof Array)
    //         {
    //             url = this.selectUrl(path, url);
    //         }         
    //         //alert(url + path);
    //         return url + path;
            var res = this.map.getResolution();
            var bbox  = this.map.getMaxExtent();   
            var size  = this.tileSize;        var x = Math.round ((bounds.left - bbox.left) / (res * size.w));
            var y = Math.round ((bbox.top - bounds.top) / (res * size.h));
            var z = this.map.getZoom()+3;        var path ="gm_" + x + "_" + y + "_" + z + "." + this.type; 
            var url = this.url;
            if (url instanceof Array) {
                url = this.selectUrl(path, url);
            }
            return url + path;
             }        function init()
            {
                map = new OpenLayers.Map ("map", 
                    {
                        controls:
                        [
                        new OpenLayers.Control.Permalink(),
                        new OpenLayers.Control.MouseDefaults(),
                        new OpenLayers.Control.LayerSwitcher(),
                        new OpenLayers.Control.MousePosition(),
                        new OpenLayers.Control.PanZoomBar()
                        ],
                        maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
                        //Resolution=20037508*2/256*2^(zoom+1),zoom取值0~15   
    //                    numZoomLevels:19, 
    //                    maxResolution:156543.0339, 
                        
                        numZoomLevels:16, 
                        maxResolution:156543.0339/8, 
                        
                        units:'m',//,
                        //projection: "EPSG:41001"
                        projection: "EPSG:900913",
                        displayProjection: new OpenLayers.Projection("EPSG:4326")
                         
                    } 
                );            myHome = new OpenLayers.Layer.TMS( 
                "测试",
                "map/",
                {type:'png', getURL: get_imap_url} );
                map.addLayers([myHome]);
                var lonLat = new OpenLayers.LonLat(lon,lat);
    //map.setCenter (lonLat, 12);
    //map.zoomToExtent(new OpenLayers.Bounds(119.194965, 36.746243, 119.130549, 36.729873 ));            map.setCenter (lonLat, zoom);
       
            };
        </script></head>
    <body onload="init()">
        <form id="form1" runat="server">
        <h1 id="title">
            Zoomify Layer Example</h1>
        <div id="tags">
        </div>
        <p id="shortdesc">
            Demo of a layer with Zoomify tiles.
        </p>
        <div id="map" class="smallmap">
        </div>
        </form>
    </body>
    </html>
      

  2.   

    可以直接用缓存里的图片,不过要改一下文件名本例:是gm_x_y_z.png
    这个例子坐标映射可能还有点问题
      

  3.   

    谢谢naitboy的回答,我现在已经用您的代码实现了本地tiles显示!您说坐标映射有问题,其实没有问题,只是您的代码写错了而已,只需要将您的代码中if语句下的“{ else .......}”删除掉就没事了。
    (把错误找出,让更多人不走弯路!)