Bez wątpienia jest błąd w logice całego programu. Co to jest za wpis:
TerrainPoint;;#TerrainPoint;5.118185;0.009215351;-157.7995;0;9.999994;0;0;
Współrzędna z dokładnością do 9 miejsc po przecinku. Przy całości równej metr mamy wymiar 9,215351mm. Dokładność tego zapisu jest zdecydowanie za duża. Rozlokowanie terrainpointów z przybliżeniem do milimetra nie zrujnuje raczej profilu pionowego. Program w ogóle nie powinien generować takich liczb. Zwyczajnie nie ma to uzasadnienia. Jeszcze łączenie torów, punkt jest punkt. Muszą się nałożyć i tu nie ma mowy o niedokładności, ale teren? Kto zauważy przesunięcie o milimetr? O jedną stutysięczną milimetra? Efekt takich działań to długie ciągi cyfr w liczbie, albo jakieś makabryczne ułamki z E do którejśtam. Szukanie potem błędu w takiej masie cyfr jest utrudnione, dość mocno. Nawet jak przesortuję po współrzędnej X, Y uznam za pomijalną (dla miażdżącej większości jest zerowa lub bliska zeru), to samo porównywanie Z dla podobnych X na piechotę nie może pójść szybko. Dużo roboty i duże ryzyko przeoczeń. Można rzecz jasna znaleźć (nie wiem czy taki jest w miarę dostępny) lub napisać program, który wyłuska współrzędne i zaraportuje pary punktów, które mają określone odległości od siebie mniejsze niż szukana wartość. Tylko to też wymaga wiedzy i wysiłku.
Zabezpieczenie przed bałaganem w terenie widzę tak: uniemożliwienie tworzenia punktów w odległości mniejszej niż 0,5m od siebie na płaszczyźnie między osiami X i Z, zerowanie czwartego, piątego i szóstego parametru (obrót wokół osi, przecież punkt jest nieskończenie mały, jego obrót nic nie zmienia) i określenie dokładności do 3ciego miejsca po przecinku, czyli 1mm.