Hi Guys,
I have used the Google Maps image cutter from
http://www.casa.ucl.ac.uk/software/googlemapimagecutter.asp
to create tiles of a raster map in my possession.
The Image Cutter made 5461 tiles from my 9MB map.
It also provided some HTML/JavaScript which I am using in my
application. I have tweaked the code slightly to allow the additional
map to be linked on the map as a map type, as in Map, Satellite,
Terrain, My Map.

Please note, that I cant post a link as the data in the map is
sensitive and I am bound by a confidentiality contract.

Here is the code so far...


    var centreLat=0.0;
    var centreLon=0.0;
    var initialZoom=6;
    var imageWraps=false; //SET THIS TO false TO PREVENT THE IMAGE
WRAPPING AROUND
    //var map; //the GMap2 itself

/////////////////////
//Custom projection
/////////////////////
    function CustomProjection(a,b){
        this.imageDimension=65536;
        this.pixelsPerLonDegree=[];
        this.pixelOrigin=[];
        this.tileBounds=[];
        this.tileSize=256;
        this.isWrapped=b;
        var b=this.tileSize;
        var c=1;
        for(var d=0;d<a;d++){
          var e=b/2;
          this.pixelsPerLonDegree.push(b/360);
          this.pixelOrigin.push(new GPoint(e,e));
          this.tileBounds.push(c);
          b*=2;
          c*=2
        }
    }

    CustomProjection.prototype=new GProjection();

    CustomProjection.prototype.fromLatLngToPixel=function(latlng,zoom)
{
        var c=Math.round(this.pixelOrigin[zoom].x+latlng.lng()
*this.pixelsPerLonDegree[zoom]);
        var d=Math.round(this.pixelOrigin[zoom].y+(-2*latlng.lat())
*this.pixelsPerLonDegree[zoom]);
        return new GPoint(c,d)
    };

    CustomProjection.prototype.fromPixelToLatLng=function
(pixel,zoom,unbounded){
        var d=(pixel.x-this.pixelOrigin[zoom].x)/
this.pixelsPerLonDegree[zoom];
        var e=-0.5*(pixel.y-this.pixelOrigin[zoom].y)/
this.pixelsPerLonDegree[zoom];
        return new GLatLng(e,d,unbounded)
    };

    CustomProjection.prototype.tileCheckRange=function
(tile,zoom,tilesize){
        var tileBounds=this.tileBounds[zoom];
        if (tile.y<0 || tile.y >= tileBounds) {return false;}
        if (this.isWrapped) {
                if (tile.x<0 || tile.x>=tileBounds) {
                        tile.x = tile.x%tileBounds;
                        if (tile.x < 0) {tile.x+=tileBounds}
                }
        }
        else {
                if (tile.x<0 || tile.x>=tileBounds) {return false;}
        }
        return true;
    }

    CustomProjection.prototype.getWrapWidth=function(zoom) {
        return this.tileBounds[zoom]*this.tileSize;
    }
////////////////////////////////////////////////////////////////////////////

    function customGetTileURL(a,b) {
      //converts tile x,y into keyhole string

      var c=Math.pow(2,b);

        var d=a.x;
        var e=a.y;
        var f="t";
        for(var g=0;g<b;g++){
            c=c/2;
            if(e<c){
                if(d<c){f+="q"}
                else{f+="r";d-=c}
            }
            else{
                if(d<c){f+="t";e-=c}
                else{f+="s";d-=c;e-=c}
                //return G_NORMAL_MAP.getTileLayers()[0].getTileUrl
(a,b);
            }
        }
        return "images/map/Map-tiles/"+f+".jpg"
    }


    function getWindowHeight() {
        if (window.self&&self.innerHeight) {
            return self.innerHeight;
        }
        if
(document.documentElement&&document.documentElement.clientHeight) {
            return document.documentElement.clientHeight;
        }
        return 0;
    }

    function resizeMapDiv() {
        //Resize the height of the div containing the map.
        //Do not call any map methods here as the resize is called
before the map is created.
        var d=document.getElementById("map_canvas");
        var offsetTop=0;
        for (var elem=d; elem!=null; elem=elem.offsetParent) {
            offsetTop+=elem.offsetTop;
        }
        var height=getWindowHeight()-offsetTop-16;
        if (height>=0) {
            d.style.height=height+"px";
        }
    }


    function loadIsrael() {
                    if(!israelLoaded)
                    {
                              if (GBrowserIsCompatible()) {

                                //resizeMapDiv();
                                var copyright = new GCopyright(1,
                                                      new GLatLngBounds(new 
GLatLng(33.405,
35.966),
                                                                        new 
GLatLng
(29.4430, 34.178)),
                                                      0,
                                                      "<a 
href=\"http://www.casa.ucl.ac.uk
\">CASA</a>");
                                var copyrightCollection = new 
GCopyrightCollection
("GMapImgCutter");
                                copyrightCollection.addCopyright(copyright);

                                //create a custom picture layer
                                var pic_tileLayers = [ new 
GTileLayer(copyrightCollection ,
0, 6)];

                                pic_tileLayers[0].getTileUrl = customGetTileURL;
                                pic_tileLayers[0].isPng = function() { return 
false; };
                                pic_tileLayers[0].getOpacity = function() { 
return 1.0; };


                                var proj=new CustomProjection(7,imageWraps);
                                var pic_customMap = new 
GMapType(pic_tileLayers, proj,
"Israel",
                                            {maxResolution:6, minResolution:0, 
errorMessage:"Data
not available"});

                                map.addMapType(pic_customMap);

                                //map.setCenter(new GLatLng(53.1767260605, 
-20.3427745698),
17);
                                //var myTileOverlay=new 
GTileLayerOverlay(pic_tileLayers);
                                //map.addOverlay(myTileOverlay);

                                /*
                                 * This code add the Israel Map as a seperate 
Map type
                                 *
                                        var proj=new 
CustomProjection(7,imageWraps);

                                        var pic_customMap = new 
GMapType(pic_tileLayers, proj,
"Israel",
                                            {maxResolution:6, minResolution:0, 
errorMessage:"Data
not available"});

                                                map.addMapType(pic_customMap);
                                        */

                                        //Now create the custom map. Would 
normally be
G_NORMAL_MAP,G_SATELLITE_MAP,G_HYBRID_MAP
                                        //map = new 
GMap2(document.getElementById("map"),{mapTypes:
[pic_customMap]});
                                        //map.addControl(new 
GLargeMapControl());
                                        //map.addControl(new GMapTypeControl());
                                                //map.addControl(new 
GOverviewMapControl());
                                        //map.enableDoubleClickZoom();
                                                //map.enableContinuousZoom();
                                                //map.enableScrollWheelZoom();
                                        //map.setCenter(new GLatLng(centreLat, 
centreLon),
initialZoom, pic_customMap);

                                                
/////////////////////////////////////////////////////////////////////////////////////
                                                //Add any markers here e.g.
                                                //      map.addOverlay(new 
GMarker(new GLatLng(x,y)));
                                                
/////////////////////////////////////////////////////////////////////////////////////
                                        }
                      }
    }
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Maps API" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/Google-Maps-API?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to