Heb even verder gespeeld, let op dit antwoord werkt alleen voor de xml die je hebt opgegeven.
Natuurlijk kunnen er meer/minder/andere gegevens in staan maar de structuur van het bestand is wel van belang.
Ik heb de xml geïmporteerd in Delphi en ben daarmee aan de slag gegaan.
DISCLAIMER: Ik weet niet of dit de beste manier is. Het is in ieder geval een manier.
Code:
type
TWayPoint = class
private
FName: string;
FLat: Extended;
FLon: Extended;
public
constructor Create(ANode: IXMLWptType);
property Name: string read FName write FName;
property Lat: Extended read FLat write FLat;
property Lon: Extended read FLon write FLon;
end;
TMyList = class(TObjectList<TWayPoint>)
public
function WaypointExists(APoint: TWayPoint): boolean;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
FSettings: TFormatSettings;
In de formcreate moet je even de decimalseperator zetten in FSettings.
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
FSettings.DecimalSeparator := '.';
end;
Create van TWaypoint
HTML Code:
constructor TWayPoint.Create(ANode: IXMLWptType);
begin
FName := ANode.Name;
FLat := Extended.Parse(Anode.Lat, FSettings);
FLon := Extended.Parse(Anode.Lon, FSettings);
end;
Bekijken of je waypoint al in de lijst voor komt
Code:
function TMyList.WaypointExists(APoint: TWayPoint): boolean;
var
LPoint: TWayPoint;
begin
Result := False;
for LPoint in Self do
if (LPoint.Name = APoint.Name) and (LPoint.Lat = APoint.Lat) and
(LPoint.Lon = APoint.Lon) then
Exit(True)
end;
De xml laden, verwerken, en opnieuw opslaan zit in de buttonclick
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
LFile,
LResult: IXMLGpxType;
I: integer;
LWP: TWayPoint;
LList: TMyList;
LNode: IXMLWptType;
begin
LList := TMyList.Create;
try
//xml laden, functie zit in de gegenereerde unit door xml import
LFile := Loadgpx('<Pad naar je xml bestand>');
for I := 0 to LFile.Count-1 do
begin
LWP := TWayPoint.Create(LFile[I]);
//Alleen toevoegen als waypoint nog niet bestaat
if not LList.WaypointExists(LWP) then
LList.Add(LWP);
end;
//Nieuw leeg bestand. Ook beschikbaar door xml import
LResult := Newgpx;
for LWP in LList do
begin
//Node maken en vullen met data
LNode := LResult.Add;
LNode.Name := LWP.Name;
LNode.Lat := LWP.Lat.ToString(FSettings);
LNode.Lon := LWP.Lon.ToString(FSettings);
end;
//Nieuwe bestand opslaan
LResult.OwnerDocument.SaveToFile('<Nieuwe locatie>');
finally
LList.Free;
end;
end;
Hopelijk heb je er iets aan
Bookmarks