Ejemplo n.º 1
0
        private void ReadGarminWayPointExtensions(XmlReader reader, GpxWayPoint wayPoint)
        {
            if (reader.IsEmptyElement)
            {
                return;
            }

            string elementName = reader.Name;

            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                case XmlNodeType.Element:
                    switch (reader.LocalName)
                    {
                    case "Address":
                        wayPoint.Address = ReadGarminGpxAddress(reader);
                        break;

                    case "PhoneNumber":
                        wayPoint.Phones.Add(ReadGarminGpxPhone(reader));
                        break;

                    case "Categories":
                    case "Depth":
                    case "DisplayMode":
                    case "Proximity":
                    case "Temperature":
                    case "Extensions":
                        SkipElement(reader);
                        break;

                    default:
                        throw new FormatException(reader.Name);
                    }

                    break;

                case XmlNodeType.EndElement:
                    if (reader.Name != elementName)
                    {
                        throw new FormatException(reader.Name);
                    }
                    return;
                }
            }

            throw new FormatException(elementName);
        }
Ejemplo n.º 2
0
        private void ReadWayPointExtensions(XmlReader reader, GpxWayPoint wayPoint)
        {
            if (reader.IsEmptyElement)
            {
                return;
            }

            string elementName = reader.Name;

            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                case XmlNodeType.Element:

                    if (reader.NamespaceURI == GARMIN_EXTENSIONS)
                    {
                        switch (reader.LocalName)
                        {
                        case "WaypointExtension":
                            ReadGarminWayPointExtensions(reader, wayPoint);
                            break;

                        default:
                            throw new FormatException(reader.Name);
                        }

                        break;
                    }

                    SkipElement(reader);
                    break;

                case XmlNodeType.EndElement:
                    if (reader.Name != elementName)
                    {
                        throw new FormatException(reader.Name);
                    }
                    return;
                }
            }

            throw new FormatException(elementName);
        }
Ejemplo n.º 3
0
        private void WriteWayOrRoutePoint(GpxWayPoint wayPoint)
        {
            Writer_.WriteAttributeString("lat", wayPoint.Latitude.ToString(CultureInfo.InvariantCulture));
            Writer_.WriteAttributeString("lon", wayPoint.Longitude.ToString(CultureInfo.InvariantCulture));
            if (wayPoint.Elevation != default(double))
            {
                Writer_.WriteElementString("ele", wayPoint.Elevation.ToString(CultureInfo.InvariantCulture));
            }
            if (wayPoint.Time != default(DateTime))
            {
                Writer_.WriteElementString("time", ToGpxDateString(wayPoint.Time));
            }
            if (!IsNullOrWhiteSpace(wayPoint.Name))
            {
                Writer_.WriteElementString("name", wayPoint.Name);                                     //IsNullOrWhiteSpace
            }
            if (!IsNullOrWhiteSpace(wayPoint.Comment))
            {
                Writer_.WriteElementString("cmt", wayPoint.Comment);                                        //IsNullOrWhiteSpace
            }
            if (!IsNullOrWhiteSpace(wayPoint.Description))
            {
                Writer_.WriteElementString("desc", wayPoint.Description);                                            //IsNullOrWhiteSpace
            }
            if (!IsNullOrWhiteSpace(wayPoint.Source))
            {
                Writer_.WriteElementString("src", wayPoint.Source);                                       //IsNullOrWhiteSpace
            }
            foreach (GpxLink link in wayPoint.Links)
            {
                WriteLink("link", link);
            }

            if (!IsNullOrWhiteSpace(wayPoint.Symbol))
            {
                Writer_.WriteElementString("sym", wayPoint.Symbol);                                       //IsNullOrWhiteSpace
            }
            if (!IsNullOrWhiteSpace(wayPoint.Type))
            {
                Writer_.WriteElementString("type", wayPoint.Type);                                     //IsNullOrWhiteSpace
            }
        }
Ejemplo n.º 4
0
        public void WriteWayPoint(GpxWayPoint wayPoint)
        {
            Writer_.WriteStartElement("wpt");

            WriteWayOrRoutePoint(wayPoint);

            if (wayPoint.HasWayPointExtensions)
            {
                Writer_.WriteStartElement("extensions");
                Writer_.WriteStartElement("WaypointExtension", GARMIN_EXTENSIONS_NAMESPACE);

                if (wayPoint.Address != null)
                {
                    WriteAddress("Address", wayPoint.Address);
                }

                if (wayPoint.Categories != null)
                {
                    //<gpxx:Categories><gpxx:Category>Magazine</gpxx:Category></gpxx:Categories>
                    Writer_.WriteStartElement("Categories", GARMIN_EXTENSIONS_NAMESPACE);
                    foreach (string strCategory in wayPoint.Categories)
                    {
                        Writer_.WriteElementString("Category", GARMIN_EXTENSIONS_NAMESPACE, strCategory);
                    }
                    Writer_.WriteEndElement();
                }

                foreach (GpxPhone phone in wayPoint.Phones)
                {
                    WritePhone("PhoneNumber", phone);
                }

                Writer_.WriteEndElement();
                Writer_.WriteEndElement();
            }

            Writer_.WriteEndElement();
        }
Ejemplo n.º 5
0
        private GpxWayPoint ReadGpxWayPoint(XmlReader reader)
        {
            GpxWayPoint wayPoint = new GpxWayPoint();

            string elementName    = reader.Name;
            bool   isEmptyElement = reader.IsEmptyElement;

            while (reader.MoveToNextAttribute())
            {
                switch (reader.Name)
                {
                case "lat":
                    wayPoint.Latitude = double.Parse(reader.Value, CultureInfo.InvariantCulture.NumberFormat);
                    break;

                case "lon":
                    wayPoint.Longitude = double.Parse(reader.Value, CultureInfo.InvariantCulture.NumberFormat);
                    break;
                }
            }

            if (isEmptyElement)
            {
                return(wayPoint);
            }

            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                case XmlNodeType.Element:

                    switch (reader.Name)
                    {
                    case "ele":
                        wayPoint.Elevation = ReadContentAsDouble(reader);
                        break;

                    case "time":
                        wayPoint.Time = ReadContentAsDateTime(reader);
                        break;

                    case "name":
                        wayPoint.Name = ReadContentAsString(reader);
                        break;

                    case "cmt":
                        wayPoint.Comment = ReadContentAsString(reader);
                        break;

                    case "desc":
                        wayPoint.Description = ReadContentAsString(reader);
                        break;

                    case "src":
                        wayPoint.Source = ReadContentAsString(reader);
                        break;

                    case "link":
                        wayPoint.Links.Add(ReadGpxLink(reader));
                        break;

                    case "sym":
                        wayPoint.Symbol = ReadContentAsString(reader);
                        break;

                    case "type":
                        wayPoint.Type = ReadContentAsString(reader);
                        break;

                    case "extensions":
                        ReadWayPointExtensions(reader, wayPoint);
                        break;

                    case "magvar":
                    case "geoidheight":
                    case "fix":
                    case "sat":
                    case "hdop":
                    case "vdop":
                    case "pdop":
                    case "ageofdgpsdata":
                    case "dgpsid":
                        SkipElement(reader);
                        break;

                    default:
                        throw new FormatException(reader.Name);
                    }

                    break;

                case XmlNodeType.EndElement:
                    if (reader.Name != elementName)
                    {
                        throw new FormatException(reader.Name);
                    }
                    return(wayPoint);
                }
            }

            throw new FormatException(elementName);
        }