Commit | Line | Data |
---|---|---|
c5ba5b04 JW |
1 | \r |
2 | L.Projection.Mercator = {\r | |
3 | MAX_LATITUDE: 85.0840591556,\r | |
4 | \r | |
5 | R_MINOR: 6356752.3142,\r | |
6 | R_MAJOR: 6378137,\r | |
7 | \r | |
8 | project: function(/*LatLng*/ latlng) /*-> Point*/ {\r | |
9 | var d = L.LatLng.DEG_TO_RAD,\r | |
10 | max = this.MAX_LATITUDE,\r | |
11 | lat = Math.max(Math.min(max, latlng.lat), -max),\r | |
12 | r = this.R_MAJOR,\r | |
13 | x = latlng.lng * d * r,\r | |
14 | y = lat * d,\r | |
15 | tmp = this.R_MINOR / r,\r | |
16 | eccent = Math.sqrt(1.0 - tmp * tmp),\r | |
17 | con = eccent * Math.sin(y);\r | |
18 | \r | |
19 | con = Math.pow((1 - con)/(1 + con), eccent * 0.5);\r | |
20 | \r | |
21 | var ts = Math.tan(0.5 * ((Math.PI * 0.5) - y)) / con;\r | |
22 | y = -r * Math.log(ts);\r | |
23 | \r | |
24 | return new L.Point(x, y);\r | |
25 | },\r | |
26 | \r | |
27 | unproject: function(/*Point*/ point, /*Boolean*/ unbounded) /*-> LatLng*/ { \r | |
28 | var d = L.LatLng.RAD_TO_DEG,\r | |
29 | r = this.R_MAJOR,\r | |
30 | lng = point.x * d / r,\r | |
31 | tmp = this.R_MINOR / r,\r | |
32 | eccent = Math.sqrt(1 - (tmp * tmp)),\r | |
33 | ts = Math.exp(- point.y / r),\r | |
34 | phi = Math.PI/2 - 2 * Math.atan(ts),\r | |
35 | numIter = 15,\r | |
36 | tol = 1e-7,\r | |
37 | i = numIter,\r | |
38 | dphi = 0.1,\r | |
39 | con;\r | |
40 | \r | |
41 | while ((Math.abs(dphi) > tol) && (--i > 0)) {\r | |
42 | con = eccent * Math.sin(phi);\r | |
43 | dphi = Math.PI/2 - 2 * Math.atan(ts * Math.pow((1.0 - con)/(1.0 + con), 0.5 * eccent)) - phi;\r | |
44 | phi += dphi;\r | |
45 | }\r | |
46 | \r | |
47 | return new L.LatLng(phi * d, lng, unbounded);\r | |
48 | }\r | |
49 | };\r |