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); // } }
/// <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); }
/// <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); }
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); } }
public KmlPlacemark(KmlFolder parent, string name, int open, string description) : base(parent, "Placemark", name, open, description) { }
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)); } }
public KmlFolder(KmlFolder parent, string name, int open, string description) : this(parent.ownerDoc, name, open, description) { parent.AppendChild(this); }