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

Last change on this file since 34888 was 19957, checked in by richard, 10 years ago

duplicate nodes stuff

File size: 10.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-_root.flashscale);
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                if (_root.panel.scale._visible) { setTypeText('',''); }
27        }
28
29        // lat/long <-> coord conversion
30
31        function lat2coord(a)   { return -(lat2y(a)-basey)*masterscale; }
32        function coord2lat(a)   { return y2lat(a/-masterscale+basey); }
33        function long2coord(a)  { return (a-baselong)*masterscale; }
34        function coord2long(a)  { return a/masterscale+baselong; }
35        function y2coord(a)             { return (a-basey)*-masterscale; }
36        function coord2y(a)             { return a/-masterscale+basey; }
37        function y2lat(a) { return 180/Math.PI * (2 * Math.atan(Math.exp(a*Math.PI/180)) - Math.PI/2); }
38        function lat2y(a) { return 180/Math.PI * Math.log(Math.tan(Math.PI/4+a*(Math.PI/180)/2)); }
39        function centrelat(o)  { return  coord2lat((yradius-_root.map._y-o)/Math.pow(2,_root.scale-_root.flashscale)); }
40        function centrelong(o) { return coord2long((xradius-_root.map._x-o)/Math.pow(2,_root.scale-_root.flashscale)); }
41
42
43        // resizeWindow - user has enlarged/shrunk window
44
45        function resizeWindow() {
46                setSizes();
47                updateCoords(_root.map._x,_root.map._y);
48                _root.lastresize=new Date();
49        }
50
51        function setSizes() {
52                // resize Yahoo
53                clearInterval(_root.yahooresizer);
54                if (_root.yahooinited) {
55                        setYahooSize();
56                        _root.ylat=centrelat(_root.bgyoffset);
57                        _root.ylon=centrelong(_root.bgxoffset);
58                        repositionYahoo(true);
59                }
60                // resize main mask and panel
61                _root.masksquare._height=
62                _root.panel._y=Stage.height-panelheight;
63                _root.masksquare._width=Stage.width;
64                // resize panel window
65                if (_root.panel.properties.proptype!='') {
66                        _root.panel.properties.init(_root.panel.properties.proptype,getPanelColumns(),4);
67                } else {
68                        drawIconPanel();
69                }
70                _root.panel.i_repeatattr._x=
71                _root.panel.i_newattr._x=
72                _root.panel.i_newrel._x=120+getPanelColumns()*190;
73                // resize other stuff
74                _root.waysloading._x=
75                _root.tooltip._x=Stage.width-220;
76                setStatusPosition();
77                for (var w in _root.windows) {
78                        if (typeof(_root.windows[w])=='movieclip') { _root.windows[w].drawAreas(); }
79                }
80        }
81
82        function setYahooSize() {
83                if (_root.yahoowidth!=Stage.width || _root.yahooheight!=Stage.height-panelheight) {
84                        _root.yahoowidth=Stage.width;
85                        _root.yahooheight=Stage.height-panelheight;
86                        _root.yahoo.myMap.setSize(yahoowidth,yahooheight);
87                }
88                _root.yahoorightsize=true;
89        }
90
91        // updateLinks - update view/edit tabs
92
93        function updateLinks() {
94                if (winie) {
95                        if (gpx) { flash.external.ExternalInterface.call("updatelinks",centrelong(0),centrelat(0),_root.scale,'',_root.edge_l,_root.edge_b,_root.edge_r,_root.edge_t,'gpx',gpx); }
96                                else { flash.external.ExternalInterface.call("updatelinks",centrelong(0),centrelat(0),_root.scale,'',_root.edge_l,_root.edge_b,_root.edge_r,_root.edge_t); }
97                } else {
98                        var url="javascript:updatelinks("+centrelong(0)+","+centrelat(0)+","+_root.scale+",'',"+_root.edge_l+","+_root.edge_b+","+_root.edge_r+","+_root.edge_t;
99                        if (gpx) { url+=",'gpx',"+gpx; }
100                        url=url+")"; getURL(url);
101                }
102        }
103       
104        // maximiseSWF - call JavaScript to maximise/minimise
105       
106        function maximiseSWF() {
107                if (_root.maximised) { getURL("javascript:minimiseMap()"); _root.panel.advanced.renameOption(6,iText("advanced_maximise")); }
108                                                else { getURL("javascript:maximiseMap()"); _root.panel.advanced.renameOption(6,iText("advanced_minimise")); }
109                _root.maximised=!_root.maximised;
110        }
111
112        // =====================================================================================
113        // Zoom
114
115        // zoomIn, zoomOut, changeScaleTo - change scale functions
116       
117        function zoomIn() {
118                if (_root.scale<_root.maxscale) {
119                        if (_root.waycount>500) { purgeWays(); }
120                        if (_root.poicount>500) { purgePOIs(); }
121                        zoomTo(_root.scale+1,_root.map._x*2-xradius,_root.map._y*2-yradius,false);
122                }
123        }
124       
125        function zoomOut() {
126                if (_root.scale>_root.minscale) {
127                        zoomTo(_root.scale-1,(_root.map._x+xradius)/2,(_root.map._y+yradius)/2,true);
128                }
129        }
130
131        function zoomTo(newscale,newx,newy,ww,wwforce) {
132                var oldwidth=linewidth;
133                blankTileQueue();
134                changeScaleTo(newscale);
135                updateCoords(newx,newy);
136                updateLinks();
137                redrawBackground();
138                resizePOIs();
139                if (ww) { whichWays(wwforce); }
140                else if (_root.waycount>500) { purgeWays(); }
141                redrawWays(oldwidth==linewidth);
142                redrawRelations();
143        }
144
145        function changeScaleTo(newscale) {
146                _root.map.tiles[_root.scale]._visible=false; _root.scale=newscale;
147                _root.map.tiles[_root.scale]._visible=true;
148                if (_root.scale==_root.minscale) { _root.i_zoomout._alpha=25;  }
149                                                                        else { _root.i_zoomout._alpha=100; }
150                if (_root.scale==_root.maxscale) { _root.i_zoomin._alpha =25;  }
151                                                                        else { _root.i_zoomin._alpha =100; }
152                _root.tolerance=4/Math.pow(2,_root.scale-_root.flashscale);
153                _root.poiscale=Math.max(100/Math.pow(2,_root.scale-_root.flashscale),3);
154                _root.iconscale=100/Math.pow(2,_root.scale-_root.flashscale);
155
156                _root.anchorsize=_root.iconscale*3;
157                if (_root.scale>=16 && _root.scale<=17) { _root.anchorsize *=0.8; }
158                if (                   _root.scale<=15) { _root.anchorsize *=0.6; }
159
160                if (preferences.data.thinlines) {
161                        _root.linewidth=3;
162                        _root.taggedscale=100/Math.pow(2,_root.scale-_root.flashscale); 
163                        if (_root.scale>=16) { _root.anchorsize*=0.8; }
164                } else {
165                        _root.linewidth=Math.min(10, 3+Math.pow(Math.max(0,_root.scale-15),2));
166                        _root.taggedscale=Math.max(100/Math.pow(2,_root.scale-_root.flashscale),5);
167                        if (_root.scale>=16) { _root.taggedscale*=1.3; }
168                        if (_root.scale>=17 && _root.scale<=18) { _root.poiscale   *=1.3; }
169                }
170                if (preferences.data.thinareas) { _root.areawidth=_root.linewidth/3; }
171                                                                   else { _root.areawidth=_root.linewidth; }
172        }
173
174        function redrawWays(skip) {
175                if (_root.wayselected) {
176                        _root.ws.redraw();
177                        _root.ws.highlight();
178                        _root.ws.highlightPoints(5000,"anchor");
179                }
180                restartElastic();
181                _root.redrawlist=new Array();
182                if (_root.redrawskip) { _root.redrawskip=skip; }
183                for (var qway in _root.map.ways) { _root.redrawlist.push(_root.map.ways[qway]); }
184        }
185
186        function redrawRelations() {
187                for (var qrel in _root.map.relations) { _root.redrawlist.push(_root.map.relations[qrel]); }
188        }
189
190        // =====================================================================================
191        // Backgrounds
192
193        function initBackground() {
194                preferences.flush();
195                setStatusPosition();
196                redrawBackground(); 
197        }
198       
199        function resetBackgroundOffset() {
200                _root.bgxoffset=0; _root.bgyoffset=0;
201        }
202
203        function redrawBackground() {
204                var alpha=100-50*preferences.data.dimbackground;
205                switch (preferences.data.bgtype) {
206                        case 4: // No background
207                                        _root.yahoo._visible=false;
208                                        _root.map.tiles._visible=false;
209                                        break;
210                                       
211                        case 2: // Yahoo
212                                        _root.yahoo._visible=true;
213                                        _root.yahoo._alpha=alpha;       
214                                        _root.yahoo._x=0; _root.yahoo._y=0;
215                                        _root.ylat=centrelat(_root.bgyoffset);
216                                        _root.ylon=centrelong(_root.bgxoffset);
217                                        _root.yzoom=18-_root.scale;
218                                        _root.map.tiles._visible=false;
219                                        if     (!_root.yahooloaded) { loadMovie(yahoourl,_root.yahoo);
220                                                                                                  _root.yahooloaded=true;
221                                                                                                  _root.yahoo.swapDepths(_root.masksquare); }
222                                        else if (_root.yahooinited) { repositionYahoo(true); }
223                                        break;
224
225                        default: // Tiles
226                                        if (_root.tilesetloaded!=preferences.data.tilecustom+'/'+preferences.data.bgtype+'/'+preferences.data.tileset) {
227                                                _root.tilesetloaded=preferences.data.tilecustom+'/'+preferences.data.bgtype+'/'+preferences.data.tileset;
228                                                initTiles();
229                                        }
230                                        _root.map.tiles._visible=true;
231                                        _root.map.tiles._alpha=alpha;
232                                        _root.yahoo._visible=false;
233                                        updateTiles();
234                                        break;
235                }
236        }
237
238        function repositionYahoo(force) {
239                clearInterval(_root.yahooresizer);
240                if (!_root.yahooinited) { return; }
241                var ppos=_root.yahoo.myMap.getCenter();
242                if (ppos) {
243                        ppos.lat=_root.ylat;
244                        ppos.lon=_root.ylon;
245                        if (_root.lastyzoom!=_root.yzoom) {
246                                _root.yahoo.myMap.setCenterByLatLonAndZoom(ppos,_root.yzoom,0);
247                        } else if (_root.lastylat!=_root.ylat || _root.lastylon!=_root.ylon || force) {
248                                _root.yahoo.myMap.setCenterByLatLon(ppos,0);
249                        }
250                        clearInterval(_root.copyrightID);
251                        _root.copyrightID=setInterval(refreshYahooCopyright,1000);
252                        _root.lastyzoom=_root.yzoom;
253                        _root.lastylon =_root.ylon;
254                        _root.lastylat =_root.ylat;
255                }
256        }
257
258        function refreshYahooCopyright() {
259                clearInterval(_root.copyrightID);
260                _root.yahoo.myMap.map.updateCopyright();
261        };
262
263        function enableYahooZoom() {
264                b=_global.com.yahoo.maps.projections.Projection.prototype;
265                ASSetPropFlags(b,null,0,true);
266                b.MAXLEVEL=20;
267       
268                b=_global.com.yahoo.maps.projections.MercatorProjection.prototype;
269                ASSetPropFlags(b,null,0,true);
270       
271                b.ll_to_pxy = function (lat, lon) {
272                        var ys=18-_root.scale;
273                        var cp=1 << 26 - ys;
274                        this.level_=ys;
275                        this.ntiles_w_ = cp / this.tile_w_;
276                        this.ntiles_h_ = cp / this.tile_h_;
277                        this.meters_per_pixel_ = 111111*360 / cp;
278                        this.x_per_lon_ = cp / 360;
279                       
280                        alat = Math.abs(lat);
281                        alon = lon + 180;
282                        v_pxy = new this.PixelXY();
283                        if (alat >= 90 || alon > 360 || alon < 0) {
284                                return v_pxy;
285                        }
286                        alat *= this.RAD_PER_DEG;
287                        v_pxy.m_x = alon * this.x_per_lon_;
288                        ytemp = Math.log(Math.tan(alat) + 1 / Math.cos(alat)) / Math.PI;
289                        v_pxy.m_y = ytemp * this.pixel_height() / 2;
290                        if (lat < 0) {
291                                v_pxy.m_y = -v_pxy.m_y;
292                        }
293                        this.status_ = 1;
294                        return v_pxy;
295                };
296       
297                b=_global.com.yahoo.maps.flash.ExtensibleTileUrl.prototype;
298                ASSetPropFlags(b,null,0,true);
299       
300                b.makeUrl = function (row, col, mapViewType) {
301                  return this.satelliteUrl + '&x=' + col + '&y=' + row + '&z=' + String(19-this.zoom) + '&r=1&v=' + this.satelliteBatch + '&t=a';
302                };
303        }
Note: See TracBrowser for help on using the repository browser.