public function Elastic(map:Map, start:Point, end:Point) {
this.map = map;
editableLayer = map.editableLayer;
- \7f_start = start;
+ _start = start;
_end = end;
redraw();
}
* e.g. <code>layer.paint.updateEntityUIs(...);</code>
*/
public function createNode(tags:Object,lat:Number,lon:Number):Node {
- var node:Node = new Node(negativeID, 0, tags, true, lat, lon);
+ var node:Node = new Node(this, negativeID, 0, tags, true, lat, lon);
nodes[negativeID]=node; negativeID--;
return node;
}
* @param nodes An array of Node objects
*/
public function createWay(tags:Object,nodes:Array):Way {
- var way:Way = new Way(negativeID, 0, tags, true, nodes.concat());
+ var way:Way = new Way(this, negativeID, 0, tags, true, nodes.concat());
ways[negativeID]=way; negativeID--;
return way;
}
* @param members An array of RelationMember objects
*/
public function createRelation(tags:Object,members:Array):Relation {
- var relation:Relation = new Relation(negativeID, 0, tags, true, members.concat());
+ var relation:Relation = new Relation(this, negativeID, 0, tags, true, members.concat());
relations[negativeID]=relation; negativeID--;
return relation;
}
}
var marker:Marker = markers[id];
if (marker == null) {
- marker = new Marker(id, 0, tags, true, lat, lon);
+ marker = new Marker(this, id, 0, tags, true, lat, lon);
markers[id]=marker;
}
return marker;
var lat:Number = Number(p[2]);
var lon:Number = Number(p[1]);
var tags:Object = p[3];
- node = new Node(id, version, tags, true, lat, lon);
+ node = new Node(this, id, version, tags, true, lat, lon);
setNode(node,true);
}
registerPOI(node);
var node:Node = getNode(nodeID);
if ( node == null ) {
var nodeTags:Object = p[3];
- node = new Node(nodeID, nodeVersion, nodeTags, true, lat, lon);
+ node = new Node(this, nodeID, nodeVersion, nodeTags, true, lat, lon);
} else if (!node.loaded) {
node.update(nodeVersion, nodeTags, true, false, lat, lon);
}
}
if (way==null) {
- way = new Way(id, version, tags, true, nodes);
+ way = new Way(this, id, version, tags, true, nodes);
} else {
way.update(version, tags, true, true, nodes);
}
switch (type) {
case 'Node':
e=getNode(memid);
- if (e==null) { e=new Node(memid,0,{},false,0,0); setNode(Node(e),true); }
+ if (e==null) { e=new Node(this, memid,0,{},false,0,0); setNode(Node(e),true); }
break;
case 'Way':
e=getWay(memid);
- if (e==null) { e=new Way(memid,0,{},false,[]); setWay(Way(e),true); }
+ if (e==null) { e=new Way(this, memid,0,{},false,[]); setWay(Way(e),true); }
break;
case 'Relation':
e=getRelation(memid);
- if (e==null) { e=new Relation(memid,0,{},false,[]); setRelation(Relation(e),true); }
+ if (e==null) { e=new Relation(this, memid,0,{},false,[]); setRelation(Relation(e),true); }
break;
}
members.push(new RelationMember(e,role));
}
if (relation==null) {
- relation = new Relation(id, version, tags, true, members);
+ relation = new Relation(this, id, version, tags, true, members);
} else {
relation.update(version,tags,true,false,members);
}
public class Changeset extends Entity {
public static var entity_type:String = 'changeset';
- public function Changeset(id:Number, tags:Object) {
- super(id, 0, tags, true, NaN, '');
+ public function Changeset(connection:Connection, id:Number, tags:Object) {
+ super(connection, id, 0, tags, true, NaN, '');
}
public override function toString():String {
protected var policyURL:String;
protected var params:Object;
- public function Connection(cname:String,api:String,policy:String,initparams:Object={}) {
+ public function Connection(cname:String,api:String,policy:String,initparams:Object=null) {
+ initparams = (initparams!=null ? initparams:{});
name=cname;
apiBaseURL=api;
policyURL=policy;
}
public function createNode(tags:Object, lat:Number, lon:Number, performCreate:Function):Node {
- var node:Node = new Node(nextNegative, 0, tags, true, lat, lon);
+ var node:Node = new Node(this, nextNegative, 0, tags, true, lat, lon);
performCreate(new CreateEntityAction(node, setNode));
return node;
}
public function createWay(tags:Object, nodes:Array, performCreate:Function):Way {
- var way:Way = new Way(nextNegative, 0, tags, true, nodes.concat());
+ var way:Way = new Way(this, nextNegative, 0, tags, true, nodes.concat());
performCreate(new CreateEntityAction(way, setWay));
return way;
}
public function createRelation(tags:Object, members:Array, performCreate:Function):Relation {
- var relation:Relation = new Relation(nextNegative, 0, tags, true, members.concat());
+ var relation:Relation = new Relation(this, nextNegative, 0, tags, true, members.concat());
performCreate(new CreateEntityAction(relation, setRelation));
return relation;
}
/** An Entity is an object stored in the map database, and therefore uploaded and downloaded. This includes Nodes, Ways,
* Relations but also Changesets etc. */
public class Entity extends EventDispatcher {
+ private var _connection:Connection;
private var _id:Number;
private var _version:uint;
private var _uid:Number;
/** Have all its parents (ie, relations that contain this object as a member, ways that contain this node) been loaded into memory */
public var parentsLoaded:Boolean = true;
- public function Entity(id:Number, version:uint, tags:Object, loaded:Boolean, uid:Number, timestamp:String) {
+ public function Entity(connection:Connection, id:Number, version:uint, tags:Object, loaded:Boolean, uid:Number, timestamp:String) {
+ this._connection = connection;
this._id = id;
this._version = version;
this._uid = uid;
return _timestamp;
}
+ /** Connection to which this entity belongs. */
+ public function get connection():Connection {
+ return _connection;
+ }
+
/** Set a bunch of properties in one hit. Implicitly makes entity not deleted. */
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;
private var delayedEvents:Array = [];
public function EntityCollection(entities:Array) {
- super(-1, 0, {}, true, -1, "");
+ var conn:Connection=entities[0].connection;
+ // ** FIXME: this really is a very nasty way of finding the connection
+
+ super(conn, -1, 0, {}, true, -1, "");
_entities = entities;
//To avoid firing on every contained entity, we wait some short time before firing the events
private var _latproj:Number;
private var _lon:Number;
- public function Marker(id:Number, version:uint, tags:Object, loaded:Boolean, lat:Number, lon:Number) {
- super(id, version, tags, loaded, 0, null);
+ public function Marker(connection:Connection, id:Number, version:uint, tags:Object, loaded:Boolean, lat:Number, lon:Number) {
+ super(connection, id, version, tags, loaded, 0, null);
this._lat = lat;
this._latproj = lat2latp(lat);
this._lon = lon;
private var _latproj:Number;
private var _lon:Number;
- public function Node(id:Number, version:uint, tags:Object, loaded:Boolean, lat:Number, lon:Number, uid:Number = NaN, timestamp:String = null) {
- super(id, version, tags, loaded, uid, timestamp);
+ public function Node(connection:Connection, id:Number, version:uint, tags:Object, loaded:Boolean, lat:Number, lon:Number, uid:Number = NaN, timestamp:String = null) {
+ super(connection, id, version, tags, loaded, uid, timestamp);
this._lat = lat;
this._latproj = lat2latp(lat);
this._lon = lon;
private var members:Array;
public static var entity_type:String = 'relation';
- public function Relation(id:Number, version:uint, tags:Object, loaded:Boolean, members:Array, uid:Number = NaN, timestamp:String = null) {
- super(id, version, tags, loaded, uid, timestamp);
+ public function Relation(connection:Connection, id:Number, version:uint, tags:Object, loaded:Boolean, members:Array, uid:Number = NaN, timestamp:String = null) {
+ super(connection, id, version, tags, loaded, uid, timestamp);
this.members = members;
for each (var member:RelationMember in members)
member.entity.addParent(this);
private var edge_b:Number;
public static var entity_type:String = 'way';
- public function Way(id:Number, version:uint, tags:Object, loaded:Boolean, nodes:Array, uid:Number = NaN, timestamp:String = null) {
- super(id, version, tags, loaded, uid, timestamp);
+ public function Way(connection:Connection, id:Number, version:uint, tags:Object, loaded:Boolean, nodes:Array, uid:Number = NaN, timestamp:String = null) {
+ super(connection, id, version, tags, loaded, uid, timestamp);
this.nodes = nodes;
for each (var node:Node in nodes) { node.addParent(this); }
calculateBbox();
if ( type == "node" ) {
member = getNode(memberID);
if ( member == null ) {
- member = new Node(memberID,0,{},false,0,0);
+ member = new Node(this,memberID,0,{},false,0,0);
setNode(Node(member),true);
} else if (member.isDeleted()) {
member.setDeletedState(false);
} else if ( type == "way" ) {
member = getWay(memberID);
if (member == null) {
- member = new Way(memberID,0,{},false,[]);
+ member = new Way(this,memberID,0,{},false,[]);
setWay(Way(member),true);
}
} else if ( type == "relation" ) {
member = getRelation(memberID);
if (member == null) {
- member = new Relation(memberID,0,{},false,[]);
+ member = new Relation(this,memberID,0,{},false,[]);
setRelation(Relation(member),true);
}
}
}
if ( rel == null )
- setRelation(new Relation(id, version, tags, true, members, uid, timestamp), false);
+ setRelation(new Relation(this, id, version, tags, true, members, uid, timestamp), false);
else {
rel.update(version, tags, true, false, members, uid, timestamp);
sendEvent(new EntityEvent(NEW_RELATION, rel), false);
for each(var nodeData:XML in map.node) {
id = Number(nodeData.@id);
node = getNode(id);
- newNode = new Node(id,
+ newNode = new Node(this,
+ id,
uint(nodeData.@version),
parseTags(nodeData.tag),
true,
}
tags = parseTags(data.tag);
if ( way == null ) {
- setWay(new Way(id, version, tags, true, nodes, uid, timestamp),false);
+ setWay(new Way(this, id, version, tags, true, nodes, uid, timestamp),false);
} else {
waycount++;
way.update(version, tags, true, true, nodes, uid, timestamp);
var id:Number = Number(URLLoader(event.target).data);
// which means we now have a new changeset!
- setActiveChangeset(new Changeset(id, lastUploadedChangesetTags));
+ setActiveChangeset(new Changeset(this, id, lastUploadedChangesetTags));
}
private function changesetCreateError(event:IOErrorEvent):void {