Пример #1
0
        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;
        }
Пример #2
0
        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;
        }
Пример #3
0
 private ITreeNode<OsmEntity>    BuildEntityTree(OsmEntity rootEntity)
 {
     return BuildEntityTree(entity,new Stack<OsmEntity>());
 }
Пример #4
0
 public OsmEntityContext(MongoDatabase database, OsmEntity entity)
 {
     this.database   = database;
     this.entity     = entity;
 }