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

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

some Yahoo improvements, still more to do...

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