private bool ReadEntity(XElement element, OsmEntity entity) { if (element.Attribute("id") != null) { entity.Id = GetLong(element, "id"); entity.UserName = GetString(element, "user"); entity.UserId = GetLong(element, "uid"); entity.Version = GetLong(element, "version"); entity.Changeset = GetLong(element, "changeset"); entity.Timestamp = GetDate(element, "timestamp"); entity.IsVisible = GetBool(element, "visible"); foreach (var kv in element.Elements("tag")) { var key = ((string) kv.Attribute("k")); var value = ((string) kv.Attribute("v")); if (string.IsNullOrWhiteSpace(key) || string.IsNullOrWhiteSpace(value)) { log.Warn("Entity {0} has invalid tag data {1} = {2}",entity.Id,key ?? "[null]",value ?? "[null]"); } else { entity.Tags[key] = value; } } return true; } return false; }
private ITreeNode<OsmEntity> BuildEntityTree(OsmEntity rootEntity,Stack<OsmEntity> stack) { if ( stack.Contains(rootEntity)) { return null; } stack.Push(rootEntity); using( new DisposableCallback(() => stack.Pop())) { var rootNode = rootEntity as OsmNode; if ( rootNode != null ) { return new TreeNode<OsmEntity>(rootEntity); } var rootWay = rootEntity as OsmWay; if ( rootWay != null ) { return new TreeNode<OsmEntity>(rootEntity,GetChildNodes(rootWay).Select(c => new TreeNode<OsmEntity>(c))); } var rootRelation = rootEntity as OsmRelation; if( rootRelation != null ) { var childTreeNodes = GetChildEntities(rootRelation) .Select(e => BuildEntityTree(e, stack)) .Where(e => e != null); return new TreeNode<OsmEntity>(rootEntity,childTreeNodes.ToArray()); } } return null; }
private ITreeNode<OsmEntity> BuildEntityTree(OsmEntity rootEntity) { return BuildEntityTree(entity,new Stack<OsmEntity>()); }
public OsmEntityContext(MongoDatabase database, OsmEntity entity) { this.database = database; this.entity = entity; }