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
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, laz2_DOM, laz2_XMLRead, DateUtils,
|
Classes, SysUtils, laz2_DOM, laz2_XMLRead, laz2_XMLWrite, DateUtils,
|
||||||
mvTypes, mvGpsObj;
|
mvTypes, mvGpsObj;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
{ TGpxReader }
|
||||||
|
|
||||||
TGpxReader = class
|
TGpxReader = class
|
||||||
private
|
private
|
||||||
ID: Integer;
|
ID: Integer;
|
||||||
@ -39,6 +42,14 @@ type
|
|||||||
function LoadFromStream(AStream: TStream; AList: TGpsObjectList; out ABounds: TRealArea): Integer;
|
function LoadFromStream(AStream: TStream; AList: TGpsObjectList; out ABounds: TRealArea): Integer;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TGpxWriter }
|
||||||
|
|
||||||
|
TGpxWriter = class
|
||||||
|
public
|
||||||
|
class procedure SaveToStream(AStream: TStream; AList: TGpsObjectList);
|
||||||
|
class procedure SaveToFile(AFileName: String; AList: TGPSObjectList);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -257,6 +268,73 @@ begin
|
|||||||
end;
|
end;
|
||||||
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;
|
function TGpxReader.LoadFromStream(AStream: TStream; AList: TGpsObjectList): Integer;
|
||||||
var
|
var
|
||||||
area: TRealArea;
|
area: TRealArea;
|
||||||
|
Loading…
Reference in New Issue
Block a user