LazMapViewer: Added TGpxWriter (rudimentary) into mvGPX.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@9266 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
parent
58f994c821
commit
f3338c7249
@ -16,10 +16,13 @@ unit mvGPX;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, laz2_DOM, laz2_XMLRead, DateUtils,
|
||||
Classes, SysUtils, laz2_DOM, laz2_XMLRead, laz2_XMLWrite, DateUtils,
|
||||
mvTypes, mvGpsObj;
|
||||
|
||||
type
|
||||
|
||||
{ TGpxReader }
|
||||
|
||||
TGpxReader = class
|
||||
private
|
||||
ID: Integer;
|
||||
@ -39,6 +42,14 @@ type
|
||||
function LoadFromStream(AStream: TStream; AList: TGpsObjectList; out ABounds: TRealArea): Integer;
|
||||
end;
|
||||
|
||||
{ TGpxWriter }
|
||||
|
||||
TGpxWriter = class
|
||||
public
|
||||
class procedure SaveToStream(AStream: TStream; AList: TGpsObjectList);
|
||||
class procedure SaveToFile(AFileName: String; AList: TGPSObjectList);
|
||||
end;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
@ -257,6 +268,73 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
class procedure TGpxWriter.SaveToStream(AStream: TStream; AList: TGpsObjectList
|
||||
);
|
||||
var
|
||||
Doc: TXMLDocument;
|
||||
RootNode: TDOMNode;
|
||||
I: Integer;
|
||||
O: TGPSObj;
|
||||
|
||||
function CreateTextElement(ANode: TDOMNode; ATag, AValue: DOMString): TDOMNode;
|
||||
begin
|
||||
Result := ANode;
|
||||
Result.AppendChild(Doc.CreateElement(ATag)).AppendChild(
|
||||
Doc.CreateTextNode(AValue));
|
||||
end;
|
||||
|
||||
function CreatePoint(AName: String; APOI: TGPSPoint): TDOMElement;
|
||||
begin
|
||||
Result := Doc.CreateElement(AName);
|
||||
Result.SetAttribute('lat', APOI.Lat.ToString);
|
||||
Result.SetAttribute('lon', APOI.Lon.ToString);
|
||||
if APOI.Name <> '' then
|
||||
CreateTextElement(Result, 'name', APOI.Name);
|
||||
if APOI.Elevation <> NO_ELE then
|
||||
CreateTextElement(Result, 'ele', APOI.Elevation.ToString);
|
||||
if APOI.DateTime <> NO_DATE then
|
||||
CreateTextElement(Result, 'time', DateToISO8601(APOI.DateTime));
|
||||
end;
|
||||
|
||||
begin
|
||||
Doc := TXMLDocument.Create;
|
||||
try
|
||||
RootNode := Doc.CreateElement('gpx');
|
||||
Doc.AppendChild(RootNode);
|
||||
RootNode := Doc.DocumentElement;
|
||||
TDOMElement(RootNode).SetAttribute('version', '1.1');
|
||||
TDOMElement(RootNode).SetAttribute('creator',
|
||||
'LazMapViewer https://wiki.lazarus.freepascal.org/LazMapViewer');
|
||||
|
||||
for I := 0 to Pred(AList.Count) do
|
||||
begin
|
||||
O := AList[I];
|
||||
if O is TGPSPointOfInterest then
|
||||
RootNode.AppendChild(CreatePoint('wpt', TGPSPoint(O)))
|
||||
else if O is TGPSPoint then
|
||||
RootNode.AppendChild(CreatePoint('wpt', TGPSPoint(O)))
|
||||
else if O is TGPSTrack then
|
||||
{TODO};
|
||||
end;
|
||||
WriteXMLFile(doc, AStream);
|
||||
|
||||
finally
|
||||
Doc.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
class procedure TGpxWriter.SaveToFile(AFileName: String; AList: TGPSObjectList);
|
||||
var
|
||||
Stream: TStream;
|
||||
begin
|
||||
Stream := TFileStream.Create(AFileName, fmCreate);
|
||||
try
|
||||
SaveToStream(Stream, AList);
|
||||
finally
|
||||
Stream.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TGpxReader.LoadFromStream(AStream: TStream; AList: TGpsObjectList): Integer;
|
||||
var
|
||||
area: TRealArea;
|
||||
|
Loading…
Reference in New Issue
Block a user