我发现各自的纬度和经度点从一个excel文件,我想出口的数据满足限制lat和长(匹配行)。

1视图(30天)
我后天添加这个“历史性”运输数据,每天在哪里保存为一个excel文件。我附上了这个调查的文件的一个示例。我不能把昔日的——它太大。我结合全年所有擅长到一个文件夹中。这是代码的一部分,我希望它的方法:
rootdir =“2018年F: \ shipping_data \”;
%得到所有直属xlsx文件的目录信息
% rootdir(这符合你的情况的描述):
文件列表= dir (rootdir);
%这样做如果你想要得到信息xlsx所有文件
%提取条件时我希望纬度/经度max
%和最小点,分别。
latLim = (29.5, 26);
lonLim = (-87、-90);
%读取每个文件,存储结果:
2 = 3:元素个数(文件列表)
%我现在告诉matlab哪些文件来读。
%我从2开始,因为我不想让它读头减轻混乱
data = readcell (fullfile(文件列表(ii) .folder,文件列表(ii) . name),
“范围”,“B2: K39”);
从本质上讲,我的理解,我做空的实际长度范围,数量的行,我想确保代码能够工作在我等待它运行。我已经设置了经度和纬度限制我希望削减。
我得到,我可以要求matlab让我知道这行satatisfy数据:
%这里我告诉matlab哪里我想要寻找这些限制
%我ultize cell2mat一样我的数据只能读一个细胞结构和它与下面的命令不起作用
为我的excel表lat %。在第2列
idxLat =找到(cell2mat(数据(:,2))> = latLim (2) & cell2mat(数据(:,2))< = latLim (1))
为我的excel表长%。在第三列
idxLong =找到(cell2mat(数据(:,3))> = lonLim (2) & cell2mat(数据(:,3))< = lonLim (1));
什么我需要做的就是把它把所有的数据满足idxLat和idxLong为了得到这个特定区域的船舶数据点发现在墨西哥湾。
我试着这样的代码:
%我使用这个尝试,看看我可以结合积极……
idxMatch = (find (cell2mat(数据(:,2))> = latLim (2) & cell2mat(数据(:,2))< = latLim(1))) &(找到(cell2mat(数据(:,3))> = lonLim (2) & cell2mat(数据(:,3))< = lonLim (1)));
%错误:错误使用&矩阵维度必须一致。
%发现这个从另一个答案,似乎工作……没有错误
如果所有(idxLat) & & (idxLat)
disp (这个区域的);
结束
%但是我不知道如果是给我我想要的答案——它只显示这个地区所说的我问
谢谢你!

答案(1)

dpb
dpb 2022年5月16日
难度比需要——首先,使用 readtable 而不是readcell ()……
麻将= readtable (“AIS_2018_05_18_ex.csv”,“范围”,B: K的);
tAIS.BaseDateTime = datetime (tAIS.BaseDateTime,“InputFormat”,“uuuu-MM-dd 'HH: mm: ss”);
示例文件的结果
> >头(麻将)
ans =
8×10个表
BaseDateTime纬度SOG齿轮标题VesselName国际海事组织呼号VesselType
_________________________________________________________________________是__________________________________
18 - 511年5月- 2018就是60.086 - -149.35 0 -187.1 {“路易斯•安德森”}{“IMO7203015”}{“WDD9476”}30
18 - 511年5月- 2018年00:00:01 29.815 - -93.959 0 126 {“百乐宫”}{0×0字符}{“WDA9457”}60
18 - 511年5月- 2018年00:00:01 33.206 - -117.39 0 -49.6 {“海边95”}{0×0字符}{“WDJ6255”}60
18 - 511年5月- 2018年00:00:02 29.913 -81.275 0.1 -144 {“大草原”}{0×0字符}{0×0字符}90
18 - 127年5月- 2018年00:00:03 39.892 - -75.192 0 -128.1 {“阳光海岸”}{“IMO8994453”}{“WTM3609”31}
18 - 511年5月- 2018年00:00:05 40.705 -73.973 0.2 0 {“威廉·M FEEHAN”}{0×0字符}{“WDH9474”}南
18 - 511年5月- 2018年00:00:05 48.511 - -122.64 0 -65.2 {“海洋女佣”}{“IMO7307550”}{“WDE8215”}30
18 - 511年5月- 2018年00:00:05 46.732 - -92.072 0 -129.6 {去过阿尔皮纳”的}{“IMO5206362”}{“WAV4647”70年}
> >
在这一点上我可能继续使用 table2timetable 把它变成一个时间表,而不是因为你毫无疑问会想搜索在时间和时间表已经装入的特性来促进。
然后,回到你想要的纬度、经度值,简单
麻将iswithin (tAIS.LAT latLim (1) latLim (2) &iswithin (tAIS.LON, lonLim (1) lonLim (2)),:);
在哪里 iswithin 是我的小效用函数,使得编写条件表达式更清晰的用户级——
函数flg = iswithin (x,嗨)
%返回T值范围内的输入
%的语法:
%(日志)= iswithin (x, lo,嗨)
%返回T x lo和hi值之间,包容性
flg = (x > = lo) & (x < =你好);
> >
我写它期待三个输入;从来没有去修理它了一个数组;这将是一个相当容易提高。
示例文件是空的,特定的坐标;但
> >麻将(iswithin (tAIS.LAT, 27.5, 32.5) &iswithin (tAIS.LON、-105、-95):)
ans =
4×10个表
BaseDateTime纬度SOG齿轮标题VesselName国际海事组织呼号VesselType
_____________________________________________________________________________________________
18 - 511年5月- 2018就是29.732 -95.277 5.8 168.1 {0×0字符}{0×0字符}{0×0字符}南
18 - 150年5月- 2018就是27.816 - -97.456 0 -175.4 {0×0字符}{0×0字符}{0×0字符}南
18 - 2018年5月——00:00:04 29.759 -95.118 1.9 -132.3 511 {0×0字符}{0×0字符}{0×0字符}南
18 - 2018年5月——00:00:01 {0 0 -156.9 27.838 - -97.052 511×0字符}{0×0字符}{0×0字符}南
> >
显示它是一组值的数据集…
14日的评论
dpb
dpb 2022年5月24日
没问题,很高兴帮助/一路上试图教……这是一个很常见的新手的错误/监督所以不要难过。很高兴你能够发现问题。

登录置评。

下载188bet金宝搏

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!