MATLAB XYZ в сетку - PullRequest
       37

MATLAB XYZ в сетку

2 голосов
/ 24 ноября 2011

У меня есть XYZ-файл, разделенный табуляцией, который содержит 3 столбца, например,

   586231.8       2525785.4           15.11
   586215.1       2525785.8            14.6
   586164.7         2525941           14.58
   586199.4       2525857.8           15.22
   586219.8         2525731            14.6
   586242.2       2525829.2           14.41

Столбцы 1 и 2 - это координаты X и Y (в метрах UTM), а столбец 3 - это соответствующее значение Z наточка X, Y;например, высота (z) в точке задана как z(x,y)

Я могу прочитать в этом файле, используя dlmread(), чтобы получить 3 переменные в рабочей области, например, X = 41322x1 double, но я хотел бы создатьповерхность размером (m x n) с использованием этих переменных.Как мне поступить об этом?

Исходя из комментариев ниже, я попытался использовать TriScatteredInterp (см. Команды ниже).Я продолжаю получать результат, показанный ниже (хотя, похоже, он получает часть моей поверхности): enter image description here

Есть идеи, что вызывает этот результат?Я думаю, что проблема заключается в команде meshgrid, хотя я не уверен, где (или почему).В настоящее время я добавляю следующий набор команд для вычисления приведенного выше числа (мои столбцы X и Y указаны в метрах, и я знаю, что размер моей сетки равен 8 м, следовательно, ti / tj повышается за 8 с):

F = TriScatteredInterp(x,y,z,'nearest');
ti = ((min(x)):8:(max(x)));
tj = ((min(y)):8:(max(y)));
[qx,qy] = meshgrid(ti,tj);
qz = F(qx,qy);
imagesc(qz) %produces the above figure^

Ответы [ 3 ]

3 голосов
/ 24 ноября 2011

Я думаю, вам нужна функция griddata.См. Интерполяция рассеянных данных в справке MATLAB.

1 голос
/ 06 марта 2014

Griddata и tirscattteredinterp очень медленные.Используйте функцию utm2deg при обмене файлами и оттуда комбинацию обоих vec2mtx, чтобы создать регулярную сетку, а затем вставьте ее, чтобы подогнать данные к сетке.IE

for i = 1:length(X)
[Lat,Lon ] = utm2deg(Easting ,Northing ,Zone);
end 

[Grid, R] = vec2mtx(Lat, Lon, gridsize);
Grid= imbedm(Lat, Lon,z, Grid, R);
0 голосов
/ 24 ноября 2011

Возможно, вы ищете функцию "ndgrid (x, y)" или "meshgrid (x, y)"

...