Ejemplo n.º 1
0
        public KmlEarthquake(KmlFolder parent, Earthquake eq)
            : base(parent, eq.Name, -1, eq.toStringKmlDescr())
        {
            string eqStyleEqSmall  = "#EarthquakeSmall";
            string eqStyleEqMedium = "#EarthquakeMedium";
            string eqStyleEqBig    = "#EarthquakeBig";

            string eqStyle;

            if (eq.Magn >= 5.0d)
            {
                eqStyle = eqStyleEqBig;
            }
            else if (eq.Magn >= 3.0d)
            {
                eqStyle = eqStyleEqMedium;
            }
            else
            {
                eqStyle = eqStyleEqSmall;
            }

            this.setStyle(eqStyle);

            bool eqClampToGround = true;             // eq.Location.Elev == 0.0d;

            XmlNode point = this.Point(eq.Location, eqClampToGround);

//			if(!eqClampToGround)
//			{
//				XmlNode node = point.OwnerDocument.CreateElement("extrude");
//				node.InnerText = "1";
//				point.AppendChild(node);
//			}
        }
Ejemplo n.º 2
0
        /// <summary>
        /// creates a new folder and adds it to parent
        /// </summary>
        /// <param name="name"></param>
        /// <param name="open"></param>
        /// <param name="description"></param>
        /// <param name="parent"></param>
        /// <returns></returns>
        public KmlFolder CreateFolder(string name, int open, string description, KmlElement parent)
        {
            KmlFolder ret = new KmlFolder(this, name, open, description);

            parent.AppendChild(ret);

            return(ret);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// creates a root-level folder
        /// </summary>
        /// <param name="name"></param>
        /// <param name="open"></param>
        /// <param name="description"></param>
        /// <returns></returns>
        public KmlFolder CreateFolder(string name, int open, string description)
        {
            KmlFolder ret = new KmlFolder(this, name, open, description);

            m_documentNode.AppendChild(ret.elementNode);

            return(ret);
        }
Ejemplo n.º 4
0
        public KmlWaypoint(KmlFolder parent, Waypoint wpt)
            : base(parent, wpt.Name, -1, wpt.toStringKmlDescr())
        {
            string pmStyleDefault       = "#Waypoint";
            string pmStylePhoto         = "#WaypointPhoto";
            string pmStyleGeocache      = "#Geocache";
            string pmStyleGeocacheFound = "#GeocacheFound";

            if (wpt.ThumbImage != null)
            {
                this.setStyle(pmStylePhoto);

                try
                {
                    PhotoDescr photoDescr = PhotoDescr.FromThumbnail(wpt.ThumbSource);

                    photoDescr.ensureImageExists();

                    ownerDoc.kmlFile.addImage(new Bitmap(photoDescr.image), wpt.Name);

                    photoDescr.releaseImage();
                }
                // An invalid image will throw an OutOfMemoryException
                // exception
                catch (OutOfMemoryException)
                {
                    LibSys.StatusBar.Error("bad image: " + wpt.ThumbSource);
                }
            }
            else if (wpt.LiveObjectType == LiveObjectTypes.LiveObjectTypeGeocache)
            {
                if (wpt.Found)
                {
                    this.setStyle(pmStyleGeocacheFound);
                }
                else
                {
                    this.setStyle(pmStyleGeocache);
                }
            }
            else
            {
                this.setStyle(pmStyleDefault);
            }

            bool wptClampToGround = Project.kmlOptions.WptsClampToGround || wpt.Location.Elev == 0.0d;

            XmlNode point = this.Point(wpt.Location, wptClampToGround);

            if (!wptClampToGround)
            {
                XmlNode node = point.OwnerDocument.CreateElement("extrude");
                node.InnerText = "1";
                point.AppendChild(node);
            }
        }
Ejemplo n.º 5
0
 public KmlPlacemark(KmlFolder parent, string name, int open, string description)
     : base(parent, "Placemark", name, open, description)
 {
 }
Ejemplo n.º 6
0
        public KmlTrack(KmlFolder parent, Track trk)
            : base(parent, trk.Name, 1, null)
        {
            bool trksClampToGround = Project.kmlOptions.TrksClampToGround;

            if (!trksClampToGround)
            {
                // do a little bit of looking into waypoints, decide if we need to clamp to ground anyway:
                bool hasAlt = false;
                for (int i = 0; i < trk.Trackpoints.Count; i++)
                {
                    Waypoint wpt = (Waypoint)trk.Trackpoints.GetByIndex(i);
                    if (wpt.Location.Elev != 0.0d)
                    {
                        hasAlt = true;
                        break;
                    }
                }
                if (!hasAlt)
                {
                    trksClampToGround = true;
                }
            }

            string actualAltMode   = trksClampToGround ? "clampedToGround" : "absolute";
            string actualPathName  = trksClampToGround ? "Path - clamped to ground" : "Path-Actual";
            string actualPathStyle = trksClampToGround ? "#TrackPathActual" : "#TrackPathActual";

            KmlPlacemark path = new KmlPlacemark(this, actualPathName, -1, null);

            // first path follows the trackpoints - actual track in the air:
            path.setColor(trk.color, Color.FromArgb(127, Color.Green));

            ArrayList points = new ArrayList();

            for (int i = 0; i < trk.Trackpoints.Count; i++)
            {
                Waypoint wpt    = (Waypoint)trk.Trackpoints.GetByIndex(i);
                CamPos   campos = new CamPos(wpt.Location.Lng, wpt.Location.Lat, wpt.Location.Elev, true);
                points.Add(campos);
            }

            path.setStyle(actualPathStyle);
            path.LineString(points, 0, 0, actualAltMode);

            if (!trksClampToGround)
            {
                // second path clamps to the ground, in case the first path goes under the surface:
                KmlPlacemark path2 = new KmlPlacemark(this, "Path-Ground", -1, null);

                path2.setColor(trk.color, Color.FromArgb(127, Color.Green));
                path2.setStyle("#TrackPathGround");
                path2.LineString(points, 0, 0, "clampedToGround");

                // third path creates a wall to the ground:
                KmlPlacemark path3 = new KmlPlacemark(this, "Path-Wall", -1, null);

                path3.setColor(Color.Transparent, Color.FromArgb(77, trk.color));                               // Lines are completely invisible, wall is 30% transparency
                path3.setStyle("#TrackPathWall");
                path3.LineString(points, 0, 1, "absolute");
            }

            // ok, done with the paths, build all waypoints:
            KmlFolder pointsFolder = new KmlFolder(this, "Trackpoints", -1, null);

            for (int i = 0; i < trk.Trackpoints.Count; i++)
            {
                Waypoint wpt     = (Waypoint)trk.Trackpoints.GetByIndex(i);
                Waypoint nextWpt = (i == trk.Trackpoints.Count - 1) ? null : (Waypoint)trk.Trackpoints.GetByIndex(i + 1);

                if (wpt.ThumbImage == null && nextWpt != null && !wpt.isEndpoint && wpt.Location.sameAs(nextWpt.Location))
                {
                    continue;
                }

                string pmName = wpt.ThumbImage == null?Project.zuluToLocal(wpt.DateTime).ToString() : wpt.Name;

                string pmDescr           = wpt.toStringKmlDescr();
                string pmStyleStartTrack = "#TrackPointStart";
                string pmStyleEndTrack   = "#TrackPointEnd";
                string pmStyleArrow      = "#TrackPointArrow";
                string pmStylePhoto      = "#TrackPointPhoto";

                KmlPlacemark pmPoint = new KmlPlacemark(pointsFolder, pmName, -1, pmDescr);

                if (wpt.isEndpoint)
                {
                    if (i == 0)
                    {
                        pmPoint.setStyle(pmStyleStartTrack);
                    }
                    else
                    {
                        pmPoint.setStyle(pmStyleEndTrack);
                    }
                }
                else if (wpt.ThumbImage != null)
                {
                    pmPoint.setStyle(pmStylePhoto);

                    try
                    {
                        PhotoDescr photoDescr = PhotoDescr.FromThumbnail(wpt.ThumbSource);

                        photoDescr.ensureImageExists();

                        ownerDoc.kmlFile.addImage(new Bitmap(photoDescr.image), wpt.Name);

                        photoDescr.releaseImage();
                    }
                    // An invalid image will throw an OutOfMemoryException
                    // exception
                    catch (OutOfMemoryException)
                    {
                        LibSys.StatusBar.Error("bad image: " + wpt.ThumbSource);
                    }
                }
                else
                {
                    pmPoint.setStyle(pmStyleArrow);

                    Color legColor = trk.color;

                    if (!trk.isRoute)
                    {
                        // similar code it Track:Paint()
                        if (Project.trackElevColor)
                        {
                            double elevRange = trk.ElevMax - trk.ElevMin;
                            if (elevRange > 1.0d && elevRange < 20000.0d)
                            {
                                double elevFactor = elevRange / 256.0d;
                                double elev       = nextWpt.Location.Elev;
                                int    r          = (int)((elev - trk.ElevMin) / elevFactor);
                                if (r > 255)
                                {
                                    r = 255;
                                }
                                int b = 255 - r;
                                int g = (255 - (r > b ? r : b)) * 2;                                            // will be high where R and B are close to equal, amounts to cyan

                                legColor = Color.FromArgb(r, g, b);
                            }
                        }
                        else if (Project.trackSpeedColor)
                        {
                            double speedRange = trk.SpeedMax - trk.SpeedMin;
                            if (speedRange > 1000.0d && speedRange < 1000000000.0d)
                            {
                                double speedFactor = speedRange / 256.0d;
                                double speed       = nextWpt.Speed;
                                int    r           = (int)((speed - trk.SpeedMin) / speedFactor);
                                if (r > 255)
                                {
                                    r = 255;
                                }
                                int b = 255 - r;
                                int g = (255 - (r > b ? r : b)) * 2;                                            // will be high where R and B are close to equal, amounts to cyan

                                legColor = Color.FromArgb(r, g, b);
                            }
                        }
                    }

                    double heading = Math.Round(180.0d + wpt.Location.bearing(nextWpt.Location) * 180.0d / Math.PI);
                    pmPoint.setArrowHeading(heading, legColor);
                }

                pmPoint.Point(wpt.Location, trksClampToGround || (wpt.Location.Elev == 0.0));
            }
        }
Ejemplo n.º 7
0
 public KmlFolder(KmlFolder parent, string name, int open, string description)
     : this(parent.ownerDoc, name, open, description)
 {
     parent.AppendChild(this);
 }