Track *ActiveTrack::DoExtendDaily() { Track *pExtendTrack = NULL; TrackPoint *pExtendPoint = NULL; TrackPoint *pLastPoint = GetPoint( 0 ); wxTrackListNode *track_node = pTrackList->GetFirst(); while( track_node ) { Track *ptrack = track_node->GetData(); if( !ptrack->m_bIsInLayer && ptrack->m_GUID != m_GUID ) { TrackPoint *track_node = ptrack->GetLastPoint(); if( track_node->GetCreateTime() <= pLastPoint->GetCreateTime() ) { if( !pExtendPoint || track_node->GetCreateTime() > pExtendPoint->GetCreateTime() ) { pExtendPoint = track_node; pExtendTrack = ptrack; } } } track_node = track_node->GetNext(); // next track } if( pExtendTrack && pExtendTrack->GetPoint( 0 )->GetCreateTime().FromTimezone( wxDateTime::GMT0 ).IsSameDate(pLastPoint->GetCreateTime().FromTimezone( wxDateTime::GMT0 ) ) ) { int begin = 1; if( pLastPoint->GetCreateTime() == pExtendPoint->GetCreateTime() ) begin = 2; pSelect->DeleteAllSelectableTrackSegments( pExtendTrack ); wxString suffix = _T(""); if( GetName().IsNull() ) { suffix = pExtendTrack->GetName(); if( suffix.IsNull() ) suffix = wxDateTime::Today().FormatISODate(); } pExtendTrack->Clone( this, begin, GetnPoints(), suffix ); pSelect->AddAllSelectableTrackSegments( pExtendTrack ); pSelect->DeleteAllSelectableTrackSegments( this ); return pExtendTrack; } else { if( GetName().IsNull() ) SetName(wxDateTime::Today().FormatISODate()); return NULL; } }
wxString Kml::MakeKmlFromTrack( Track* track ) { TiXmlDocument xmlDoc; wxString name = _("OpenCPN Track"); if( track->m_TrackNameString.Length() ) name = track->m_TrackNameString; TiXmlElement* document = StandardHead( xmlDoc, name ); TiXmlElement* pmTrack = new TiXmlElement( "Placemark" ); document->LinkEndChild( pmTrack ); TiXmlElement* pmName = new TiXmlElement( "name" ); pmTrack->LinkEndChild( pmName ); TiXmlText* pmNameVal = new TiXmlText( track->m_TrackNameString.mb_str( wxConvUTF8 ) ); pmName->LinkEndChild( pmNameVal ); TiXmlElement* gxTrack = new TiXmlElement( "gx:Track" ); pmTrack->LinkEndChild( gxTrack ); std::stringstream lineStringCoords; for(int i=0; i<track->GetnPoints(); i++) { TrackPoint *trackpoint = track->GetPoint(i); TiXmlElement* when = new TiXmlElement( "when" ); gxTrack->LinkEndChild( when ); wxDateTime whenTime( trackpoint->GetCreateTime() ); TiXmlText* whenVal = new TiXmlText( whenTime.Format( _T("%Y-%m-%dT%H:%M:%SZ") ).mb_str( wxConvUTF8 ) ); when->LinkEndChild( whenVal ); } for(int i=0; i<track->GetnPoints(); i++) { TrackPoint *trackpoint = track->GetPoint(i); TiXmlElement* coord = new TiXmlElement( "gx:coord" ); gxTrack->LinkEndChild( coord ); wxString coordStr = wxString::Format( _T("%f %f 0.0"), trackpoint->m_lon, trackpoint->m_lat ); TiXmlText* coordVal = new TiXmlText( coordStr.mb_str( wxConvUTF8 ) ); coord->LinkEndChild( coordVal ); } TiXmlPrinter printer; printer.SetIndent( " " ); xmlDoc.Accept( &printer ); return wxString( printer.CStr(), wxConvUTF8 ); }