Ich habe zwei Datentabellen mit Werten, die räumlich zugeordnet sind, aber die Koordinaten einer Tabelle sind nicht dieselben wie die der zweiten. Ich möchte diese Tabellen „verbinden“, aber die Daten müssen nach Koordinaten übereinstimmen, damit ich die räumlich unterschiedlichen Werte zwischen den beiden Tabellen vergleichen kann.
Weiß jemand, ob es eine einfache Möglichkeit gibt, dies zu tun, anstatt einfach jeden Wert mit roher Gewalt zu berechnen? Es scheint einige interessante Matrixfunktionen zu geben, aber ich bin mit den mathematischen Konzepten dahinter nicht vertraut.
Ich habe ein Modell des unten gezeigten Prozesses, das hoffentlich vermittelt, was ich erreichen möchte.
Mehr sehen... Wenn die Polygon-Layout-Datentabelle regelmäßig und vollständig ist

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 war der interpolierte Wert von XYV (Tabelle 1) aus der Tabelle unter Verwendung der Koordinaten aus der XY-Tabelle (Tabelle 2).
Ich verstehe nicht, wie Sie auf den Wert für IV kommen.Könnten Sie bitte die von Ihnen verwendeten Regeln erläutern?
Ich denke, VPTree() oder Distance() könnten hier funktionieren (vielleicht KDTable()), aber was macht man bei Unentschieden?
Ich suche nicht nach den nächstgelegenen Punkten, sondern nach Punkten in derselben Linie und interpoliere danach, wenn ich das richtig verstanden habe.