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

Last change on this file since 7604 was 7604, checked in by richard, 11 years ago

Potlatch 0.8c

File size: 6.4 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-panelheight)/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); _root.tile_t=lat2tile (edge_t);
17                _root.edge_b=coord2lat ((-_root.map._y+2*yradius)/bscale); _root.tile_b=lat2tile (edge_b);
18                _root.edge_l=coord2long((-_root.map._x          )/bscale); _root.tile_l=long2tile(edge_l);
19                _root.edge_r=coord2long((-_root.map._x+2*xradius)/bscale); _root.tile_r=long2tile(edge_r);
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-panelheight;
53                _root.masksquare._width=Stage.width;
54                // resize panel window
55                if (_root.panel.properties.proptype!='') {
56                        _root.panel.properties.init(_root.panel.properties.proptype,getPanelColumns(),4);
57                        _root.panel.i_repeatattr._x=
58                        _root.panel.i_newattr._x=
59                        _root.panel.i_newrel._x=120+getPanelColumns()*190;
60                }
61                // resize other stuff
62                _root.waysloading._x=
63                _root.tooltip._x=Stage.width-120;
64                _root.practice._x=Stage.width-97; _root.practice._y=Stage.height-panelheight-22;
65                // note time, so we can issue a whichWays soon
66                _root.lastresize=new Date();
67        }
68
69        function setYahooSize() {
70                if (_root.yahoowidth!=Stage.width || _root.yahooheight!=Stage.height-panelheight) {
71                        _root.yahoowidth=Stage.width;
72                        _root.yahooheight=Stage.height-panelheight;
73                        _root.yahoo.myMap.setSize(yahoowidth,yahooheight);
74                }
75                _root.yahoorightsize=true;
76        }
77
78        // updateLinks - update view/edit tabs
79
80        function updateLinks() {
81//              if (winie) { fscommand("maplinks",centrelong(0),centrelat(0),_root.scale); } else {
82                getURL("javascript:updatelinks("+centrelong(0)+","+centrelat(0)+","+_root.scale+")");
83        }
84
85        // =====================================================================================
86        // Zoom
87
88        // zoomIn, zoomOut, changeScaleTo - change scale functions
89       
90        function zoomIn() {
91                if (_root.scale<_root.maxscale) {
92                        if (_root.waycount>500) { purgeWays(); }
93                        if (_root.poicount>500) { purgePOIs(); }
94                        zoomTo(_root.scale+1,_root.map._x*2-xradius,_root.map._y*2-yradius,false);
95                }
96        }
97       
98        function zoomOut() {
99                if (_root.scale>_root.minscale) {
100                        zoomTo(_root.scale-1,(_root.map._x+xradius)/2,(_root.map._y+yradius)/2,true);
101                }
102        }
103
104        function zoomTo(newscale,newx,newy,ww) {
105                blankTileQueue();
106                changeScaleTo(newscale);
107                updateCoords(newx,newy);
108                updateLinks();
109                redrawBackground();
110                resizePOIs();
111                if (ww) { whichWays(); }
112                for (qway in _root.map.ways) { _root.map.ways[qway].redraw(); }
113                if (_root.wayselected) {
114                        _root.ws.highlight();
115                        _root.ws.highlightPoints(5000,"anchor");
116                }
117                restartElastic();
118        }
119
120        function changeScaleTo(newscale) {
121                _root.map.tiles[_root.scale]._visible=false; _root.scale=newscale;
122                _root.map.tiles[_root.scale]._visible=true;
123                if (_root.scale==_root.minscale) { _root.i_zoomout._alpha=25;  }
124                                                                        else { _root.i_zoomout._alpha=100; }
125                if (_root.scale==_root.maxscale) { _root.i_zoomin._alpha =25;  }
126                                                                        else { _root.i_zoomin._alpha =100; }
127                _root.tolerance=4/Math.pow(2,_root.scale-13);
128                _root.linewidth=3+Math.pow(Math.max(0,_root.scale-15),2);
129        }
130
131        // =====================================================================================
132        // Backgrounds
133
134        function setBackground(n) {
135                preferences.data.baselayer=n;
136                preferences.flush();
137                _root.bgxoffset=0; _root.bgyoffset=0;
138                redrawBackground(); 
139        }
140
141        function redrawBackground() {
142                var alpha=100-50*preferences.data.dimbackground;
143                switch (preferences.data.baselayer) {
144                        case 0: _root.yahoo._visible=false;     // none
145                                        _root.map.tiles._visible=false;
146                                        break;
147                        case 2: _root.yahoo._visible=true;
148                                        _root.yahoo._alpha=alpha;       
149                                        _root.yahoo._x=0; _root.yahoo._y=0;
150                                        _root.ylat=centrelat(_root.bgyoffset);
151                                        _root.ylon=centrelong(_root.bgxoffset);
152                                        _root.yzoom=18-_root.scale;
153                                        _root.map.tiles._visible=false;
154                                        if (!_root.yahooloaded) {       // Yahoo
155                                                loadMovie(yahoourl,_root.yahoo); _root.yahooloaded=true;
156                                                _root.yahoo.swapDepths(_root.masksquare);
157                                        } else if (_root.yahooinited) {
158                                                repositionYahoo(true);
159                                        }
160                                        break;
161                        default: if (_root.tilesetloaded!=preferences.data.baselayer) {
162                                                _root.tilesetloaded=preferences.data.baselayer;
163                                                initTiles();
164                                        }
165                                        _root.map.tiles._visible=true;
166                                        _root.map.tiles._alpha=alpha;
167                                        _root.yahoo._visible=false;
168                                        updateTiles();
169                                        break;
170                }
171        }
172
173        function repositionYahoo(force) {
174                clearInterval(_root.yahooresizer);
175                if (!_root.yahooinited) { return; }
176                pos=_root.yahoo.myMap.getCenter();
177                if (pos) {
178                        pos.lat=_root.ylat;
179                        pos.lon=_root.ylon;
180                        if (_root.lastyzoom!=_root.yzoom) {
181                                _root.yahoo.myMap.setCenterByLatLonAndZoom(pos,_root.yzoom,0);
182                        } else if (_root.lastylat!=_root.ylat || _root.lastylon!=_root.ylon || force) {
183                                _root.yahoo.myMap.setCenterByLatLon(pos,0);
184                        }
185                        _root.lastyzoom=_root.yzoom;
186                        _root.lastylon =_root.ylon;
187                        _root.lastylat =_root.ylat;
188                }
189        }
Note: See TracBrowser for help on using the repository browser.