Bienvenue sur PostGIS.fr

Bienvenue sur PostGIS.fr , le site de la communauté des utilisateurs francophones de PostGIS.

PostGIS ajoute le support d'objets géographique à la base de données PostgreSQL. En effet, PostGIS "spatialise" le serverur PostgreSQL, ce qui permet de l'utiliser comme une base de données SIG.

Maintenu à jour, en fonction de nos disponibilités et des diverses sorties des outils que nous testons, nous vous proposons l'ensemble de nos travaux publiés en langue française.

source: trunk/workshop-routing-foss4g/web/proj4js/lib/projCode/lcc.js @ 76

Revision 76, 5.3 KB checked in by djay, 12 years ago (diff)

Ajout du répertoire web

  • Property svn:executable set to *
Line 
1/*******************************************************************************
2NAME                            LAMBERT CONFORMAL CONIC
3
4PURPOSE:        Transforms input longitude and latitude to Easting and
5                Northing for the Lambert Conformal Conic projection.  The
6                longitude and latitude must be in radians.  The Easting
7                and Northing values will be returned in meters.
8
9
10ALGORITHM REFERENCES
11
121.  Snyder, John P., "Map Projections--A Working Manual", U.S. Geological
13    Survey Professional Paper 1395 (Supersedes USGS Bulletin 1532), United
14    State Government Printing Office, Washington D.C., 1987.
15
162.  Snyder, John P. and Voxland, Philip M., "An Album of Map Projections",
17    U.S. Geological Survey Professional Paper 1453 , United State Government
18*******************************************************************************/
19
20
21//<2104> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x0=-17044 +x0=-23139.97 +ellps=intl +units=m +no_defs  no_defs
22
23// Initialize the Lambert Conformal conic projection
24// -----------------------------------------------------------------
25
26//Proj4js.Proj.lcc = Class.create();
27Proj4js.Proj.lcc = {
28  init : function() {
29
30    // array of:  r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north
31    //double c_lat;                   /* center latitude                      */
32    //double c_lon;                   /* center longitude                     */
33    //double lat1;                    /* first standard parallel              */
34    //double lat2;                    /* second standard parallel             */
35    //double r_maj;                   /* major axis                           */
36    //double r_min;                   /* minor axis                           */
37    //double false_east;              /* x offset in meters                   */
38    //double false_north;             /* y offset in meters                   */
39
40      if (!this.lat2){this.lat2=this.lat0;}//if lat2 is not defined
41      if (!this.k0) this.k0 = 1.0;
42
43    // Standard Parallels cannot be equal and on opposite sides of the equator
44      if (Math.abs(this.lat1+this.lat2) < Proj4js.common.EPSLN) {
45        Proj4js.reportError("lcc:init: Equal Latitudes");
46        return;
47      }
48
49      var temp = this.b / this.a;
50      this.e = Math.sqrt(1.0 - temp*temp);
51
52      var sin1 = Math.sin(this.lat1);
53      var cos1 = Math.cos(this.lat1);
54      var ms1 = Proj4js.common.msfnz(this.e, sin1, cos1);
55      var ts1 = Proj4js.common.tsfnz(this.e, this.lat1, sin1);
56
57      var sin2 = Math.sin(this.lat2);
58      var cos2 = Math.cos(this.lat2);
59      var ms2 = Proj4js.common.msfnz(this.e, sin2, cos2);
60      var ts2 = Proj4js.common.tsfnz(this.e, this.lat2, sin2);
61
62      var ts0 = Proj4js.common.tsfnz(this.e, this.lat0, Math.sin(this.lat0));
63
64      if (Math.abs(this.lat1 - this.lat2) > Proj4js.common.EPSLN) {
65        this.ns = Math.log(ms1/ms2)/Math.log(ts1/ts2);
66      } else {
67        this.ns = sin1;
68      }
69      this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));
70      this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);
71      if (!this.title) this.title = "Lambert Conformal Conic";
72    },
73
74
75    // Lambert Conformal conic forward equations--mapping lat,long to x,y
76    // -----------------------------------------------------------------
77    forward : function(p) {
78
79      var lon = p.x;
80      var lat = p.y;
81
82    // convert to radians
83      if ( lat <= 90.0 && lat >= -90.0 && lon <= 180.0 && lon >= -180.0) {
84        //lon = lon * Proj4js.common.D2R;
85        //lat = lat * Proj4js.common.D2R;
86      } else {
87        Proj4js.reportError("lcc:forward: llInputOutOfRange: "+ lon +" : " + lat);
88        return null;
89      }
90
91      var con  = Math.abs( Math.abs(lat) - Proj4js.common.HALF_PI);
92      var ts, rh1;
93      if (con > Proj4js.common.EPSLN) {
94        ts = Proj4js.common.tsfnz(this.e, lat, Math.sin(lat) );
95        rh1 = this.a * this.f0 * Math.pow(ts, this.ns);
96      } else {
97        con = lat * this.ns;
98        if (con <= 0) {
99          Proj4js.reportError("lcc:forward: No Projection");
100          return null;
101        }
102        rh1 = 0;
103      }
104      var theta = this.ns * Proj4js.common.adjust_lon(lon - this.long0);
105      p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;
106      p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;
107
108      return p;
109    },
110
111  // Lambert Conformal Conic inverse equations--mapping x,y to lat/long
112  // -----------------------------------------------------------------
113  inverse : function(p) {
114
115    var rh1, con, ts;
116    var lat, lon;
117    var x = (p.x - this.x0)/this.k0;
118    var y = (this.rh - (p.y - this.y0)/this.k0);
119    if (this.ns > 0) {
120      rh1 = Math.sqrt (x * x + y * y);
121      con = 1.0;
122    } else {
123      rh1 = -Math.sqrt (x * x + y * y);
124      con = -1.0;
125    }
126    var theta = 0.0;
127    if (rh1 != 0) {
128      theta = Math.atan2((con * x),(con * y));
129    }
130    if ((rh1 != 0) || (this.ns > 0.0)) {
131      con = 1.0/this.ns;
132      ts = Math.pow((rh1/(this.a * this.f0)), con);
133      lat = Proj4js.common.phi2z(this.e, ts);
134      if (lat == -9999) return null;
135    } else {
136      lat = -Proj4js.common.HALF_PI;
137    }
138    lon = Proj4js.common.adjust_lon(theta/this.ns + this.long0);
139
140    p.x = lon;
141    p.y = lat;
142    return p;
143  }
144};
145
146
147
148
Note: See TracBrowser for help on using the repository browser.