2013-12-06 3 views
1

У меня есть набор данных, которые необходимо упорядочить по разделам, основываясь на том, где были собраны данные. Есть 5 разделов, на которые могут попасть данные, поэтому мне нужно разделить данные на эти пять разделов на основе их широты и долготы. Как мне это сделать?Отдельные данные на основе широты и долготы matlab

Вот пример. Первые несколько столбцов содержат информацию о плавании, 5-й столбец содержит широту, на которой собирались данные, а шестой - долгота. Следующие столбцы содержат информацию о времени сбора и результатах сбора данных.

2, NaN 83, NaN -62,18, -36,59, 1983, 318, 0, 0,1, NaN 0,28, 6, 1,06, 0,66, 0,41, 0,29, 0,26, 0,30, 0,39, 0,49 , 0,60, 0,67, 0,68, 0,64, 0,56, 0,45, 0,36, 0,28, 0,22, 0,18, 0,15, 0,13, 0,11, 0,10, 0,09, 0,07

+1

Некоторые примеры данных и ожидаемый результат будет полезным. – Marcin

+0

трудно показать образец данных, так как это матрица 890 на 37. Первые несколько столбцов содержат информацию о плавании, 5-й столбец содержит широту, на которой собирались данные, а шестой - долгота. Следующие столбцы содержат информацию о времени сбора и результатах сбора данных. Упрощенный пример одной строки будет: 2, NaN 83, NaN -62,18, -36,59, 1983, 318, 0, 0,1, NaN 0,28, \t 6, 1,06, 0,66, 0,41, 0,29, 0,26, 0,30, 0,39, 0,49, 0,60, 0,67, 0,68, 0,64, \t 0,56, 0,45, 0,36, 0,28, 0,22, 0,18, 0,15, 0,13, 0,11, 0,10, 0,09, 0,07 Благодаря, – user2877623

+0

Как эти Определены области? Полигоны? Мин/Макс. Долгота/широта? Круги? – Daniel

ответ

0

Вы можете использовать csvread как данные только числовым. И доступ к lat/lon стандартным индексированием столбцов.

M = csvread(filename); 
lat = M(:,5); 
lon = M(:,6); 

Затем выберите индексы, соответствующие вашим критериям и извлекать данные

% a N x 4 matrix, N lines for the number of groups, and 4 columns for min(lat) max(lat) min(lon) max(lon) 
lat_lon_values = [10 20 50 80; 
    20 30 50 80; 
    50 70 10 60]; 

for ind_group = 1:size(lat_lon_values, 1) 

    a = lat_lon_values(ind_group, 1); %min(lat) 
    b = lat_lon_values(ind_group, 2); %max(lat) 
    c = lat_lon_values(ind_group, 3); %min(lon) 
    d = lat_lon_values(ind_group, 4); %max(lon) 

    %select the indexes based on lat and lon values 
    ind_line = M(5,:)>= a & M(5,:)<= b & M(6,:)>= c & M(6,:)<= d; 

    %your selected data 
    M(ind_line, :) 

end 
+0

Спасибо за помощь. Я довольно новичок в Matlab и не уверен, как можно использовать индексирование столбцов для этого? Файл уже является матрицей в matlab и не нуждается в чтении в данных, которые нужно просто сгруппировать в зависимости от того, где они были собраны. – user2877623

+0

См. Редактирование. Предлагаемое решение использует цикл 'for', который проходит критерии и выбирает данные. – marsei

+0

Спасибо, только одна последняя проблема. Мои данные не упорядочены так, что с положительными и отрицательными значениями (в зависимости от восточного или западного, северного или южного), и поэтому минимальный и максимальный значения могут идти от положительного к отрицательному, т. Е. Область начинается с 160 и работает до -130. Как мне объяснить эту проблему? – user2877623

Смежные вопросы