(* Data z Karína *)
data=Import["./geodata.csv"][[2;;]]

target=data[[1]]
rest =data[[2;;]]

distances=Map[GeoDistance[target,#]&,rest]

(* Vzdálenost na sílu signálu - tvorba zadání *)
power[distance_]:=Round[1/((QuantityMagnitude[distance])^2)*500000,0.1]
powers=Map[power,distances]

distance[power_]:=Sqrt@(((power/500000))^(-1))
(* Síla signálu na vzdálenost - převod zadání na zpracovatelná data *)
distancesInput=Map[distance,powers]

(* Počáteční odhad *)
dest={0.,0.};

(* Převod do a z Kartézkých součřadnic *)
toXYZ[loc_]:=(GeoPositionXYZ@GeoPosition@loc)[[1]]
fromXYZ[coord_]:=(GeoPosition@GeoPositionXYZ@coord)[[1]][[;;2]]
(* Směrový vektor *)
GeoVec[estimate_,beacon_]:=Normalize[estimate-toXYZ@beacon]
iteration[estimate_]:=(A=Table[GeoVec[estimate,rest[[i]]],{i,1,Length@distancesInput}];
distancesApprox=Table[EuclideanDistance[estimate,toXYZ@rest[[i]]]-distancesInput[[i]],{i,1,Length@distancesInput}];
PseudoInverse[A].distancesApprox)

recurs[x_]:=fromXYZ@(iteration[toXYZ@x]+toXYZ@x)

Nest[recurs,dest,1000]