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

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

hmmm, probably best not to gratuitously send the same request every second

File size: 8.0 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                }
58                _root.panel.i_repeatattr._x=
59                _root.panel.i_newattr._x=
60                _root.panel.i_newrel._x=120+getPanelColumns()*190;
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                redrawWays();
113        }
114
115        function changeScaleTo(newscale) {
116                _root.map.tiles[_root.scale]._visible=false; _root.scale=newscale;
117                _root.map.tiles[_root.scale]._visible=true;
118                if (_root.scale==_root.minscale) { _root.i_zoomout._alpha=25;  }
119                                                                        else { _root.i_zoomout._alpha=100; }
120                if (_root.scale==_root.maxscale) { _root.i_zoomin._alpha =25;  }
121                                                                        else { _root.i_zoomin._alpha =100; }
122                _root.tolerance=4/Math.pow(2,_root.scale-13);
123                if (preferences.data.thinlines) {
124                        _root.linewidth=3;
125                } else {
126                        _root.linewidth=3+Math.pow(Math.max(0,_root.scale-15),2);
127                }
128        }
129
130        function redrawWays() {
131                for (var qway in _root.map.ways) { _root.map.ways[qway].redraw(); }
132                if (_root.wayselected) {
133                        _root.ws.highlight();
134                        _root.ws.highlightPoints(5000,"anchor");
135                }
136                restartElastic();
137        }
138
139        // =====================================================================================
140        // Backgrounds
141
142        function setBackground(n) {
143                preferences.data.baselayer=n;
144                preferences.flush();
145                _root.bgxoffset=0; _root.bgyoffset=0;
146                redrawBackground(); 
147        }
148
149        function redrawBackground() {
150                var alpha=100-50*preferences.data.dimbackground;
151                switch (preferences.data.baselayer) {
152                        case 0: _root.yahoo._visible=false;     // none
153                                        _root.map.tiles._visible=false;
154                                        break;
155                        case 2: _root.yahoo._visible=true;
156                                        _root.yahoo._alpha=alpha;       
157                                        _root.yahoo._x=0; _root.yahoo._y=0;
158                                        _root.ylat=centrelat(_root.bgyoffset);
159                                        _root.ylon=centrelong(_root.bgxoffset);
160                                        _root.yzoom=18-_root.scale;
161                                        _root.map.tiles._visible=false;
162                                        if (!_root.yahooloaded) {       // Yahoo
163                                                loadMovie(yahoourl,_root.yahoo); _root.yahooloaded=true;
164                                                _root.yahoo.swapDepths(_root.masksquare);
165                                        } else if (_root.yahooinited) {
166                                                repositionYahoo(true);
167                                        }
168                                        break;
169                        default: if (_root.tilesetloaded!=preferences.data.baselayer) {
170                                                _root.tilesetloaded=preferences.data.baselayer;
171                                                initTiles();
172                                        }
173                                        _root.map.tiles._visible=true;
174                                        _root.map.tiles._alpha=alpha;
175                                        _root.yahoo._visible=false;
176                                        updateTiles();
177                                        break;
178                }
179        }
180
181        function repositionYahoo(force) {
182                clearInterval(_root.yahooresizer);
183                if (!_root.yahooinited) { return; }
184                pos=_root.yahoo.myMap.getCenter();
185                if (pos) {
186                        pos.lat=_root.ylat;
187                        pos.lon=_root.ylon;
188                        if (_root.lastyzoom!=_root.yzoom) {
189                                _root.yahoo.myMap.setCenterByLatLonAndZoom(pos,_root.yzoom,0);
190                        } else if (_root.lastylat!=_root.ylat || _root.lastylon!=_root.ylon || force) {
191                                _root.yahoo.myMap.setCenterByLatLon(pos,0);
192                        }
193                        clearInterval(_root.copyrightID);
194                        _root.copyrightID=setInterval(refreshYahooCopyright,1000);
195                        _root.lastyzoom=_root.yzoom;
196                        _root.lastylon =_root.ylon;
197                        _root.lastylat =_root.ylat;
198                }
199        }
200
201        function refreshYahooCopyright() {
202                clearInterval(_root.copyrightID);
203                _root.yahoo.myMap.map.updateCopyright();
204        };
205
206        function enableYahooZoom() {
207                b=_global.com.yahoo.maps.projections.Projection.prototype;
208                ASSetPropFlags(b,null,0,true);
209                b.MAXLEVEL=20;
210       
211                b=_global.com.yahoo.maps.projections.MercatorProjection.prototype;
212                ASSetPropFlags(b,null,0,true);
213       
214                b.ll_to_pxy = function (lat, lon) {
215                        var ys=18-_root.scale;
216                        var cp=1 << 26 - ys;
217                        this.level_=ys;
218                        this.ntiles_w_ = cp / this.tile_w_;
219                        this.ntiles_h_ = cp / this.tile_h_;
220                        this.meters_per_pixel_ = 111111*360 / cp;
221                        this.x_per_lon_ = cp / 360;
222                       
223                        alat = Math.abs(lat);
224                        alon = lon + 180;
225                        v_pxy = new this.PixelXY();
226                        if (alat >= 90 || alon > 360 || alon < 0) {
227                                return v_pxy;
228                        }
229                        alat *= this.RAD_PER_DEG;
230                        v_pxy.m_x = alon * this.x_per_lon_;
231                        ytemp = Math.log(Math.tan(alat) + 1 / Math.cos(alat)) / Math.PI;
232                        v_pxy.m_y = ytemp * this.pixel_height() / 2;
233                        if (lat < 0) {
234                                v_pxy.m_y = -v_pxy.m_y;
235                        }
236                        this.status_ = 1;
237                        return v_pxy;
238                };
239       
240                b=_global.com.yahoo.maps.flash.ExtensibleTileUrl.prototype;
241                ASSetPropFlags(b,null,0,true);
242       
243                b.makeUrl = function (row, col, mapViewType) {
244                  return this.satelliteUrl + '&x=' + col + '&y=' + row + '&z=' + String(19-this.zoom) + '&r=1&v=' + this.satelliteBatch + '&t=a';
245                };
246        }
Note: See TracBrowser for help on using the repository browser.