source: subversion/applications/editors/potlatch/world.as @ 6849

Last change on this file since 6849 was 6849, checked in by richard, 12 years ago

0.7a

File size: 6.1 KB
Line 
1
2        // =====================================================================================
3        // Potlatch co-ordinate handling
4
5        // updateCoords - update all co-ordinate global variables
6
7        function updateCoords(tx,ty) {
8                _root.bscale=Math.pow(2,_root.scale-13);
9                _root.xradius=Stage.width/2;
10                _root.yradius=(Stage.height-100)/2;
11
12                _root.map._x=tx; _root.map._y=ty;
13                _root.map._xscale=100*bscale;
14                _root.map._yscale=100*bscale;
15
16                _root.edge_t=coord2lat ((-_root.map._y          )/bscale);
17                _root.edge_b=coord2lat ((-_root.map._y+2*yradius)/bscale);
18                _root.edge_l=coord2long((-_root.map._x          )/bscale);
19                _root.edge_r=coord2long((-_root.map._x+2*xradius)/bscale);
20
21                _root.tile_t=lat2tile (coord2lat ((-_root.bgyoffset-_root.map._y          )/bscale));
22                _root.tile_b=lat2tile (coord2lat ((-_root.bgyoffset-_root.map._y+2*yradius)/bscale));
23                _root.tile_l=long2tile(coord2long((-_root.bgxoffset-_root.map._x          )/bscale));
24                _root.tile_r=long2tile(coord2long((-_root.bgxoffset-_root.map._x+2*xradius)/bscale));
25        }
26
27        // lat/long <-> coord conversion
28
29        function lat2coord(a)   { return -(lat2y(a)-basey)*masterscale; }
30        function coord2lat(a)   { return y2lat(a/-masterscale+basey); }
31        function long2coord(a)  { return (a-baselong)*masterscale; }
32        function coord2long(a)  { return a/masterscale+baselong; }
33        function y2lat(a) { return 180/Math.PI * (2 * Math.atan(Math.exp(a*Math.PI/180)) - Math.PI/2); }
34        function lat2y(a) { return 180/Math.PI * Math.log(Math.tan(Math.PI/4+a*(Math.PI/180)/2)); }
35        function centrelat(o)  { return  coord2lat((yradius-_root.map._y-o)/Math.pow(2,_root.scale-13)); }
36        function centrelong(o) { return coord2long((xradius-_root.map._x-o)/Math.pow(2,_root.scale-13)); }
37
38        // resizeWindow - user has enlarged/shrunk window
39
40        function resizeWindow() {
41                updateCoords();
42                // resize Yahoo
43                clearInterval(_root.yahooresizer);
44                if (_root.yahooinited) {
45                        setYahooSize();
46                        _root.ylat=centrelat(_root.bgyoffset);
47                        _root.ylon=centrelong(_root.bgxoffset);
48                        repositionYahoo(true);
49                }
50                // resize main mask and panel
51                _root.masksquare._height=
52                _root.panel._y=Stage.height-100;
53                _root.masksquare._width=Stage.width;
54                // resize other stuff
55                _root.waysloading._x=
56                _root.tooltip._x=Stage.width-120;
57                _root.practice._x=Stage.width-97; _root.practice._y=Stage.height-122;
58                // note time, so we can issue a whichWays soon
59                _root.lastresize=new Date();
60        }
61
62        function setYahooSize() {
63                if (_root.yahoowidth!=Stage.width || _root.yahooheight!=Stage.height-100) {
64                        _root.yahoowidth=Stage.width;
65                        _root.yahooheight=Stage.height-100;
66                        _root.yahoo.myMap.setSize(yahoowidth,yahooheight);
67                }
68                _root.yahoorightsize=true;
69        }
70
71        // updateLinks - update view/edit tabs
72
73        function updateLinks() {
74//              if (winie) { fscommand("maplinks",centrelong(0),centrelat(0),_root.scale); } else {
75                getURL("javascript:updatelinks("+centrelong(0)+","+centrelat(0)+","+_root.scale+")");
76        }
77
78        // =====================================================================================
79        // Zoom
80
81        // zoomIn, zoomOut, changeScaleTo - change scale functions
82       
83        function zoomIn() {
84                if (_root.scale<_root.maxscale) {
85                        if (_root.waycount>500) { purgeWays(); }
86                        if (_root.poicount>500) { purgePOIs(); }
87                        zoomTo(_root.scale+1,_root.map._x*2-xradius,_root.map._y*2-yradius,false);
88                }
89        }
90       
91        function zoomOut() {
92                if (_root.scale>_root.minscale) {
93                        zoomTo(_root.scale-1,(_root.map._x+xradius)/2,(_root.map._y+yradius)/2,true);
94                }
95        }
96
97        function zoomTo(newscale,newx,newy,ww) {
98                blankTileQueue();
99                changeScaleTo(newscale);
100                updateCoords(newx,newy);
101                updateLinks();
102                redrawBackground();
103                resizePOIs();
104                if (ww) { whichWays(); }
105                for (qway in _root.map.ways) { _root.map.ways[qway].redraw(); }
106                if (_root.wayselected) {
107                        _root.ws.highlight();
108                        _root.ws.highlightPoints(5000,"anchor");
109                }
110                restartElastic();
111        }
112
113        function changeScaleTo(newscale) {
114                _root.map.tiles[_root.scale]._visible=false; _root.scale=newscale;
115                _root.map.tiles[_root.scale]._visible=true;
116                if (_root.scale==_root.minscale) { _root.i_zoomout._alpha=25;  }
117                                                                        else { _root.i_zoomout._alpha=100; }
118                if (_root.scale==_root.maxscale) { _root.i_zoomin._alpha =25;  }
119                                                                        else { _root.i_zoomin._alpha =100; }
120                _root.tolerance=4/Math.pow(2,_root.scale-13);
121        }
122
123        // =====================================================================================
124        // Backgrounds
125
126        function setBackground(n) {
127                preferences.data.baselayer=n;
128                preferences.flush();
129                _root.bgxoffset=0; _root.bgyoffset=0;
130                redrawBackground(); 
131        }
132
133        function redrawBackground() {
134                var alpha=100-50*preferences.data.dimbackground;
135                switch (preferences.data.baselayer) {
136                        case 0: _root.yahoo._visible=false;     // none
137                                        _root.map.tiles._visible=false;
138                                        break;
139                        case 2: _root.yahoo._visible=true;
140                                        _root.yahoo._alpha=alpha;       
141                                        _root.yahoo._x=0; _root.yahoo._y=0;
142                                        _root.ylat=centrelat(_root.bgyoffset);
143                                        _root.ylon=centrelong(_root.bgxoffset);
144                                        _root.yzoom=18-_root.scale;
145                                        _root.map.tiles._visible=false;
146                                        if (!_root.yahooloaded) {       // Yahoo
147                                                loadMovie(yahoourl,_root.yahoo); _root.yahooloaded=true;
148                                                _root.yahoo.swapDepths(_root.masksquare);
149                                        } else if (_root.yahooinited) {
150                                                repositionYahoo(true);
151                                        }
152                                        break;
153                        case 1: var a=1; // OpenAerialMap       (var a=1 is just dummy code)
154                        case 3: var a=1; // Mapnik
155                        case 4: var a=1; // Osmarender
156                        case 5: var a=1; // Maplint
157                                        if (_root.tilesetloaded!=preferences.data.baselayer) {
158                                                _root.tilesetloaded=preferences.data.baselayer;
159                                                initTiles();
160                                        }
161                                        _root.map.tiles._visible=true;
162                                        _root.map.tiles._alpha=alpha;
163                                        _root.yahoo._visible=false;
164                                        updateTiles();
165                                        break;
166                }
167        }
168
169        function repositionYahoo(force) {
170                clearInterval(_root.yahooresizer);
171                if (!_root.yahooinited) { return; }
172                pos=_root.yahoo.myMap.getCenter();
173                if (pos) {
174                        pos.lat=_root.ylat;
175                        pos.lon=_root.ylon;
176                        if (_root.lastyzoom!=_root.yzoom) {
177                                _root.yahoo.myMap.setCenterByLatLonAndZoom(pos,_root.yzoom,0);
178                        } else if (_root.lastylat!=_root.ylat || _root.lastylon!=_root.ylon || force) {
179                                _root.yahoo.myMap.setCenterByLatLon(pos,0);
180                        }
181                        _root.lastyzoom=_root.yzoom;
182                        _root.lastylon =_root.ylon;
183                        _root.lastylat =_root.ylat;
184                }
185        }
Note: See TracBrowser for help on using the repository browser.