source: subversion/applications/editors/potlatch/node.as @ 18704

Last change on this file since 18704 was 18647, checked in by richard, 10 years ago

show how many times a node is in a given way

  • Property svn:executable set to *
File size: 4.5 KB
Line 
1
2        // Originally 0=x, 1=y, 2=id, 4=tags;
3        // now .x, .y, .id, .attr
4
5        function Node(id,x,y,attr,version) {
6                this.id=id;
7                this.x=x;
8                this.y=y;
9                this.attr=attr;
10                this.tagged=hasTags(attr);
11                this.ways=new Object();
12                this.version=version;
13                this.clean=false;               // set to true if just loaded from server
14                this.uploading=false;
15        };
16
17        Node.prototype.markDirty=function() {
18                // doesn't really need to be a discrete function,
19                // but keeping it in for now
20                this.clean=false;
21        };
22
23        Node.prototype.removeFromAllWays=function() {
24                var qway,qs,x,y,attr;
25                var waylist=new Array(); var poslist=new Array();
26                var undopoint=false;
27                var z=this.ways; for (qway in z) {      // was in _root.map.ways
28                        for (qs=0; qs<_root.map.ways[qway].path.length; qs+=1) {
29                                if (_root.map.ways[qway].path[qs]==this) {
30                                        waylist.push(qway); poslist.push(qs);
31                                        _root.map.ways[qway].path.splice(qs,1);
32                                        if (this.id>0) { _root.map.ways[qway].deletednodes[this.id]=this.version; }
33                                        // needs to be in every way's .deletednodes - if it's just one, the API will refuse
34                                        // to delete it, because it's still in the other (not yet rewritten) way
35                                }
36                        }
37                        _root.map.ways[qway].clean=false;
38                        _root.map.ways[qway].removeDuplicates();
39                        if (_root.map.ways[qway].path.length<2) {
40                                _root.map.ways[qway].saveDeleteUndo(iText('deleting'));
41                                _root.map.ways[qway].remove();
42                        } else {
43                                _root.map.ways[qway].redraw();
44                                undopoint=true;
45                        }
46                }
47                if (_root.wayselected) { _root.ws.select(); }
48                if (undopoint) { _root.undo.append(UndoStack.prototype.undo_deletepoint,
49                                                                                   new Array(deepCopy(this),waylist,poslist),
50                                                                                   iText('action_deletepoint')); }
51        };
52
53        Node.prototype.moveTo=function(newx,newy,ignoreway,ignore_oneway) {
54                this.x=newx; this.y=newy; this.markDirty();
55                var qchanged;
56                var z=this.ways; for (var qway in z) {
57                        if (qway!=ignoreway) { _root.map.ways[qway].redraw(false,ignore_oneway); qchanged=qway; }
58                }
59                return qchanged;        // return ID of last changed way
60        };
61
62        Node.prototype.renumberTo=function(id) {
63                var old=this.id;
64                noderels[id]=noderels[old]; delete noderels[old];
65                nodes[id]=new Node(id,this.x,this.y,this.attr,this.version);
66                nodes[id].clean=this.clean;
67                var z=this.ways; for (var qway in z) {
68                        nodes[id].addWay(qway);
69                        for (var qs=0; qs<_root.map.ways[qway].path.length; qs+=1) {
70                                if (_root.map.ways[qway].path[qs].id==old) {
71                                        _root.map.ways[qway].path[qs]=nodes[id];
72                                }
73                        }
74                }
75                var z=_root.map.anchors; for (var a in z) {
76                        if (_root.map.anchors[a].node==old) { _root.map.anchors[a].node=id; }
77                }
78                var z=_root.map.anchorhints; for (var a in z) {
79                        if (_root.map.anchorhints[a].node==old) { _root.map.anchorhints[a].node=id; }
80                }
81        };
82
83        Node.prototype.inspect=function() {
84                var str = iText('inspector_latlon', Math.floor(coord2lat (this.y)*10000)/10000, Math.floor(coord2long(this.x)*10000)/10000);
85
86                // Status
87                if (!this.clean) { str+=iText('inspector_unsaved'); }
88                if (this.uploading) { str+=' ' + iText('inspector_uploading'); }
89                if (!this.clean) { str+="\n"; }
90
91                // Which ways is this in?
92                if (this.numberOfWays()==0) { 
93                        str+=iText('inspector_not_in_any_ways') + "\n";
94                } else {
95                        str+=iText('inspector_in_ways') + ' ';
96                        var w=this.ways; for (var i in w) {
97                                var n=getName(_root.map.ways[i].attr,waynames);
98                if (n) {
99                    str += iText('inspector_way_name', i, n);
100                } else {
101                    str += iText('inspector_way', i);
102                }
103                                var c=0;
104                                for (j=0; j<_root.map.ways[i].path.length; j++) {
105                                        if (_root.map.ways[i].path[j]==this) { c++; }
106                                }
107                                if (c>1) { str += ' <b>'+iText('inspector_node_count', c)+'</b>'; }
108                                str += ", ";
109                        }
110                        str=str.substr(0,str.length-2);
111                }
112
113                return "<p>"+str+"</p>";
114        };
115
116        // ------------------------------------------------------------------------
117        // Node->way mapping
118       
119        Node.prototype.addWay=function(id) { this.ways[id]=true; };
120        Node.prototype.removeWay=function(id) { delete this.ways[id]; };
121        Node.prototype.numberOfWays=function() { var z=this.ways; var c=0; for (var i in z) { c++; } return c; };
122        Node.prototype.redrawWays=function() { var z=this.ways; for (var i in z) { _root.map.ways[i].redraw(); } };
123
124        // ------------------------------------------------------------------------
125        // Support functions
126       
127        // hasTags - does a tag hash contain any significant tags?
128
129        function hasTags(a) {
130                var c=false;
131                for (var j in a) {
132                        if (a[j] != '' && j != 'attribution' && 
133                                j != 'created_by' && j!='source' &&     
134                                j.indexOf('tiger:')!=0) { c=true; }
135                }
136                return c;
137        }
Note: See TracBrowser for help on using the repository browser.