Как объединить географические данные и вывести точки данных, включенные в каждую ячейку в Matlab
Я использую Matlab для обработки сейсмических данных, каждый из которых предполагает, что соответствует определенной географической точке (известная широта, долгота). Одна из целей состоит в том, чтобы сгруппировать точки на поверхности Земли, которые охватываются ячейками определенного радиуса (например, r=10 градусов). Неважно, если бункеры перекрываются. Я использовал histr()
Встроенная функция Matlab, но она выводит центральные координаты (широта, долгота) результирующих бинов и количество точек данных, включенных в бин. Тем не менее, я также хотел бы пометить точки данных и иметь возможность использовать эти помеченные точки данных при последующей обработке. Что я использовал:
lt1=load('midlats.dat');
lg1=load('midlons.dat');
len_lt=length(lt1);
len_lg=length(lg1);
nb=1;
[clats,clons,num,wnum] = histr(lt1,lg1,nb);
В котором nb определяет, сколько лотков вам нужно на угловой градус.
Это где-то близко к моей цели, или я полностью скучаю по картинке??? Кто-нибудь сталкивался с чем-то похожим? Любая помощь / комментарии будут высоко оценены.
1 ответ
Вот мысль - вам нужно определить вектор ребер бина (либо одинаковые для обоих, либо разные), см. Справку для histc
:
[nlt, i_lt] = histc(lt1,b_vec1);
[nlg, i_lg] = histc(lg1,b_vec2);
Теперь читерство - используй sub2ind
преобразовать i_lt
а также i_lg
, индексы, в которых находятся ячейки широты и долготы ваших данных, в один индекс.
sz = [length(i_lt),length(i_lg)];
ind = sub2ind(sz,i_lt,i_lg);
Любые очки с одинаковыми ind
находятся в одном и том же лотке. Затем вы можете выбрать их, проиндексировав ind
например lg1(ind==1)
и так далее.