OpenLayers OpenLayers

Ticket #686: openlayers-google.patch

File openlayers-google.patch, 4.2 kB (added by euzuro, 1 year ago)
  • lib/OpenLayers/Util.js

    old new  
    966966    } 
    967967    return head; 
    968968}; 
     969 
     970OpenLayers.Util.PI = Math.PI; 
     971OpenLayers.Util.HALF_PI = OpenLayers.Util.PI * 0.5; 
     972OpenLayers.Util.TWO_PI = OpenLayers.Util.PI * 2.0; 
     973OpenLayers.Util.EPSLN = 1.0e-10; 
     974OpenLayers.Util.D2R = 0.0174532925199; 
     975 
     976// Function to compute the constant small t for use in the forward 
     977//   computations in the Lambert Conformal Conic and the Polar 
     978//   Stereographic projections. 
     979// ----------------------------------------------------------------- 
     980OpenLayers.Util.tsfnz = function(eccent, phi, sinphi) { 
     981  var con = eccent * sinphi; 
     982  var com = .5 * eccent; 
     983  con = Math.pow(((1.0 - con) / (1.0 + con)), com); 
     984  return (Math.tan(.5 * (OpenLayers.Util.HALF_PI - phi)) / con); 
     985} 
     986 
     987OpenLayers.Util.adjust_lon = function(x) { 
     988    var x = (Math.abs(x) < OpenLayers.Util.PI) ? 
     989        x : (x - (sign(x) * OpenLayers.Util.TWO_PI)); 
     990    return(x); 
     991} 
     992 
     993OpenLayers.Util.ll2m = function(coords) { 
     994    var r_major = 6378137.0; 
     995    var r_minor = 6356752.31424518; 
     996    var lon_center = 0.0; 
     997    var lat_origin = 0.0; 
     998    var false_northing = 0.0; 
     999    var false_easting = 0.0; 
     1000    var temp = r_minor / r_major; 
     1001    var es=1.0 - Math.sqrt(temp); 
     1002    var e = Math.sqrt(es); 
     1003    var m1 = Math.cos(lat_origin) / (Math.sqrt( 1.0 - es * Math.sin(lat_origin) * Math.sin(lat_origin))); 
     1004 
     1005    var lon=coords[0]; 
     1006    var lat=coords[1]; 
     1007 
     1008    // convert to radians 
     1009    if (lat >= 90.0) { lat = 89.99; } 
     1010    if (lat <= -90.0) { lat = -89.99; } 
     1011    if (lon >=180.0) { lon = 179; } 
     1012    if (lon <=-180.0) { lon = -179; } 
     1013 
     1014    if (lat <= 90.0 && lat >= -90.0 && lon <= 180.0 && lon >= -180.0) { 
     1015        lat *= OpenLayers.Util.D2R; 
     1016        lon *= OpenLayers.Util.D2R; 
     1017    } else { 
     1018        alert("*** Input out of range ***: lon: " + lon + " - lat: " + lat); 
     1019        return null; 
     1020    } 
     1021 
     1022    if (Math.abs(lat)>= 90 && 
     1023        Math.abs(Math.abs(lat) - OpenLayers.Util.HALF_PI) <= OpenLayers.Util.EPSLN) { 
     1024        alert("Transformation cannot be computed at the poles"); 
     1025        return null; 
     1026    } else { 
     1027        var sinphi = Math.sin(lat); 
     1028        var ts = OpenLayers.Util.tsfnz(e, lat, sinphi); 
     1029        var x = false_easting + r_major * m1 * OpenLayers.Util.adjust_lon(lon - lon_center); 
     1030        var y = false_northing - r_major * m1 * Math.log(ts); 
     1031    } 
     1032     
     1033    return new Array(x,y); 
     1034}; 
     1035 
  • lib/OpenLayers/Layer/WMS.js

    old new  
    9696        if(this.gutter) { 
    9797            bounds = this.adjustBoundsByGutter(bounds); 
    9898        } 
    99         return this.getFullRequestString( 
     99         
     100        // HACK: if baselayer is a google layer and that google layer asks 
     101        // us to use EPSG:54004 convert bounds to mercator meters 
     102        if (this.map.baseLayer.CLASS_NAME == "OpenLayers.Layer.Google" && 
     103            this.map.baseLayer.projection == "EPSG:54004") { 
     104            bounds.left = OpenLayers.Util.ll2m(new Array(bounds.left,bounds.top))[0]; 
     105            bounds.top = OpenLayers.Util.ll2m(new Array(bounds.left,bounds.top))[1]; 
     106            bounds.right = OpenLayers.Util.ll2m(new Array(bounds.right,bounds.bottom))[0]; 
     107            bounds.bottom = OpenLayers.Util.ll2m(new Array(bounds.right,bounds.bottom))[1]; 
     108       } 
     109        
     110       return this.getFullRequestString( 
    100111                     {BBOX:bounds.toBBOX(), 
    101112                      WIDTH:this.imageSize.w, 
    102113                      HEIGHT:this.imageSize.h}); 
  • lib/OpenLayers/Layer/Google.js

    old new  
    134134    }, 
    135135     
    136136    */ 
     137     
     138    moveTo: function(bounds, zoomChanged, dragging) { 
     139        this.projection = this.map.projection; 
     140        if (this.map.zoom < 5) { 
     141            this.projection = "EPSG:54004"; 
     142        } 
     143        OpenLayers.Layer.EventPane.prototype.moveTo.apply(this, arguments); 
     144    }, 
    137145     
    138146  // 
    139147  // TRANSLATION: MapObject Bounds <-> OpenLayers.Bounds