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

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

Potlatch 0.10c

File size: 8.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-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                // resize Yahoo
42                clearInterval(_root.yahooresizer);
43                if (_root.yahooinited) {
44                        setYahooSize();
45                        _root.ylat=centrelat(_root.bgyoffset);
46                        _root.ylon=centrelong(_root.bgxoffset);
47                        repositionYahoo(true);
48                }
49                // resize main mask and panel
50                _root.masksquare._height=
51                _root.panel._y=Stage.height-panelheight;
52                _root.masksquare._width=Stage.width;
53                // resize panel window
54                if (_root.panel.properties.proptype!='') {
55                        _root.panel.properties.init(_root.panel.properties.proptype,getPanelColumns(),4);
56                }
57                _root.panel.i_repeatattr._x=
58                _root.panel.i_newattr._x=
59                _root.panel.i_newrel._x=120+getPanelColumns()*190;
60                // resize other stuff
61                _root.waysloading._x=
62                _root.tooltip._x=Stage.width-220;
63                setStatusPosition();
64                for (var w in _root.windows) {
65                        if (typeof(_root.windows[w])=='movieclip') { _root.windows[w].drawAreas(); }
66                }
67                // note time, so we can issue a whichWays soon
68                updateCoords(_root.map._x,_root.map._y);
69                _root.lastresize=new Date();
70        }
71
72        function setYahooSize() {
73                if (_root.yahoowidth!=Stage.width || _root.yahooheight!=Stage.height-panelheight) {
74                        _root.yahoowidth=Stage.width;
75                        _root.yahooheight=Stage.height-panelheight;
76                        _root.yahoo.myMap.setSize(yahoowidth,yahooheight);
77                }
78                _root.yahoorightsize=true;
79        }
80
81        // updateLinks - update view/edit tabs
82
83        function updateLinks() {
84//              if (winie) { fscommand("maplinks",centrelong(0),centrelat(0),_root.scale); } else {
85                getURL("javascript:updatelinks("+centrelong(0)+","+centrelat(0)+","+_root.scale+")");
86        }
87       
88        // maximiseSWF - call JavaScript to maximise/minimise
89       
90        function maximiseSWF() {
91                if (_root.maximised) { getURL("javascript:minimiseMap()"); }
92                                                else { getURL("javascript:maximiseMap()"); }
93                _root.maximised=!_root.maximised;
94        }
95
96        // =====================================================================================
97        // Zoom
98
99        // zoomIn, zoomOut, changeScaleTo - change scale functions
100       
101        function zoomIn() {
102                if (_root.scale<_root.maxscale) {
103                        if (_root.waycount>500) { purgeWays(); }
104                        if (_root.poicount>500) { purgePOIs(); }
105                        zoomTo(_root.scale+1,_root.map._x*2-xradius,_root.map._y*2-yradius,false);
106                }
107        }
108       
109        function zoomOut() {
110                if (_root.scale>_root.minscale) {
111                        zoomTo(_root.scale-1,(_root.map._x+xradius)/2,(_root.map._y+yradius)/2,true);
112                }
113        }
114
115        function zoomTo(newscale,newx,newy,ww) {
116                blankTileQueue();
117                changeScaleTo(newscale);
118                updateCoords(newx,newy);
119                updateLinks();
120                redrawBackground();
121                resizePOIs();
122                if (ww) { whichWays(); }
123                redrawWays();
124        }
125
126        function changeScaleTo(newscale) {
127                _root.map.tiles[_root.scale]._visible=false; _root.scale=newscale;
128                _root.map.tiles[_root.scale]._visible=true;
129                if (_root.scale==_root.minscale) { _root.i_zoomout._alpha=25;  }
130                                                                        else { _root.i_zoomout._alpha=100; }
131                if (_root.scale==_root.maxscale) { _root.i_zoomin._alpha =25;  }
132                                                                        else { _root.i_zoomin._alpha =100; }
133                _root.tolerance=4/Math.pow(2,_root.scale-13);
134                if (preferences.data.thinlines) {
135                        _root.linewidth=3;
136                } else {
137                        _root.linewidth=3+Math.pow(Math.max(0,_root.scale-15),2);
138                }
139        }
140
141        function redrawWays() {
142                for (var qway in _root.map.ways) { _root.map.ways[qway].redraw(); }
143                if (_root.wayselected) {
144                        _root.ws.highlight();
145                        _root.ws.highlightPoints(5000,"anchor");
146                }
147                restartElastic();
148        }
149
150        // =====================================================================================
151        // Backgrounds
152
153        function setBackground(n) {
154                preferences.data.baselayer=n;
155                preferences.flush();
156                _root.bgxoffset=0; _root.bgyoffset=0;
157                setStatusPosition();
158                redrawBackground(); 
159        }
160
161        function redrawBackground() {
162                var alpha=100-50*preferences.data.dimbackground;
163                switch (preferences.data.baselayer) {
164                        case 1: ; // temporarily disable OAM
165                        case 0: _root.yahoo._visible=false;     // none
166                                        _root.map.tiles._visible=false;
167                                        break;
168                        case 2: _root.yahoo._visible=true;
169                                        _root.yahoo._alpha=alpha;       
170                                        _root.yahoo._x=0; _root.yahoo._y=0;
171                                        _root.ylat=centrelat(_root.bgyoffset);
172                                        _root.ylon=centrelong(_root.bgxoffset);
173                                        _root.yzoom=18-_root.scale;
174                                        _root.map.tiles._visible=false;
175                                        if (!_root.yahooloaded) {       // Yahoo
176                                                loadMovie(yahoourl,_root.yahoo); _root.yahooloaded=true;
177                                                _root.yahoo.swapDepths(_root.masksquare);
178                                        } else if (_root.yahooinited) {
179                                                repositionYahoo(true);
180                                        }
181                                        break;
182                        default: if (_root.tilesetloaded!=preferences.data.baselayer) {
183                                                _root.tilesetloaded=preferences.data.baselayer;
184                                                initTiles();
185                                        }
186                                        _root.map.tiles._visible=true;
187                                        _root.map.tiles._alpha=alpha;
188                                        _root.yahoo._visible=false;
189                                        updateTiles();
190                                        break;
191                }
192        }
193
194        function repositionYahoo(force) {
195                clearInterval(_root.yahooresizer);
196                if (!_root.yahooinited) { return; }
197                pos=_root.yahoo.myMap.getCenter();
198                if (pos) {
199                        pos.lat=_root.ylat;
200                        pos.lon=_root.ylon;
201                        if (_root.lastyzoom!=_root.yzoom) {
202                                _root.yahoo.myMap.setCenterByLatLonAndZoom(pos,_root.yzoom,0);
203                        } else if (_root.lastylat!=_root.ylat || _root.lastylon!=_root.ylon || force) {
204                                _root.yahoo.myMap.setCenterByLatLon(pos,0);
205                        }
206                        clearInterval(_root.copyrightID);
207                        _root.copyrightID=setInterval(refreshYahooCopyright,1000);
208                        _root.lastyzoom=_root.yzoom;
209                        _root.lastylon =_root.ylon;
210                        _root.lastylat =_root.ylat;
211                }
212        }
213
214        function refreshYahooCopyright() {
215                clearInterval(_root.copyrightID);
216                _root.yahoo.myMap.map.updateCopyright();
217        };
218
219        function enableYahooZoom() {
220                b=_global.com.yahoo.maps.projections.Projection.prototype;
221                ASSetPropFlags(b,null,0,true);
222                b.MAXLEVEL=20;
223       
224                b=_global.com.yahoo.maps.projections.MercatorProjection.prototype;
225                ASSetPropFlags(b,null,0,true);
226       
227                b.ll_to_pxy = function (lat, lon) {
228                        var ys=18-_root.scale;
229                        var cp=1 << 26 - ys;
230                        this.level_=ys;
231                        this.ntiles_w_ = cp / this.tile_w_;
232                        this.ntiles_h_ = cp / this.tile_h_;
233                        this.meters_per_pixel_ = 111111*360 / cp;
234                        this.x_per_lon_ = cp / 360;
235                       
236                        alat = Math.abs(lat);
237                        alon = lon + 180;
238                        v_pxy = new this.PixelXY();
239                        if (alat >= 90 || alon > 360 || alon < 0) {
240                                return v_pxy;
241                        }
242                        alat *= this.RAD_PER_DEG;
243                        v_pxy.m_x = alon * this.x_per_lon_;
244                        ytemp = Math.log(Math.tan(alat) + 1 / Math.cos(alat)) / Math.PI;
245                        v_pxy.m_y = ytemp * this.pixel_height() / 2;
246                        if (lat < 0) {
247                                v_pxy.m_y = -v_pxy.m_y;
248                        }
249                        this.status_ = 1;
250                        return v_pxy;
251                };
252       
253                b=_global.com.yahoo.maps.flash.ExtensibleTileUrl.prototype;
254                ASSetPropFlags(b,null,0,true);
255       
256                b.makeUrl = function (row, col, mapViewType) {
257                  return this.satelliteUrl + '&x=' + col + '&y=' + row + '&z=' + String(19-this.zoom) + '&r=1&v=' + this.satelliteBatch + '&t=a';
258                };
259        }
Note: See TracBrowser for help on using the repository browser.