Ejemplo n.º 1
0
 /// <summary>
 /// Creates a new relation member.
 /// </summary>
 /// <param name="memberId"></param>
 /// <param name="memberRole"></param>
 /// <param name="memberType"></param>
 /// <returns></returns>
 public static RelationMember Create(int memberId, string memberRole, OsmGeoType memberType)
 {
     RelationMember member = new RelationMember();
     member.MemberId = memberId;
     member.MemberRole = memberRole;
     member.MemberType = memberType;
     return member;
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Convests the polygon to osm objects.
        /// </summary>
        /// <param name="polygon"></param>
        /// <returns></returns>
        private OsmGeo ConvertPolygon(OsmSharp.Tools.Xml.Kml.v2_1.PolygonType polygon)
        {
            Relation relation = OsmBaseFactory.CreateRelation(KeyGenerator.GenerateNew());

            relation.Visible = true;
            relation.Tags.Add("kml_type", "PolygonType");

            OsmGeo inner = this.ConvertBoundary(polygon.innerBoundaryIs);
            if (inner != null)
            {
                RelationMember member = new RelationMember();
                member.Member = inner;
                member.Role = "inner";
                relation.Members.Add(member);
            }
            OsmGeo outer = this.ConvertLinearRing(polygon.outerBoundaryIs.LinearRing);
            if (outer != null)
            {
                RelationMember member = new RelationMember();
                member.Member = outer;
                member.Role = "outer";
                relation.Members.Add(member);
            }

            return relation;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Converts a polygon.
        /// </summary>
        /// <param name="polygon"></param>
        /// <returns></returns>
        private OsmGeo ConvertPolygon(OsmSharp.Tools.Xml.Kml.v2_0_response.Polygon polygon)
        {
            Relation relation = OsmBaseFactory.CreateRelation(KeyGenerator.GenerateNew());

            OsmGeo inner = this.ConvertLinearRing(polygon.innerBoundaryIs.LinearRing);
            if (inner != null)
            {
                RelationMember member = new RelationMember();
                member.Member = inner;
                member.Role = "inner";
                relation.Members.Add(member);
            }

            OsmGeo outer = this.ConvertLinearRing(polygon.outerBoundaryIs.LinearRing);
            if (outer != null)
            {
                RelationMember member = new RelationMember();
                member.Member = outer;
                member.Role = "outer";
                relation.Members.Add(member);
            }

            return relation;
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Converts a placemark into an osm object.
        /// </summary>
        /// <param name="placemark"></param>
        /// <returns></returns>
        private OsmGeo ConvertPlacemark(OsmSharp.Tools.Xml.Kml.v2_0_response.Placemark placemark)
        {
            Relation relation = OsmBaseFactory.CreateRelation(KeyGenerator.GenerateNew());

            relation.Tags.Add("kml_type", "Response");

            for(int idx = 0;idx < placemark.Items.Length;idx++)
            {
                RelationMember member;
                switch (placemark.ItemsElementName[idx])
                {
                    case OsmSharp.Tools.Xml.Kml.v2_0_response.ItemsChoiceType1.LineString:
                        member = new RelationMember();
                        member.Member = this.ConvertLineString(placemark.Items[idx] as OsmSharp.Tools.Xml.Kml.v2_0_response.LineString);
                        member.Role = "";
                        relation.Members.Add(member);
                        break;
                    case OsmSharp.Tools.Xml.Kml.v2_0_response.ItemsChoiceType1.MultiGeometry:
                        member = new RelationMember();
                        member.Member = this.ConvertMultiGeometry(placemark.Items[idx] as OsmSharp.Tools.Xml.Kml.v2_0_response.MultiGeometry);
                        member.Role = "";
                        relation.Members.Add(member);
                        break;
                    case OsmSharp.Tools.Xml.Kml.v2_0_response.ItemsChoiceType1.MultiLineString:
                        member = new RelationMember();
                        member.Member = this.ConvertMultiLineString(placemark.Items[idx] as OsmSharp.Tools.Xml.Kml.v2_0_response.MultiLineString);
                        member.Role = "";
                        relation.Members.Add(member);
                        break;
                    case OsmSharp.Tools.Xml.Kml.v2_0_response.ItemsChoiceType1.MultiPoint:
                        member = new RelationMember();
                        member.Member = this.ConvertMultiPoint(placemark.Items[idx] as OsmSharp.Tools.Xml.Kml.v2_0_response.MultiPoint);
                        member.Role = "";
                        relation.Members.Add(member);
                        break;
                    case OsmSharp.Tools.Xml.Kml.v2_0_response.ItemsChoiceType1.MultiPolygon:
                        member = new RelationMember();
                        member.Member = this.ConvertMultiPolygon(placemark.Items[idx] as OsmSharp.Tools.Xml.Kml.v2_0_response.MultiPolygon);
                        member.Role = "";
                        relation.Members.Add(member);
                        break;
                    case OsmSharp.Tools.Xml.Kml.v2_0_response.ItemsChoiceType1.Point:
                        member = new RelationMember();
                        member.Member = this.ConvertPoint(placemark.Items[idx] as OsmSharp.Tools.Xml.Kml.v2_0_response.Point);
                        member.Role = "";
                        relation.Members.Add(member);
                        break;
                    case OsmSharp.Tools.Xml.Kml.v2_0_response.ItemsChoiceType1.Polygon:
                        member = new RelationMember();
                        member.Member = this.ConvertPolygon(placemark.Items[idx] as OsmSharp.Tools.Xml.Kml.v2_0_response.Polygon);
                        member.Role = "";
                        relation.Members.Add(member);
                        break;
                }
            }

            return relation;
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Converts the multi geometry to multi osm objects.
        /// </summary>
        /// <param name="multiGeometry"></param>
        /// <returns></returns>
        private OsmGeo ConvertMultiGeometry(OsmSharp.Tools.Xml.Kml.v2_1.MultiGeometryType multiGeometry)
        {
            Relation relation = OsmBaseFactory.CreateRelation(KeyGenerator.GenerateNew());

            relation.Visible = true;
            relation.Tags.Add("kml_type", "MultiGeometryType");

            foreach (OsmSharp.Tools.Xml.Kml.v2_1.GeometryType geo in multiGeometry.Items)
            {
                OsmGeo geo_osm = this.ConvertGeometry(geo);
                if (geo_osm != null)
                {
                    RelationMember member = new RelationMember();
                    member.Member = geo_osm;
                    relation.Members.Add(member);
                }
            }

            return relation;
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Converts a gpx track into osm objects.
        /// </summary>
        /// <param name="trk"></param>
        /// <returns></returns>
        private OsmGeo ConvertGpxTrk(OsmSharp.Tools.Xml.Gpx.v1_1.trkType trk)
        {
            Relation relation = OsmBaseFactory.CreateRelation(KeyGenerator.GenerateNew());

            relation.Tags.Add("name", trk.name);
            relation.Tags.Add("number", trk.number);
            relation.Tags.Add("description", trk.desc);
            relation.Tags.Add("type", trk.type);

            foreach (OsmSharp.Tools.Xml.Gpx.v1_1.trksegType seg in trk.trkseg)
            {
                OsmGeo seg_geo = this.ConvertTrkSegType(seg);
                if (seg_geo != null)
                {
                    RelationMember member = new RelationMember();
                    member.Member = seg_geo;
                    member.Role = "";
                    relation.Members.Add(member);
                }
            }

            return relation;
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Returns the relations for the given ids.
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public override IList<Relation> GetRelations(IList<long> ids)
        {
            if (ids.Count > 0)
            {
                SQLiteConnection con = this.CreateConnection();

                // STEP2: Load ways.
                Dictionary<long, Relation> relations = new Dictionary<long, Relation>();
                string sql;
                SQLiteCommand com;
                SQLiteDataReader reader;
                for (int idx_1000 = 0; idx_1000 <= ids.Count / 1000; idx_1000++)
                {
                    int start_idx = idx_1000 * 1000;
                    int stop_idx = System.Math.Min((idx_1000 + 1) * 1000, ids.Count);

                    sql = "SELECT id, changeset_id, visible, timestamp, version, usr, usr_id FROM relation WHERE (id IN ({0})) ";
                    string ids_string = this.ConstructIdList(ids, start_idx, stop_idx);
                    if (ids_string.Length > 0)
                    {
                        sql = string.Format(sql, ids_string);
                        com = new SQLiteCommand(sql);
                        com.Connection = con;
                        reader = ExecuteReader(com);
                        Relation relation;
                        while (reader.Read())
                        {
                            long id = reader.GetInt64(0);
                            long? changeset_id = reader.IsDBNull(1) ? null : (long?)reader.GetInt64(1);
                            bool? visible = reader.IsDBNull(2) ? null : (bool?)reader.GetBoolean(2);
                            DateTime? timestamp = reader.IsDBNull(3) ? null : (DateTime?)this.ConvertDateTime(reader.GetInt64(3));
                            ulong? version = reader.IsDBNull(4) ? null : (ulong?)reader.GetInt64(4);
                            string user = reader.IsDBNull(5) ? null : reader.GetString(5);
                            long? user_id = reader.IsDBNull(6) ? null : (long?)reader.GetInt64(6);

                            // create way.
                            relation = new Relation();
                            relation.Id = id;
                            relation.Version = version;
                            relation.UserName = user;
                            relation.UserId = user_id;
                            relation.Visible = visible;
                            relation.TimeStamp = timestamp;
                            relation.ChangeSetId = changeset_id;

                            relations.Add(relation.Id.Value, relation);
                        }
                        reader.Close();
                    }
                }

                //STEP3: Load all relation-member relations
                List<long> missing_node_ids = new List<long>();
                for (int idx_1000 = 0; idx_1000 <= ids.Count / 1000; idx_1000++)
                {
                    int start_idx = idx_1000 * 1000;
                    int stop_idx = System.Math.Min((idx_1000 + 1) * 1000, ids.Count);

                    sql = "SELECT relation_id, member_type, member_id, member_role, sequence_id FROM relation_members WHERE (relation_id IN ({0})) ORDER BY sequence_id";
                    string ids_string = this.ConstructIdList(ids, start_idx, stop_idx);
                    if (ids_string.Length > 0)
                    {
                        sql = string.Format(sql, ids_string);
                        com = new SQLiteCommand(sql);
                        com.Connection = con;
                        reader = ExecuteReader(com);
                        while (reader.Read())
                        {
                            long relation_id = reader.GetInt64(0);
                            long member_type = reader.GetInt64(1);
                            long? member_id = reader.IsDBNull(2) ? null : (long?)reader.GetInt64(2);
                            string member_role = reader.IsDBNull(3) ? null : reader.GetString(3);

                            Relation relation;
                            if (relations.TryGetValue(relation_id, out relation))
                            {
                                if (relation.Members == null)
                                {
                                    relation.Members = new List<RelationMember>();
                                }
                                RelationMember member = new RelationMember();
                                member.MemberId = member_id;
                                member.MemberRole = member_role;
                                member.MemberType = this.ConvertMemberType(member_type);

                                relation.Members.Add(member);
                            }
                        }
                        reader.Close();
                    }
                }

                //STEP4: Load all tags.
                for (int idx_1000 = 0; idx_1000 <= ids.Count / 1000; idx_1000++)
                {
                    int start_idx = idx_1000 * 1000;
                    int stop_idx = System.Math.Min((idx_1000 + 1) * 1000, ids.Count);

                    sql = "SELECT * FROM relation_tags WHERE (relation_id IN ({0})) ";
                    string ids_string = this.ConstructIdList(ids, start_idx, stop_idx);
                    if (ids_string.Length > 0)
                    {
                        sql = string.Format(sql, ids_string);
                        com = new SQLiteCommand(sql);
                        com.Connection = con;
                        reader = ExecuteReader(com);
                        while (reader.Read())
                        {
                            long id = reader.GetInt64(0);
                            string key = reader.GetString(1);
                            object value_object = reader[2];
                            string value = string.Empty;
                            if (value_object != null && value_object != DBNull.Value)
                            {
                                value = (string)value_object;
                            }

                            Relation relation;
                            if (relations.TryGetValue(id, out relation))
                            {
                                if (relation.Tags == null)
                                {
                                    relation.Tags = new TagsCollection();
                                }
                                relation.Tags.Add(key, value);
                            }
                        }
                        reader.Close();
                    }
                }

                return relations.Values.ToList<Relation>();
            }
            return new List<Relation>();
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Converts a container and it's contents to osm elements.
        /// </summary>
        /// <param name="container"></param>
        private Relation ConvertContainer(OsmSharp.Tools.Xml.Kml.v2_1.ContainerType container)
        {
            // get the features.
            if (container is OsmSharp.Tools.Xml.Kml.v2_1.FolderType)
            {
                OsmSharp.Tools.Xml.Kml.v2_1.FolderType folder = (container as OsmSharp.Tools.Xml.Kml.v2_1.FolderType);

                // items1 are the features.
                IList<OsmGeo> created_features = this.ConvertFeatures(folder.Items1);

                // create the relation for this folder.
                Relation relation = OsmBaseFactory.CreateRelation(KeyGenerator.GenerateNew());
                relation.Tags.Add("name", folder.name);
                relation.Visible = folder.visibility;
                relation.Tags.Add("description", folder.description);
                relation.Tags.Add("kml_folder", "yes");

                foreach (OsmGeo geo in created_features)
                {
                    RelationMember member = new RelationMember();
                    member.Member = geo;
                    member.Role = "";
                    relation.Members.Add(member);
                }

                return relation;
            }
            else if(container is OsmSharp.Tools.Xml.Kml.v2_1.DocumentType)
            {
                OsmSharp.Tools.Xml.Kml.v2_1.DocumentType document = (container as OsmSharp.Tools.Xml.Kml.v2_1.DocumentType);

                // items1 are the features.
                IList<OsmGeo> created_features = this.ConvertFeatures(document.Items1);

                // create the relation for this folder.
                Relation relation = OsmBaseFactory.CreateRelation(KeyGenerator.GenerateNew());
                relation.Tags.Add("name", document.name);
                relation.Visible = document.visibility;
                relation.Tags.Add("description", document.description);
                relation.Tags.Add("kml_folder", "yes");

                foreach (OsmGeo geo in created_features)
                {
                    RelationMember members = new RelationMember();
                    members.Member = geo;
                    members.Role = "";
                }

                return relation;
            }
            return null;
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Converts an Xml relation to an Osm domain model relation.
        /// </summary>
        /// <param name="xml_obj"></param>
        /// <returns></returns>
        public static Relation ConvertFrom(this relation xml_obj)
        {
            // create a new node and immidiately set the id.
            Relation new_obj = new Relation();
            new_obj.Id = xml_obj.id;

            // set the members
            new_obj.Members = new List<RelationMember>(xml_obj.member.Length);
            for (int idx = 0; idx < xml_obj.member.Length; idx++)
            {
                member member = xml_obj.member[idx];
                RelationMember simpleMember = new RelationMember();
                simpleMember.MemberId = member.@ref;
                simpleMember.MemberRole = member.role;
                if (member.refSpecified && member.typeSpecified)
                {
                    switch (member.type)
                    {
                        case memberType.node:
                            simpleMember.MemberType = OsmGeoType.Node;
                            break;
                        case memberType.relation:
                            simpleMember.MemberType = OsmGeoType.Relation;
                            break;
                        case memberType.way:
                            simpleMember.MemberType = OsmGeoType.Way;
                            break;
                    }
                }
                else
                { // way cannot be converted; member could not be created!
                    return null;
                }
                new_obj.Members.Add(simpleMember);
            }

            // set the tags.
            if (xml_obj.tag != null)
            {
                foreach (Osm.Xml.v0_6.tag tag in xml_obj.tag)
                {
                    new_obj.Tags.Add(tag.k, tag.v);
                }
            }

            // set the user info.
            if (xml_obj.uidSpecified)
            {
                new_obj.UserId = xml_obj.uid;
            }
            new_obj.UserName = xml_obj.user;

            // set the changeset info.
            if (xml_obj.changesetSpecified)
            {
                new_obj.ChangeSetId = xml_obj.changeset;
            }

            // set the timestamp flag.
            if (xml_obj.timestampSpecified)
            {
                new_obj.TimeStamp = xml_obj.timestamp;
            }

            // set the visible flag.
            new_obj.Visible = xml_obj.visible;
            return new_obj;
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Converts an Xml relation to an Osm domain model relation.
        /// </summary>
        /// <returns></returns>
        public static Relation ConvertFrom(this relation xmlRelation)
        {
            // create a new node and immidiately set the id.
            var relation = new Relation();
            relation.Id = xmlRelation.id;

            // set the members
            relation.Members = new List<RelationMember>(xmlRelation.member.Length);
            for (var i = 0; i < xmlRelation.member.Length; i++)
            {
                var xmlMember = xmlRelation.member[i];
                var member = new RelationMember();
                member.MemberId = xmlMember.@ref;
                member.MemberRole = xmlMember.role;
                if (xmlMember.refSpecified && xmlMember.typeSpecified)
                {
                    switch (xmlMember.type)
                    {
                        case memberType.node:
                            member.MemberType = OsmGeoType.Node;
                            break;
                        case memberType.relation:
                            member.MemberType = OsmGeoType.Relation;
                            break;
                        case memberType.way:
                            member.MemberType = OsmGeoType.Way;
                            break;
                    }
                }
                else
                { // way cannot be converted; member could not be created!
                    return null;
                }
                relation.Members.Add(member);
            }

            // set the tags.
            if (xmlRelation.tag != null)
            {
                foreach (var tag in xmlRelation.tag)
                {
                    relation.Tags.Add(tag.k, tag.v);
                }
            }

            // set the user info.
            if (xmlRelation.uidSpecified)
            {
                relation.UserId = xmlRelation.uid;
            }
            relation.UserName = xmlRelation.user;

            // set the changeset info.
            if (xmlRelation.changesetSpecified)
            {
                relation.ChangeSetId = xmlRelation.changeset;
            }

            // set the timestamp flag.
            if (xmlRelation.timestampSpecified)
            {
                relation.TimeStamp = xmlRelation.timestamp;
            }

            // set the visible flag.
            relation.Visible = xmlRelation.visible;
            return relation;
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Converts an Xml relation to an Osm domain model relation.
        /// </summary>
        /// <param name="xml_obj"></param>
        /// <param name="node_source"></param>
        /// <param name="way_source"></param>
        /// <param name="relation_source"></param>
        /// <returns></returns>
        public static Relation ConvertFrom(this relation xml_obj, INodeSource node_source, 
            IWaySource way_source, IRelationSource relation_source)
        {
            // create a new node and immidiately set the id.
            Relation new_obj = OsmBaseFactory.CreateRelation(xml_obj.id);

            // set the members
            for (int idx = 0; idx < xml_obj.member.Length; idx++)
            {
                member member = xml_obj.member[idx];
                if (member.refSpecified && member.typeSpecified)
                {
                    switch (member.type)
                    {
                        case memberType.node:
                            long node_id = member.@ref;
                            Node member_node = node_source.GetNode(node_id);
                            if (member_node != null)
                            {
                                RelationMember node_member = new RelationMember();
                                node_member.Member = member_node;
                                node_member.Role = member.role;
                                new_obj.Members.Add(node_member);
                            }
                            else
                            { // relation cannot be converted; node was not found!
                                return null;
                            }
                            break;
                        case memberType.relation:
                            long relation_id = member.@ref;
                            Relation member_relation = relation_source.GetRelation(relation_id);
                            if (member_relation != null)
                            {
                                RelationMember relation_member = new RelationMember();
                                relation_member.Member = member_relation;
                                relation_member.Role = member.role;
                                new_obj.Members.Add(relation_member);
                            }
                            else
                            { // relation cannot be converted; relation was not found!
                                return null;
                            }
                            break;
                        case memberType.way:
                            long way_id = member.@ref;
                            Way member_way = way_source.GetWay(way_id);
                            if (member_way != null)
                            {
                                RelationMember way_member = new RelationMember();
                                way_member.Member = member_way;
                                way_member.Role = member.role;
                                new_obj.Members.Add(way_member);
                            }
                            else
                            { // relation cannot be converted; way was not found!
                                return null;
                            }
                            break;
                    }
                }
                else
                { // way cannot be converted; member could not be created!
                    return null;
                }
            }

            // set the tags.
            if (xml_obj.tag != null)
            {
                foreach (Osm.Xml.v0_6.tag tag in xml_obj.tag)
                {
                    new_obj.Tags.Add(tag.k, tag.v);
                }
            }

            // set the user info.
            if (xml_obj.uidSpecified)
            {
                new_obj.UserId = xml_obj.uid;
            }
            new_obj.User = xml_obj.user;

            // set the changeset info.
            if (xml_obj.changesetSpecified)
            {
                new_obj.ChangeSetId = xml_obj.changeset;
            }

            // set the timestamp flag.
            if (xml_obj.timestampSpecified)
            {
                new_obj.TimeStamp = xml_obj.timestamp;
            }

            // set the visible flag.
            new_obj.Visible = xml_obj.visible;
            return new_obj;
        }
Ejemplo n.º 12
0
        private RelationMember ReadRelationMember(SQLiteDataReader reader)
        {
            var relation_member = new RelationMember();

            relation_member.MemberType = SchemaTools.ConvertMemberType(reader.GetInt16(0));
            relation_member.MemberId = reader.GetInt64(1);
            relation_member.MemberRole = reader.GetString(2);

            return relation_member;
        }
Ejemplo n.º 13
0
        private Tuple<long, RelationMember> ReadRelationIdAndMember(SQLiteDataReader reader)
        {
            var relation_member = new RelationMember();

            relation_member.MemberType = SchemaTools.ConvertMemberType(reader.GetInt16(1));
            relation_member.MemberId = reader.GetInt64(2);
            relation_member.MemberRole = reader.GetString(3);

            return new Tuple<long, RelationMember>(reader.GetInt64(0), relation_member);
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Reads all the data from the osm document if needed.
        /// </summary>
        private void ReadFromDocument()
        {
            if (!_read)
            {
                _read = true;

                if (_document.Gpx == null)
                { // no data.
                    return;
                }

                switch (_document.Version)
                {
                    case GpxVersion.Gpxv1_0:
                        OsmSharp.Tools.Xml.Gpx.v1_0.gpx gpx_v1_0 = _document.Gpx as OsmSharp.Tools.Xml.Gpx.v1_0.gpx;

                        Relation relation_v1_0 = OsmBaseFactory.CreateRelation(KeyGenerator.GenerateNew());

                        relation_v1_0.Tags.Add("name", gpx_v1_0.name);
                        relation_v1_0.Tags.Add("description", gpx_v1_0.desc);
                        relation_v1_0.Tags.Add("gpx_type", "gpx");

                        foreach (OsmSharp.Tools.Xml.Gpx.v1_0.gpxTrk trk in gpx_v1_0.trk)
                        {
                            OsmGeo trk_osm = this.ConvertGpxTrk(trk);
                            if (trk_osm != null)
                            {
                                RelationMember member = new RelationMember();
                                member.Member = trk_osm;
                                member.Role = "";
                                relation_v1_0.Members.Add(member);
                            }
                        }

                        this.AddRelation(relation_v1_0);
                        break;
                    case GpxVersion.Gpxv1_1:
                        OsmSharp.Tools.Xml.Gpx.v1_1.gpxType gpx_v1_1 = _document.Gpx as OsmSharp.Tools.Xml.Gpx.v1_1.gpxType;

                        if (gpx_v1_1.metadata != null
                            && !string.IsNullOrEmpty(gpx_v1_1.metadata.name))
                        {
                            source_name = gpx_v1_1.metadata.name;
                        }

                        Relation relation_v1_1 = OsmBaseFactory.CreateRelation(KeyGenerator.GenerateNew());

                        //relation_v1_1.Tags.Add("name", _document.Name);
                        relation_v1_1.Tags.Add("description", "v1.1");
                        relation_v1_1.Tags.Add("gpx_type", "gpxType");

                        foreach (OsmSharp.Tools.Xml.Gpx.v1_1.trkType trk in gpx_v1_1.trk)
                        {
                            OsmGeo trk_osm = this.ConvertGpxTrk(trk);
                            if (trk_osm != null)
                            {
                                RelationMember member = new RelationMember();
                                member.Member = trk_osm;
                                member.Role = "";
                                relation_v1_1.Members.Add(member);
                            }
                        }

                        foreach (OsmSharp.Tools.Xml.Gpx.v1_1.wptType wpt in gpx_v1_1.wpt)
                        {
                            Node n = this.ConvertWptType(wpt);

                            n.Tags.Add("type", "wpt");

                            this.AddNode(n);
                        }

                        this.AddRelation(relation_v1_1);
                        break;
                }
            }
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Converts a response into an osm object.
        /// </summary>
        /// <param name="response"></param>
        /// <returns></returns>
        private OsmGeo ConvertResponse(OsmSharp.Tools.Xml.Kml.v2_0_response.Response response)
        {
            Relation relation = OsmBaseFactory.CreateRelation(KeyGenerator.GenerateNew());

            relation.Tags.Add("kml_type", "Response");

            foreach (object item in response.Items)
            {
                if (item is OsmSharp.Tools.Xml.Kml.v2_0_response.Document)
                {
                    OsmGeo osm_geo = this.ConvertDocument(item as OsmSharp.Tools.Xml.Kml.v2_0_response.Document);

                    RelationMember member = new RelationMember();
                    member.Member = osm_geo;
                    member.Role = "";
                    relation.Members.Add(member);
                }
                else if (item is OsmSharp.Tools.Xml.Kml.v2_0_response.Folder)
                {
                    OsmGeo osm_geo = this.ConvertFolder(item as OsmSharp.Tools.Xml.Kml.v2_0_response.Folder);

                    RelationMember member = new RelationMember();
                    member.Member = osm_geo;
                    member.Role = "";
                    relation.Members.Add(member);

                }
                else if (item is OsmSharp.Tools.Xml.Kml.v2_0_response.Placemark)
                {
                    OsmGeo osm_geo = this.ConvertPlacemark(item as OsmSharp.Tools.Xml.Kml.v2_0_response.Placemark);

                    RelationMember member = new RelationMember();
                    member.Member = osm_geo;
                    member.Role = "";
                    relation.Members.Add(member);

                }
                else if (item is OsmSharp.Tools.Xml.Kml.v2_0_response.Response)
                {
                    OsmGeo osm_geo = this.ConvertResponse(item as OsmSharp.Tools.Xml.Kml.v2_0_response.Response);

                    RelationMember member = new RelationMember();
                    member.Member = osm_geo;
                    member.Role = "";
                    relation.Members.Add(member);
                }
            }

            return relation;
        }
Ejemplo n.º 16
0
 /// <summary>
 /// Converts this relation into it's simple counterpart.
 /// </summary>
 /// <returns></returns>
 public override OsmGeo ToSimple()
 {
     var relation = new Relation();
     relation.Id = this.Id;
     relation.ChangeSetId = this.ChangeSetId;
     relation.Tags = this.Tags;
     relation.TimeStamp = this.TimeStamp;
     relation.UserId = this.UserId;
     relation.UserName = this.User;
     relation.Version = (ulong?)this.Version;
     relation.Visible = this.Visible;
     relation.Members = new List<RelationMember>();
     foreach (var member in this.Members)
     {
         var simpleMember = new RelationMember();
         simpleMember.MemberId = member.Member.Id;
         simpleMember.MemberRole = member.Role;
         switch (member.Member.Type)
         {
             case CompleteOsmType.Node:
                 simpleMember.MemberType = OsmGeoType.Node;
                 break;
             case CompleteOsmType.Relation:
                 simpleMember.MemberType = OsmGeoType.Relation;
                 break;
             case CompleteOsmType.Way:
                 simpleMember.MemberType = OsmGeoType.Way;
                 break;
         }
         relation.Members.Add(simpleMember);
     }
     return relation;
 }
Ejemplo n.º 17
0
        /// <summary>
        /// Converts boundary type into an osm object.
        /// </summary>
        /// <param name="boundary"></param>
        /// <returns></returns>
        private OsmGeo ConvertBoundary(OsmSharp.Tools.Xml.Kml.v2_1.boundaryType[] boundary)
        {
            Relation relation = OsmBaseFactory.CreateRelation(KeyGenerator.GenerateNew());

            relation.Visible = true;
            relation.Tags.Add("kml_type", "boundaryType[]");

            foreach (OsmSharp.Tools.Xml.Kml.v2_1.boundaryType geo in boundary)
            {
                OsmGeo geo_osm = this.ConvertLinearRing(geo.LinearRing);
                if (geo_osm != null)
                {
                    RelationMember member = new RelationMember();
                    member.Member = geo_osm;
                    relation.Members.Add(member);
                }
            }

            return relation;
        }
 private void CacheDependency(RelationMember relation_member)
 {
     if (relation_member.MemberType == OsmGeoType.Relation)
     {
         _required_relations.Add(relation_member.MemberId.Value);
     }
     else if (relation_member.MemberType == OsmGeoType.Way)
     {
         _required_ways.Add(relation_member.MemberId.Value);
     }
     else if (relation_member.MemberType == OsmGeoType.Node)
     {
         _required_nodes.Add(relation_member.MemberId.Value);
     }
 }
Ejemplo n.º 19
0
        /// <summary>
        /// Converts a folder into an osm object.
        /// </summary>
        /// <param name="folder"></param>
        /// <returns></returns>
        private OsmGeo ConvertFolder(OsmSharp.Tools.Xml.Kml.v2_0_response.Folder folder)
        {
            Relation relation = OsmBaseFactory.CreateRelation(KeyGenerator.GenerateNew());

            relation.Tags.Add("kml_type", "Folder");

            for (int idx = 0; idx < folder.Items.Length; idx++)
            {
                RelationMember member;
                switch (folder.ItemsElementName[idx])
                {
                    case OsmSharp.Tools.Xml.Kml.v2_0_response.ItemsChoiceType2.Document:
                        member = new RelationMember();
                        member.Member = this.ConvertDocument(folder.Items[idx] as OsmSharp.Tools.Xml.Kml.v2_0_response.Document);
                        member.Role = "";
                        relation.Members.Add(member);
                        break;
                    case OsmSharp.Tools.Xml.Kml.v2_0_response.ItemsChoiceType2.Folder:
                        member = new RelationMember();
                        member.Member = this.ConvertFolder(folder.Items[idx] as OsmSharp.Tools.Xml.Kml.v2_0_response.Folder);
                        member.Role = "";
                        relation.Members.Add(member);
                        break;
                    case OsmSharp.Tools.Xml.Kml.v2_0_response.ItemsChoiceType2.Placemark:
                        member = new RelationMember();
                        member.Member = this.ConvertPlacemark(folder.Items[idx] as OsmSharp.Tools.Xml.Kml.v2_0_response.Placemark);
                        member.Role = "";
                        relation.Members.Add(member);
                        break;
                }
            }

            return relation;
        }
Ejemplo n.º 20
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);
 }
        private bool DoMoveNextRelation()
        {
            if (_relation_reader == null)
            {
                var relationCommand = new SQLiteCommand("select * from relation order by id", _connection);
                _relation_reader = relationCommand.ExecuteReader();
                if (!_relation_reader.Read())
                {
                    _relation_reader.Close();
                }
                var relationTagCommand = new SQLiteCommand("select * from relation_tags order by relation_id", _connection);
                _relation_tag_reader = relationTagCommand.ExecuteReader();
                if (!_relation_tag_reader.IsClosed && !_relation_tag_reader.Read())
                {
                    _relation_tag_reader.Close();
                }
                var relationNodeCommand = new SQLiteCommand("select * from relation_members order by relation_id,sequence_id", _connection);
                _relation_member_reader = relationNodeCommand.ExecuteReader();
                if (!_relation_member_reader.IsClosed && !_relation_member_reader.Read())
                {
                    _relation_member_reader.Close();
                }
            }

            // read next relation.
            if (!_relation_reader.IsClosed)
            {
                // load/parse data.
                long id = _relation_reader.GetInt64(0);
                long changesetId = _relation_reader.GetInt64(1);
                bool visible = _relation_reader.GetInt64(2) == 1;
                DateTime timestamp = _relation_reader.IsDBNull(3) ? DateTime.MinValue : _relation_reader.GetDateTime(3);
                long version = _relation_reader.GetInt64(4);
                string user = _relation_reader.GetString(5);
                long uid = _relation_reader.GetInt64(6);
                var relation = new Relation
                {
                    Id = id,
                    ChangeSetId = changesetId,
                    TimeStamp = timestamp,
                    UserId = null,
                    UserName = null,
                    Version = (ulong)version,
                    Visible = visible
                };
                relation.UserName = user;
                relation.UserId = uid;

                if (!_relation_tag_reader.IsClosed)
                {
                    long returnedId = _relation_tag_reader.GetInt64(0);
                    while (returnedId == relation.Id.Value)
                    {
                        if (relation.Tags == null)
                        {
                            relation.Tags = new TagsCollection();
                        }
                        string key = _relation_tag_reader.GetString(1);
                        string value = _relation_tag_reader.GetString(2);

                        relation.Tags.Add(key, value);

                        if (!_relation_tag_reader.Read())
                        {
                            _relation_tag_reader.Close();
                            returnedId = -1;
                        }
                        else
                        {
                            returnedId = _relation_tag_reader.GetInt64(0);
                        }
                    }
                }
                if (!_relation_member_reader.IsClosed)
                {
                    long returnedId = _relation_member_reader.GetInt64(0);
                    while (returnedId == relation.Id.Value)
                    {
                        if (relation.Members == null)
                        {
                            relation.Members = new List<RelationMember>();
                        }
                        string memberType = _relation_member_reader.GetString(1);
                        long memberId = _relation_member_reader.GetInt64(2);
                        object memberRole = _relation_member_reader.GetValue(3);

                        var member = new RelationMember();
                        member.MemberId = memberId;
                        if (memberRole != DBNull.Value)
                        {
                            member.MemberRole = memberRole as string;
                        }
                        switch (memberType)
                        {
                            case "Node":
                                member.MemberType = OsmGeoType.Node;
                                break;
                            case "Way":
                                member.MemberType = OsmGeoType.Way;
                                break;
                            case "Relation":
                                member.MemberType = OsmGeoType.Relation;
                                break;
                        }

                        relation.Members.Add(member);

                        if (!_relation_member_reader.Read())
                        {
                            _relation_member_reader.Close();
                            returnedId = -1;
                        }
                        else
                        {
                            returnedId = _relation_member_reader.GetInt64(0);
                        }
                    }
                }

                // set the current variable!
                _current = relation;

                // advance the reader(s).
                if (!_relation_reader.Read())
                {
                    _relation_reader.Close();
                }
                if (!_relation_tag_reader.IsClosed && !_relation_tag_reader.Read())
                {
                    _relation_tag_reader.Close();
                }
                if (!_relation_member_reader.IsClosed && !_relation_member_reader.Read())
                {
                    _relation_member_reader.Close();
                }
                return true;
            }
            else
            {
                _relation_reader.Close();
                _relation_reader.Dispose();
                _relation_reader = null;

                _relation_tag_reader.Close();
                _relation_tag_reader.Dispose();
                _relation_tag_reader = null;

                _current_type = OsmGeoType.Relation;

                return false;
            }
        }
Ejemplo n.º 22
0
        /// <summary>
        /// Reads a relation member from the MySqlDataReader
        /// </summary>
        /// <param name="reader">The MySqlDataReader to attempt reading the relation member from</param>
        /// <returns>The relation member read from the MySqlReader</returns>
        private RelationMember ReadRelationMember(MySqlDataReader reader)
        {
            var relation_member = new RelationMember();

            relation_member.MemberType = ConvertMemberType(reader.GetInt16(0));
            relation_member.MemberId = reader.GetInt64(1);
            relation_member.MemberRole = reader.GetString(2);

            return relation_member;
        }