I'm a software developer and I want to create a function from raw data which I collected. The data relates to a satellite image of Europe (Germany). I have a list of geo coordinates and the resulting coordinates in the image.
{lng: -1, lat: 47, x: -52, y: 510},
{lng: -1, lat: 48, x: -40, y: 447},
{lng: -1, lat: 49, x: -29, y: 386},
{lng: -1, lat: 50, x: -18, y: 323},
{lng: -1, lat: 51, x: -5, y: 257},
{lng: -1, lat: 52, x: 5, y: 199},
{lng: -1, lat: 53, x: 16, y: 140},
{lng: -1, lat: 54, x: 27, y: 79},
{lng: 0, lat: 47, x: -13, y: 516},
{lng: 0, lat: 48, x: -2, y: 452},
{lng: 0, lat: 49, x: 8, y: 394},
{lng: 0, lat: 50, x: 18, y: 329},
{lng: 0, lat: 51, x: 29, y: 266},
{lng: 0, lat: 52, x: 39, y: 207},
{lng: 0, lat: 53, x: 50, y: 143},
{lng: 0, lat: 54, x: 59, y: 84},
{lng: 1, lat: 47, x: 27, y: 526},
{lng: 1, lat: 48, x: 37, y: 460},
{lng: 1, lat: 49, x: 46, y: 399},
{lng: 1, lat: 50, x: 56, y: 338},
{lng: 1, lat: 51, x: 66, y: 273},
{lng: 1, lat: 52, x: 75, y: 212},
{lng: 1, lat: 53, x: 84, y: 152},
{lng: 1, lat: 54, x: 93, y: 91},
{lng: 2, lat: 47, x: 69, y: 531},
{lng: 2, lat: 48, x: 77, y: 468},
{lng: 2, lat: 49, x: 85, y: 405},
{lng: 2, lat: 50, x: 94, y: 342},
{lng: 2, lat: 51, x: 103, y: 277},
{lng: 2, lat: 52, x: 110, y: 217},
{lng: 2, lat: 53, x: 119, y: 155},
{lng: 2, lat: 54, x: 126, y: 97},
{lng: 3, lat: 47, x: 110, y: 535},
{lng: 3, lat: 48, x: 117, y: 470},
{lng: 3, lat: 49, x: 124, y: 411},
{lng: 3, lat: 50, x: 132, y: 346},
{lng: 3, lat: 51, x: 139, y: 281},
{lng: 3, lat: 52, x: 146, y: 222},
{lng: 3, lat: 53, x: 153, y: 164},
{lng: 3, lat: 54, x: 161, y: 98},
{lng: 4, lat: 47, x: 153, y: 538},
{lng: 4, lat: 48, x: 159, y: 475},
{lng: 4, lat: 49, x: 165, y: 414},
{lng: 4, lat: 50, x: 171, y: 353},
{lng: 4, lat: 51, x: 178, y: 286},
{lng: 4, lat: 52, x: 184, y: 230},
{lng: 4, lat: 53, x: 190, y: 168},
{lng: 4, lat: 54, x: 197, y: 102},
{lng: 5, lat: 47, x: 192, y: 543},
{lng: 5, lat: 48, x: 197, y: 479},
{lng: 5, lat: 49, x: 203, y: 415},
{lng: 5, lat: 50, x: 208, y: 353},
{lng: 5, lat: 51, x: 213, y: 290},
{lng: 5, lat: 52, x: 218, y: 232},
{lng: 5, lat: 53, x: 223, y: 169},
{lng: 5, lat: 54, x: 229, y: 105},
{lng: 6, lat: 47, x: 233, y: 547},
{lng: 6, lat: 48, x: 238, y: 482},
{lng: 6, lat: 49, x: 242, y: 422},
{lng: 6, lat: 50, x: 246, y: 356},
{lng: 6, lat: 51, x: 251, y: 293},
{lng: 6, lat: 52, x: 254, y: 231},
{lng: 6, lat: 53, x: 258, y: 171},
{lng: 6, lat: 54, x: 263, y: 107},
{lng: 7, lat: 47, x: 274, y: 551},
{lng: 7, lat: 48, x: 278, y: 484},
{lng: 7, lat: 49, x: 281, y: 421},
{lng: 7, lat: 50, x: 284, y: 358},
{lng: 7, lat: 51, x: 287, y: 296},
{lng: 7, lat: 52, x: 290, y: 233},
{lng: 7, lat: 53, x: 293, y: 172},
{lng: 7, lat: 54, x: 296, y: 112},
{lng: 8, lat: 47, x: 316, y: 550},
{lng: 8, lat: 48, x: 318, y: 490},
{lng: 8, lat: 49, x: 320, y: 423},
{lng: 8, lat: 50, x: 322, y: 360},
{lng: 8, lat: 51, x: 325, y: 301},
{lng: 8, lat: 52, x: 327, y: 235},
{lng: 8, lat: 53, x: 328, y: 174},
{lng: 8, lat: 54, x: 331, y: 111},
{lng: 9, lat: 47, x: 360, y: 552},
{lng: 9, lat: 48, x: 360, y: 487},
{lng: 9, lat: 49, x: 361, y: 424},
{lng: 9, lat: 50, x: 363, y: 361},
{lng: 9, lat: 51, x: 363, y: 298},
{lng: 9, lat: 52, x: 364, y: 236},
{lng: 9, lat: 53, x: 366, y: 174},
{lng: 9, lat: 54, x: 366, y: 112},
{lng: 10, lat: 47, x: 398, y: 552},
{lng: 10, lat: 48, x: 398, y: 488},
{lng: 10, lat: 49, x: 398, y: 424},
{lng: 10, lat: 50, x: 398, y: 362},
{lng: 10, lat: 51, x: 398, y: 299},
{lng: 10, lat: 52, x: 398, y: 241},
{lng: 10, lat: 53, x: 399, y: 175},
{lng: 10, lat: 54, x: 399, y: 113},
{lng: 11, lat: 47, x: 440, y: 552},
{lng: 11, lat: 48, x: 439, y: 487},
{lng: 11, lat: 49, x: 438, y: 424},
{lng: 11, lat: 50, x: 437, y: 361},
{lng: 11, lat: 51, x: 436, y: 301},
{lng: 11, lat: 52, x: 435, y: 236},
{lng: 11, lat: 53, x: 434, y: 174},
{lng: 11, lat: 54, x: 433, y: 112},
{lng: 12, lat: 47, x: 482, y: 550},
{lng: 12, lat: 48, x: 479, y: 487},
{lng: 12, lat: 49, x: 477, y: 423},
{lng: 12, lat: 50, x: 475, y: 360},
{lng: 12, lat: 51, x: 473, y: 297},
{lng: 12, lat: 52, x: 471, y: 235},
{lng: 12, lat: 53, x: 469, y: 173},
{lng: 12, lat: 54, x: 467, y: 111},
{lng: 13, lat: 47, x: 523, y: 548},
{lng: 13, lat: 48, x: 520, y: 485},
{lng: 13, lat: 49, x: 517, y: 421},
{lng: 13, lat: 50, x: 514, y: 358},
{lng: 13, lat: 51, x: 510, y: 296},
{lng: 13, lat: 52, x: 507, y: 233},
{lng: 13, lat: 53, x: 504, y: 172},
{lng: 13, lat: 54, x: 501, y: 110},
{lng: 14, lat: 47, x: 565, y: 546},
{lng: 14, lat: 48, x: 562, y: 482},
{lng: 14, lat: 49, x: 557, y: 418},
{lng: 14, lat: 50, x: 553, y: 356},
{lng: 14, lat: 51, x: 549, y: 293},
{lng: 14, lat: 52, x: 545, y: 231},
{lng: 14, lat: 53, x: 541, y: 169},
{lng: 14, lat: 54, x: 537, y: 107},
{lng: 15, lat: 47, x: 605, y: 543},
{lng: 15, lat: 48, x: 600, y: 479},
{lng: 15, lat: 49, x: 594, y: 415},
{lng: 15, lat: 50, x: 589, y: 353},
{lng: 15, lat: 51, x: 584, y: 290},
{lng: 15, lat: 52, x: 579, y: 228},
{lng: 15, lat: 53, x: 574, y: 167},
{lng: 15, lat: 54, x: 569, y: 105},
{lng: 16, lat: 47, x: 646, y: 538},
{lng: 16, lat: 48, x: 640, y: 475},
{lng: 16, lat: 49, x: 633, y: 411},
{lng: 16, lat: 50, x: 627, y: 349},
{lng: 16, lat: 51, x: 621, y: 286},
{lng: 16, lat: 52, x: 615, y: 224},
{lng: 16, lat: 53, x: 609, y: 163},
{lng: 16, lat: 54, x: 603, y: 102},
{lng: 17, lat: 47, x: 687, y: 533},
{lng: 17, lat: 48, x: 680, y: 470},
{lng: 17, lat: 49, x: 673, y: 406},
{lng: 17, lat: 50, x: 665, y: 344},
{lng: 17, lat: 51, x: 658, y: 282},
{lng: 17, lat: 52, x: 651, y: 220},
{lng: 17, lat: 53, x: 644, y: 159},
{lng: 17, lat: 54, x: 637, y: 98},
{lng: 18, lat: 47, x: 728, y: 527},
{lng: 18, lat: 48, x: 719, y: 464},
{lng: 18, lat: 49, x: 711, y: 402},
{lng: 18, lat: 50, x: 703, y: 339},
{lng: 18, lat: 51, x: 695, y: 277},
{lng: 18, lat: 52, x: 686, y: 216},
{lng: 18, lat: 53, x: 679, y: 154},
{lng: 18, lat: 54, x: 670, y: 93},
{lng: 19, lat: 47, x: 771, y: 521},
{lng: 19, lat: 48, x: 761, y: 458},
{lng: 19, lat: 49, x: 752, y: 395},
{lng: 19, lat: 50, x: 743, y: 333},
{lng: 19, lat: 51, x: 734, y: 271},
{lng: 19, lat: 52, x: 724, y: 209},
{lng: 19, lat: 53, x: 715, y: 148},
{lng: 19, lat: 54, x: 706, y: 87},
{lng: 20, lat: 47, x: 809, y: 514},
{lng: 20, lat: 48, x: 799, y: 451},
{lng: 20, lat: 49, x: 789, y: 389},
{lng: 20, lat: 50, x: 779, y: 326},
{lng: 20, lat: 51, x: 768, y: 265},
{lng: 20, lat: 52, x: 758, y: 204},
{lng: 20, lat: 53, x: 748, y: 143},
{lng: 20, lat: 54, x: 738, y: 82}
I want to create a function, to be able to compute the x und y coordinates in the image out of a passed geo coordinate.
Can anybody tell me how to solve such a problem? This exceeds my math skills.
Thanks in advance.
Let's rename lng, lat with a,b respectively and try to find a function $f$ such that $$f(a,b)=x$$ i.e. if $(a_i,b_j,x_{ij},y_{ij})$ are the data points, $f$ satisfies $$ f(a_i,b_j)=x_{ij}, \quad -1\le i\le20, \;47\le j\le54\;\cdots\;(1) $$ To do this we require a special kind of polynomials called Lagrange polynomials with the following definitions and properties $$ A_{k}(a)=\prod_{i=-1}^{20}{a-a_i\over a_{k}-a_{i}},\quad B_{k}(b)=\prod_{i=47}^{54}{b-b_i\over b_{k}-b_{i}}\\ A_{k}(a_j)=B_k(b_j)=\begin{cases} 1,& k=j\\ 0,& k\neq j \end{cases} $$ Using these properties we may conjecture $$ f(a,b_j)=\sum_{i=-1}^{20}A_{i}(a)x_{ij} $$ which makes sure that $(1)$ holds. Now we see that $$ f(a,b)=\sum_{j=47}^{54}B_{j}(b)f(a,b_j)=\sum_{j=47}^{54}\sum_{i=-1}^{20}A_i(a)B_{j}(b)x_{ij}\;\cdots(2) $$ This type of interpolation of called Bilinear interpolation. If defined according to $(2)$, $f$ satisfies $(1)$. So the function you require is $$ F(a,b)=\left(\sum_{j=47}^{54}\sum_{i=-1}^{20}A_i(a)B_{j}(b)x_{ij}\,,\sum_{j=47}^{54}\sum_{i=-1}^{20}A_i(a)B_{j}(b)y_{ij}\right) $$