@PavelBoytchev Unfortunately I’m not getting consistent results — anything within the reference points area works well, but outside of that I’m not seeing the expected x,z for given lon,lat. Below is sample data, with the expected x,z and the resulting x,z. I also have all the points visualised here Third point x,z calc debug - Google My Maps
Sample Point 2 provides the most curious result. Some variance is OK because a model might not be 100% spatially accurate. However I cannot understand what about sample point 2 would produce that kind of result 
// Reference Points
// lat1: -38.1495921086427
// lat2: -38.1492866772213
// lon1: 144.30724288969
// lon2: 144.307338593531
// x1: -2.34
// x2: -3.28
// z1: 12.62
// z2: 11.2
// Sample Point 1
// lon3: 144.3073613926176
// lat3: -38.14901617699974
var P = geoLocal(
new THREE.Vector3(144.30724288969,0,-38.1495921086427),// lon1, 0, lat1
new THREE.Vector3(144.307338593531,0,-38.1492866772213),// lon2, 0, lat2
new THREE.Vector3(144.3073613926176,0,-38.14901617699974),// lon3, 0, lat3
new THREE.Vector3(-2.34,0,12.62),// x1, 0, z1
new THREE.Vector3(-3.28,0,11.2)// x2, 0, z2
)
// Expected (approx): -4.21, 10.16
// Result: -3.7957815693929535 9.850952647135689
// Sample Point 2
// lon3: 144.30823108398587
// lat3: -38.14923334727532
var P = geoLocal(
new THREE.Vector3(144.30724288969,0,-38.1495921086427),// lon1, 0, lat1
new THREE.Vector3(144.307338593531,0,-38.1492866772213),// lon2, 0, lat2
new THREE.Vector3(144.30823108398587,0,-38.14923334727532),// lon3, 0, lat3
new THREE.Vector3(-2.34,0,12.62),// x1, 0, z1
new THREE.Vector3(-3.28,0,11.2)// x2, 0, z2
)
// Expected (approx): -0.88, 8.24
// Result: -7.920793570380081 12.24465589317603
// Sample Point 3
// lon3: 144.30748132466096
// lat3: -38.14995687807887
var P = geoLocal(
new THREE.Vector3(144.30724288969,0,-38.1495921086427),// lon1, 0, lat1
new THREE.Vector3(144.307338593531,0,-38.1492866772213),// lon2, 0, lat2
new THREE.Vector3(144.30748132466096,0,-38.14995687807887),// lon3, 0, lat3
new THREE.Vector3(-2.34,0,12.62),// x1, 0, z1
new THREE.Vector3(-3.28,0,11.2)// x2, 0, z2
)
// Expected (approx): -0.16, 13.2
// Result: -3.020415227359035 14.836481585990997