/// <summary> /// rebuild gpxFile from Map Layers /// </summary> /// <param name="oLayerGPXPolylines"></param> /// <param name="oLayerGPXSymbols"></param> /// <returns></returns> public static GPXFile makeGPXfromMapLayers(LayerVectors oLayerGPXPolylines, LayerVectors oLayerGPXSymbols) { GPXFile gpxFile = new GPXFile(); GPXTrk trk = new GPXTrk(); gpxFile.trks.Add(trk); for (int i = 0; i < oLayerGPXPolylines.FeaturesCount; i++) { GPXTrkSeg seg = new GPXTrkSeg(); Feature f = oLayerGPXPolylines.FeatureGet(i); if (f is PolylineFeature) { PolylineFeature oPolyline = (PolylineFeature)f; for (int ipart = 0; ipart < oPolyline.m_oParts.Count; ipart++) { Part part = oPolyline.m_oParts[ipart]; for (int ipoint = 0; ipoint < part.Points.Count; ipoint++) { DPoint layerPoint = part.Points[ipoint]; SymbolFeature symbol = (SymbolFeature)layerPoint.Tag; double lon = layerPoint.X; double lat = layerPoint.Y; double ele = (double)symbol.getField("ele"); DateTime time = (DateTime)symbol.getField("time"); GpxWpt wpt = new GpxWpt(lon, lat, ele, time, -99); wpt.selected = layerPoint.Selected; seg.wpts.Add(wpt); } } } if (seg.wpts.Count > 0) { trk.trkSeg.Add(seg); } } return gpxFile; }
/// <summary> /// create features on layer based on gpxFile object /// </summary> /// <param name="gpxFile"></param> /// <param name="oLayerGPXPolylines"></param> /// <param name="oLayerGPXSymbols"></param> public static void makeMapLayersFromGPX(GPXFile gpxFile, LayerVectors oLayerGPXPolylines, LayerVectors oLayerGPXSymbols) { oLayerGPXSymbols.FeaturesClear(); oLayerGPXPolylines.FeaturesClear(); // fill layers with data if (gpxFile != null) { for (int iTrk = 0; iTrk < gpxFile.trks.Count; iTrk++) { GPXTrk trk = gpxFile.trks[iTrk]; for (int iSeg = 0; iSeg < trk.trkSeg.Count; iSeg++) { GPXTrkSeg seg = trk.trkSeg[iSeg]; List<DPoint> oPoints1 = new List<DPoint>(); for (int iWpt = 0; iWpt < seg.wpts.Count; iWpt++) { GpxWpt wpt = seg.wpts[iWpt]; DPoint oPoint = new DPoint(wpt.lon, wpt.lat); oPoint.Selected = wpt.selected; oPoints1.Add(oPoint); // add gpx point Feature oSymbol = FeatureFactory.CreateSymbol(wpt.lon, wpt.lat, (uint)0xFF00FF00); oSymbol.Tag = oPoint; oLayerGPXSymbols.FeaturesAdd(oSymbol); // link point to symbol and symbol to point oPoint.Tag = oSymbol; // fill data oSymbol.setField("lat", wpt.lat); oSymbol.setField("lon", wpt.lon); oSymbol.setField("ele", wpt.ele); oSymbol.setField("time", wpt.time); } if (oPoints1.Count > 0) { PolylineFeature oPolyline1 = FeatureFactory.CreatePolyline(oPoints1, new Style(Color.Green)); oLayerGPXPolylines.FeaturesAdd(oPolyline1); } } } } }