我有一个包含不同类型数据的数据集,如下所示
MMSI Latitude Longitude Date Time Time (decimal)
277333444 59.8564 30.497 04-08-12 09:49 589
241025000 37.3462 24.8713 04-08-12 09:49 589
636012774 35.7931 28.7227 04-08-12 11:29 680
248681000 36.9327 27.3042 04-08-12 11:52 703
312847000 35.3429 28.5582 04-08-12 11:52 703
239737000 36.4827 27.9405 04-08-12 11:52 703
200 36.7672 34.6444 04-08-12 12:52 763
237071900 36.7778 24.578 04-08-12 12:52 763
并从csv文件导入数据。在样本数据中,时间被排序,但在数据中,时间是混合的。对于数据,我想计算两个不同点之间的距离,并得出所涉及的MMSI以及时间。我编写了以下代码,几乎完成了我所描述的内容。
fid = fopen('vessel-movements-2.csv');
C = textscan(fid, '%f %f %f %f %f %s %s %s %f', 'HeaderLines', 1, 'Delimiter', ',');
fclose(fid);
iscell(C);
M = cell2mat(C(:,1:5));
DateString = (C{1,7});
formatIn = 'dd-mm-yy';
P = datenum(DateString, formatIn);
M = horzcat(M,P);
Q = cell2mat(C(:,9));
M = horzcat(M,Q);
a = M(:,6);
b=unique( a );
c = M(:,1);
d = unique(c);
lat = M(:,2);
lon = M(:,3);
time = M(:,7);
TimeStamp = P+time;
M = horzcat(M,TimeStamp);
MM = sortrows(M,8);
all(M(:,8) == MM(:,8))
for i = 1:length(MM(:,8))
t = MM(i,8);
ind1 = i;
length(ind1);
lat1 = lat(ind1);
lon1 = lon(ind1);
while (t <= (MM(i,8)+5))
for j = 2:length(d)
ind2 = j;
length(ind2);
lat2 = lat(ind2);
lon2 = lon(ind2);
w = MM(j,8);
end
dis = distance(lat1, lon1, lat2, lon2);
t = t+1;
end
if dis<=1
contact = [ind1, ind2, t, w];
end
end
脚本中的索引与显示的数据中的索引略有不同,但我的数据中还有其他列,这些列未在循环中使用,因此为了更好的可视化,我将它们从示例中删除。它正确地计算了第一次的距离,但是在外循环中程序似乎滞后并且永远运行但没有任何结果。我尝试了调试器但结果是一样的。我看不出问题,任何帮助都会受到赞赏。
答案 0 :(得分:0)
这不是答案,而是格式化的评论。我只想指出你的循环非常奇怪且功能失调。您当前版本中的内容实际上是这样的:
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="icon" href="img/icon.png">
<title>LaBera</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="includes/bootstrap-3.3.5-dist/css/bootstrap.min.css">
<script type="text/javascript" src="includes/jquery-1.11.3.js"></script>
<script src="includes/bootstrap-3.3.5-dist/js/bootstrap.min.js"></script>
<style>
html {
height: 100%;
position: relative;
}
body {
background-image: url("img/pattern-small.png");
background-repeat: repeat-x-y;
height: 100%;
overflow: hidden;
position: relative;
}
.centerimg {
position: absolute;
top: 50%;
left: 50%;
transform: translateX(-50%) translateY(-50%);
}
</style>
</head>
<body>
<div class="container ">
<div class="centerimg">
<img src="img/logo1300.gif" class="img-responsive" alt="Logo" width="241px" height="400px">
</div>
</div>
<footer class="footer navbar-fixed-bottom">
<img src="img/footerNoShadow.gif" class="img-responsive" alt="Footer" height="66px">
</footer>
</body>
</html>