Bonjour
Je cherche à récupérer d'un fichier kml les coordonnées d'un trajet
J'utilise IXMLNode
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <Placemark> <name>ALPHA-Cheminement</name> <styleUrl>#msn_ylw-pushpin</styleUrl> <LineString> <tessellate>1</tessellate> <coordinates> 3.78919818067865,49.23157613507813,0 3.791865127977232,49.23093688390484,0 3.794833704929468,49.22795011803071,0 </coordinates> </LineString> </Placemark>
Je récupère bien les coordonnées dans SplittedPts mais la chaîne comporte des caractères ACSII supplémentaires, #$A#9#9#9#9, en début et en fin de chaîne (précédé d'une virgule et d'un espace)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 procedure TUnit.LoadXML(XMLNode: IXMLNode; TreeNode: TTreeNode); var K : integer; LNode1 : IXMLNode; LNode2 : IXMLNode; SplittedPts : TStringDynArray; NodeTree : TTreeNode; ArrayPts : string; begin // Recursive call if XmlNode.NodeName = 'Placemark' then begin LNode1 := XmlNode.ChildNodes.FindNode('LineString'); if (LNode1 <> Nil) then begin LNode2 := LNode1.ChildNodes.FindNode('coordinates'); SplittedPts := SplitString(LNode2.NodeValue,' '); end; end; if XMLNode.HasChildNodes then for I := 0 to XMLNode.ChildNodes.Count - 1 do LoadXML(XMLNode.ChildNodes.Nodes [I], NodeTree); end;
Les coordonnées étant situés entre les simples quotes, j'ai essayer d'extraire ces caractères par une expression régulière avec le pattern(#$A#9#9#9#9'3.78919818067865,49.23157613507813,0', '3.791865127977232,49.23093688390484,0', '3.794833704929468,49.22795011803071,0', #$A#9#9#9)
const PATTERN = '\''.*\''';Si je teste le pattern \'.*\' sur un site en ligne, j'extrais bien les coordonnées.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 for K := 0 to NbPts do begin Expr := TRegEx.Create(PATTERN); Match := expr.Match(SplittedPts[K]); if Match.Success then for Group in Match.Groups do ArrayPts := Group.value else ArrayPts := '';
Le problème est que la traduction du simple quote dans Delphi n'est pas reconnu et Match.Success = false
J'ai aussi essayé d'utiliser StringReplace
Mais ces caractères ne sont pas supprimés
Code : Sélectionner tout - Visualiser dans une fenêtre à part ArrayPts := StringReplace(SplittedPts[K],'#$A#9#9#9#9','',[rfReplaceAll, rfIgnoreCase]);
Merci de vos idées
Partager