Example #1
0
        /// <summary>
        /// Returns the way for the given id.
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public override Way GetWay(long id)
        {
            string   wayKey   = PrimitiveExtensions.BuildWayRedisKey(id);
            RedisWay redisWay = _clientWay.GetValue(wayKey);
            Way      way      = null;

            if (redisWay != null)
            {
                way = PrimitiveExtensions.ConvertFrom(redisWay);
            }
            return(way);
        }
Example #2
0
        /// <summary>
        /// Returns the relation with the given id.
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public override Relation GetRelation(long id)
        {
            string        relationKey   = PrimitiveExtensions.BuildRelationRedisKey(id);
            RedisRelation redisRelation = _clientRelation.GetValue(relationKey);
            Relation      relation      = null;

            if (redisRelation != null)
            {
                relation = PrimitiveExtensions.ConvertFrom(redisRelation);
            }
            return(relation);
        }
Example #3
0
        /// <summary>
        /// Returns the node for the given id.
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public override Node GetNode(long id)
        {
            string    nodeKey   = PrimitiveExtensions.BuildNodeRedisKey(id);
            RedisNode redisNode = _clientNode.GetValue(nodeKey);
            Node      node      = null;

            if (redisNode != null)
            {
                node = PrimitiveExtensions.ConvertFrom(redisNode);
            }
            return(node);
        }
Example #4
0
        /// <summary>
        /// Converts the given relation to a redis relation.
        /// </summary>
        /// <param name="relation"></param>
        /// <returns></returns>
        public static RedisRelation ConvertTo(Relation relation)
        {
            RedisRelation redisWay = new RedisRelation();

            redisWay.Id          = relation.Id.Value;
            redisWay.ChangeSetId = relation.ChangeSetId;
            redisWay.TimeStamp   = relation.TimeStamp;
            redisWay.UserId      = relation.UserId;
            redisWay.UserName    = relation.UserName;
            redisWay.Version     = relation.Version;
            redisWay.Visible     = relation.Visible;
            redisWay.Tags        = PrimitiveExtensions.ConvertTo(relation.Tags);
            redisWay.Members     = PrimitiveExtensions.ConvertTo(relation.Members);

            return(redisWay);
        }
Example #5
0
        /// <summary>
        /// Converts the given node from a redis node.
        /// </summary>
        /// <param name="redisNode"></param>
        /// <returns></returns>
        public static Node ConvertFrom(RedisNode redisNode)
        {
            Node node = new Node();

            node.Id          = redisNode.Id.Value;
            node.Latitude    = redisNode.Latitude.Value;
            node.Longitude   = redisNode.Longitude.Value;
            node.ChangeSetId = redisNode.ChangeSetId;
            node.TimeStamp   = redisNode.TimeStamp;
            node.UserId      = redisNode.UserId;
            node.UserName    = redisNode.UserName;
            node.Version     = redisNode.Version;
            node.Visible     = redisNode.Visible;
            node.Tags        = PrimitiveExtensions.ConvertFrom(redisNode.Tags);

            return(node);
        }
Example #6
0
        /// <summary>
        /// Converts the given node to a redis node.
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        public static RedisNode ConvertTo(Node node)
        {
            RedisNode redisNode = new RedisNode();

            redisNode.Id          = node.Id.Value;
            redisNode.Latitude    = node.Latitude.Value;
            redisNode.Longitude   = node.Longitude.Value;
            redisNode.ChangeSetId = node.ChangeSetId;
            redisNode.TimeStamp   = node.TimeStamp;
            redisNode.UserId      = node.UserId;
            redisNode.UserName    = node.UserName;
            redisNode.Version     = node.Version;
            redisNode.Visible     = node.Visible;
            redisNode.Tags        = PrimitiveExtensions.ConvertTo(node.Tags);

            return(redisNode);
        }
Example #7
0
        /// <summary>
        /// Returns all ways containing the given node.
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public override IList <Way> GetWaysFor(long id)
        {
            string listKey = PrimitiveExtensions.BuildNodeWayListRedisKey(id);

            HashSet <string> wayIdStrings = _client.GetAllItemsFromSet(listKey);
            List <long>      wayIds       = new List <long>();

            if (wayIdStrings != null)
            {
                foreach (string wayIdString in wayIdStrings)
                {
                    wayIds.Add(long.Parse(wayIdString, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture));
                }
            }

            return(this.GetWays(wayIds));
        }
Example #8
0
        /// <summary>
        /// Returns all relations containing the given object.
        /// </summary>
        /// <param name="type"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public override IList <Relation> GetRelationsFor(OsmGeoType type, long id)
        {
            string listKey = PrimitiveExtensions.BuildMemberRelationListRedisKey(type, id);

            HashSet <string> relationIdStrings = _client.GetAllItemsFromSet(listKey);
            List <long>      relationIds       = new List <long>();

            if (relationIdStrings != null)
            {
                foreach (string relationIdString in relationIdStrings)
                {
                    relationIds.Add(long.Parse(relationIdString, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture));
                }
            }

            return(this.GetRelations(relationIds));
        }
Example #9
0
        /// <summary>
        /// Converts the given way to a redis way.
        /// </summary>
        /// <param name="way"></param>
        /// <returns></returns>
        public static RedisWay ConvertTo(Way way)
        {
            RedisWay redisWay = new RedisWay();

            redisWay.Id          = way.Id.Value;
            redisWay.ChangeSetId = way.ChangeSetId;
            redisWay.TimeStamp   = way.TimeStamp;
            redisWay.UserId      = way.UserId;
            redisWay.UserName    = way.UserName;
            redisWay.Version     = way.Version;
            redisWay.Visible     = way.Visible;
            redisWay.Tags        = PrimitiveExtensions.ConvertTo(way.Tags);
            if (way.Nodes != null)
            {
                redisWay.Nodes = new List <long>(way.Nodes);
            }

            return(redisWay);
        }
Example #10
0
        /// <summary>
        /// Converts the given way from a redis way.
        /// </summary>
        /// <param name="redisWay"></param>
        /// <returns></returns>
        public static Way ConvertFrom(RedisWay redisWay)
        {
            Way way = new Way();

            way.Id          = redisWay.Id.Value;
            way.ChangeSetId = redisWay.ChangeSetId;
            way.TimeStamp   = redisWay.TimeStamp;
            way.UserId      = redisWay.UserId;
            way.UserName    = redisWay.UserName;
            way.Version     = redisWay.Version;
            way.Visible     = redisWay.Visible;
            way.Tags        = PrimitiveExtensions.ConvertFrom(redisWay.Tags);
            if (redisWay.Nodes != null)
            {
                way.Nodes = new List <long>(redisWay.Nodes);
            }

            return(way);
        }
Example #11
0
        /// <summary>
        /// Returns all the nodes with the given ids.
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public override IList <Node> GetNodes(IList <long> ids)
        {
            List <string> keys = new List <string>();

            foreach (int id in ids)
            {
                string nodeKey = PrimitiveExtensions.BuildNodeRedisKey(id);
                keys.Add(nodeKey);
            }
            List <RedisNode> redisNodes = _clientNode.GetValues(keys);
            List <Node>      nodes      = new List <Node>();

            foreach (RedisNode redisNode in redisNodes)
            {
                Node node = PrimitiveExtensions.ConvertFrom(redisNode);
                nodes.Add(node);
            }
            return(nodes);
        }
Example #12
0
        /// <summary>
        /// Returns all ways for the given ids.
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public override IList <Way> GetWays(IList <long> ids)
        {
            List <string> keys = new List <string>();

            foreach (int id in ids)
            {
                string wayKey = PrimitiveExtensions.BuildWayRedisKey(id);
                keys.Add(wayKey);
            }
            List <RedisWay> redisWays = _clientWay.GetValues(keys);
            List <Way>      ways      = new List <Way>();

            foreach (RedisWay redisWay in redisWays)
            {
                Way way = PrimitiveExtensions.ConvertFrom(redisWay);
                ways.Add(way);
            }
            return(ways);
        }
Example #13
0
        /// <summary>
        /// Returns all relations for the given ids.
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public override IList <Relation> GetRelations(IList <long> ids)
        {
            List <string> keys = new List <string>();

            foreach (int id in ids)
            {
                string relationKey = PrimitiveExtensions.BuildRelationRedisKey(id);
                keys.Add(relationKey);
            }
            List <RedisRelation> redisRelations = _clientRelation.GetValues(keys);
            List <Relation>      relations      = new List <Relation>();

            foreach (RedisRelation redisRelation in redisRelations)
            {
                Relation relation = PrimitiveExtensions.ConvertFrom(redisRelation);
                relations.Add(relation);
            }
            return(relations);
        }
Example #14
0
 /// <summary>
 /// Builds a redis key for the relation members relation list.
 /// </summary>
 /// <param name="member"></param>
 /// <returns></returns>
 public static string BuildMemberRelationListRedisKey(RelationMember member)
 {
     return(PrimitiveExtensions.BuildMemberRelationListRedisKey(member.MemberType.Value, member.MemberId.Value));
 }
Example #15
0
 /// <summary>
 /// Builds a redis key for this given relation.
 /// </summary>
 /// <param name="relation"></param>
 /// <returns></returns>
 public static string GetRedisKey(this Relation relation)
 {
     return(PrimitiveExtensions.BuildRelationRedisKey(relation.Id.Value));
 }
Example #16
0
 /// <summary>
 /// Builds a redis key for this given way.
 /// </summary>
 /// <param name="way"></param>
 /// <returns></returns>
 public static string GetRedisKey(this Way way)
 {
     return(PrimitiveExtensions.BuildWayRedisKey(way.Id.Value));
 }
Example #17
0
 /// <summary>
 /// Builds a redis key for this given node.
 /// </summary>
 /// <param name="node"></param>
 /// <returns></returns>
 public static string GetRedisKey(this Node node)
 {
     return(PrimitiveExtensions.BuildNodeRedisKey(node.Id.Value));
 }
Example #18
0
        /// <summary>
        /// Returns all objects in the given bounding box and that pass the given filter.
        /// </summary>
        /// <param name="box"></param>
        /// <param name="filter"></param>
        /// <returns></returns>
        public override IList <OsmGeo> Get(GeoCoordinateBox box, OsmSharp.Osm.Filters.Filter filter)
        {
            List <OsmGeo> res = new List <OsmGeo>();

            // create a range or tiles around the given bounding box.
            TileRange range = TileRange.CreateAroundBoundingBox(box, 14);

            // build all redis keys for the given boxes.
            var hashKeys = new List <string>();

            foreach (Tile tile in range)
            {
                hashKeys.Add(tile.Id.ToString());
            }

            byte[][]         box_members = _client.SUnion(hashKeys.ToArray());
            HashSet <string> nodeKeys    = new HashSet <string>();

            foreach (byte[] box_member in box_members)
            {
                long   node_id  = BitConverter.ToInt64(box_member, 0);
                string node_key = PrimitiveExtensions.BuildNodeRedisKey(node_id);
                nodeKeys.Add(node_key);
            }

            List <RedisNode> redisNodes = _clientNode.GetValues(new List <string>(nodeKeys));
            var nodeIds = new List <long>();

            foreach (RedisNode redisNode in redisNodes)
            {
                // test if the node is in the given bb.
                GeoCoordinate coordinate = new GeoCoordinate(redisNode.Latitude.Value, redisNode.Longitude.Value);
                if (box.IsInside(coordinate))
                {
                    res.Add(PrimitiveExtensions.ConvertFrom(redisNode));
                    nodeIds.Add(redisNode.Id.Value);
                }
            }

            // load all ways that contain the nodes that have been found.
            res.AddRange(this.GetWaysFor(nodeIds));

            // get relations containing any of the nodes or ways in the current results-list.
            List <Relation> relations   = new List <Relation>();
            HashSet <long>  relationIds = new HashSet <long>();

            foreach (OsmGeo osmGeo in res)
            {
                IList <Relation> relationsFor = this.GetRelationsFor(osmGeo);
                foreach (Relation relation in relationsFor)
                {
                    if (!relationIds.Contains(relation.Id.Value))
                    {
                        relations.Add(relation);
                        relationIds.Add(relation.Id.Value);
                    }
                }
            }

            // recursively add all relations containing other relations as a member.
            do
            {
                res.AddRange(relations); // add previous relations-list.
                List <Relation> newRelations = new List <Relation>();
                foreach (OsmGeo osmGeo in relations)
                {
                    IList <Relation> relationsFor = this.GetRelationsFor(osmGeo);
                    foreach (Relation relation in relationsFor)
                    {
                        if (!relationIds.Contains(relation.Id.Value))
                        {
                            newRelations.Add(relation);
                            relationIds.Add(relation.Id.Value);
                        }
                    }
                }
                relations = newRelations;
            } while (relations.Count > 0);

            if (filter != null)
            {
                List <OsmGeo> filtered = new List <OsmGeo>();
                foreach (OsmGeo geo in res)
                {
                    if (filter.Evaluate(geo))
                    {
                        filtered.Add(geo);
                    }
                }
            }

            return(res);
        }