Tengo dos tablas de datos de valores asignados espacialmente, pero las coordenadas de una tabla no son las mismas que las de la segunda. Me gustaría "unirme" a estas tablas, pero hacer que los datos coincidan por coordenadas para poder comparar los valores de variante espacial entre las dos tablas.
¿Alguien sabe si hay una manera fácil de hacer esto en lugar de simplemente calcular con fuerza bruta cada valor? Parece haber algunas funciones matriciales interesantes, pero no estoy familiarizado con los conceptos matemáticos detrás de ellas.
Tengo una maqueta del proceso que se muestra a continuación y que, con suerte, transmite lo que quiero que suceda.
Ver más... Si la tabla de datos de diseño de polígonos es regular y completa

Names Default To Here( 1 );
// Create the example data tables
New Table( "Data",
Add Rows( 4 ),
New Column( "x", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [0.5, 1.5, 0.5, 1.5] ) ),
New Column( "y", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [0.5, 0.5, 1.5, 1.5] ) )
);
New Table( "Layout",
Add Rows( 9 ),
New Column( "X", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [0, 1, 2, 0, 1, 2, 0, 1, 2] ) ),
New Column( "Y", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [0, 0, 0, 1, 1, 1, 2, 2, 2] ) ),
New Column( "V", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [0, 1, 2, 1, 2, 3, 2, 3, 4] ) ),
Set Row States( [8, 8, 8, 8, 8, 8, 8, 8, 8] ),
Set Label Columns( :V )
);
// Calculate the IV data
dtLookup = Data Table( "Layout" );
dtData = Data Table( "Data" );
dtData << New Column( "IV" );
For( i = 1, i <= N Rows( dtData ), i++,
xVal = dtData:X[i];
yVal = dtData:Y[i];
yMin = Col Max( If( dtLookup:Y < yVal, dtLookup:Y, . ) );
yMax = Col Min( If( dtLookup:Y > yVal, dtLookup:Y, . ) );
xMin = Col Max( If( dtLookup:X < xVal, dtLookup:X, . ) );
xMax = Col Min( If( dtLookup:X > xVal, dtLookup:X, . ) );
botLeft = dtLookup:V[(dtLookup << get rows where( :X == xMin & :Y == yMin ))[1]];
botRight = dtLookup:V[(dtLookup << get rows where( :X == xMax & :Y == yMin ))[1]];
topLeft = dtLookup:V[(dtLookup << get rows where( :X == xMin & :Y == yMax ))[1]];
topRight = dtLookup:V[(dtLookup << get rows where( :X == xMax & :Y == yMax ))[1]];
dtData:IV[i] = Mean( botLeft, botRight, topLeft, topRight );
);
IV fue el valor interpolado de XYV (Tabla 1) de la tabla, usando las coordenadas de la tabla XY (Tabla 2)
No entiendo cómo se te ocurre el valor de IV.¿Podrías explicar las reglas que estás utilizando?
Creo que VPTree() o Distance() podrían funcionar aquí (tal vez KDTable()), pero ¿qué haces en los empates?
No busco puntos más cercanos, sino puntos en la misma línea e interpolación después de eso, si entendí correctamente.