var nodeTags:Object = p[3];
node = new Node(nodeID, nodeVersion, nodeTags, true, lat, lon);
} else if (!node.loaded) {
- node.update(nodeVersion, nodeTags, true, lat, lon);
+ node.update(nodeVersion, nodeTags, true, false, lat, lon);
}
setNode(node,true);
nodes.push(node);
if (way==null) {
way = new Way(id, version, tags, true, nodes);
} else {
- way.update(version, tags, true, nodes);
+ way.update(version, tags, true, true, nodes);
}
setWay(way,true);
gotRequest(id+"way");
if (relation==null) {
relation = new Relation(id, version, tags, true, members);
} else {
- relation.update(version,tags,true,members);
+ relation.update(version,tags,true,false,members);
}
setRelation(relation,true);
gotRequest(id+"rel");
protected function setOrUpdateNode(newNode:Node, queue:Boolean):void {
if (nodes[newNode.id]) {
var wasDeleted:Boolean=nodes[newNode.id].isDeleted();
- nodes[newNode.id].update(newNode.version, newNode.getTagsHash(), true, newNode.lat, newNode.lon, newNode.uid, newNode.timestamp);
+ nodes[newNode.id].update(newNode.version, newNode.getTagsHash(), true, newNode.parentsLoaded, newNode.lat, newNode.lon, newNode.uid, newNode.timestamp);
if (wasDeleted) sendEvent(new EntityEvent(NEW_NODE, nodes[newNode.id]), false);
} else {
setNode(newNode, queue);
private var parents:Dictionary = new Dictionary();
public var locked:Boolean = false; // lock against purging when off-screen
public var deleted:Boolean = false;
-// public var parentsLoaded:Boolean = true; // are all its parents in memory?
+ public var parentsLoaded:Boolean = true; // are all its parents in memory?
public function Entity(id:Number, version:uint, tags:Object, loaded:Boolean, uid:Number, timestamp:String) {
this._id = id;
return _timestamp;
}
- public function updateEntityProperties(version:uint, tags:Object, loaded:Boolean, uid:Number, timestamp:String):void {
- _version=version; this.tags=tags; _loaded=loaded; _uid = uid; _timestamp = timestamp;
+ public function updateEntityProperties(version:uint, tags:Object, loaded:Boolean, parentsLoaded:Boolean, uid:Number, timestamp:String):void {
+ _version=version; this.tags=tags; _loaded=loaded; this.parentsLoaded=parentsLoaded; _uid = uid; _timestamp = timestamp;
deleted=false;
}
this._lon = lon;
}
- public function update(version:uint, tags:Object, loaded:Boolean, lat:Number, lon:Number, uid:Number = NaN, timestamp:String = null):void {
- updateEntityProperties(version,tags,loaded,uid,timestamp); setLatLonImmediate(lat,lon);
+ public function update(version:uint, tags:Object, loaded:Boolean, parentsLoaded:Boolean, lat:Number, lon:Number, uid:Number = NaN, timestamp:String = null):void {
+ updateEntityProperties(version,tags,loaded,parentsLoaded,uid,timestamp); setLatLonImmediate(lat,lon);
}
public function get lat():Number {
member.entity.addParent(this);
}
- public function update(version:uint, tags:Object, loaded:Boolean, members:Array, uid:Number = NaN, timestamp:String = null):void {
+ public function update(version:uint, tags:Object, loaded:Boolean, parentsLoaded:Boolean, members:Array, uid:Number = NaN, timestamp:String = null):void {
var member:RelationMember;
for each (member in this.members)
member.entity.removeParent(this);
- updateEntityProperties(version,tags,loaded,uid,timestamp);
+ updateEntityProperties(version,tags,loaded,parentsLoaded,uid,timestamp);
this.members=members;
for each (member in members)
member.entity.addParent(this);
calculateBbox();
}
- public function update(version:uint, tags:Object, loaded:Boolean, nodes:Array, uid:Number = NaN, timestamp:String = null):void {
+ public function update(version:uint, tags:Object, loaded:Boolean, parentsLoaded:Boolean, nodes:Array, uid:Number = NaN, timestamp:String = null):void {
var node:Node;
for each (node in this.nodes) { node.removeParent(this); }
- updateEntityProperties(version,tags,loaded,uid,timestamp); this.nodes=nodes;
+ updateEntityProperties(version,tags,loaded,parentsLoaded,uid,timestamp); this.nodes=nodes;
for each (node in nodes) { node.addParent(this); }
calculateBbox();
}
if ( rel == null )
setRelation(new Relation(id, version, tags, true, members, uid, timestamp), false);
else {
- rel.update(version, tags, true, members, uid, timestamp);
+ rel.update(version, tags, true, false, members, uid, timestamp);
sendEvent(new EntityEvent(NEW_RELATION, rel), false);
}
}
nodeData.@timestamp);
if ( node == null || !node.loaded) {
-// newNode.parentsLoaded=newNode.within(minlon,maxlon,minlat,maxlat);
-// ** updateEntityProperties will need to do parentsLoaded as well
+ newNode.parentsLoaded=newNode.within(minlon,maxlon,minlat,maxlat);
setOrUpdateNode(newNode, true);
} else {
// the node's already in memory, but store it in case one of the new ways needs it
-// if (newNode.within(minlon,maxlon,minlat,maxlat)) newNode.parentsLoaded=true;
+ if (newNode.within(minlon,maxlon,minlat,maxlat)) newNode.parentsLoaded=true;
unusedNodes[id]=newNode;
}
}
setWay(new Way(id, version, tags, true, nodes, uid, timestamp),false);
} else {
waycount++;
- way.update(version, tags, true, nodes, uid, timestamp);
+ way.update(version, tags, true, true, nodes, uid, timestamp);
sendEvent(new EntityEvent(NEW_WAY, way), false);
}
}
continue;
var xml:XML = serialise(entity);
- // ** if parentsLoaded==false, do a soft delete only
+ if (!entity.parentsLoaded) xml.@silent = "true";
xml.@changeset = changeset.id;
del.appendChild(xml);
}