How to calculate the points of a line which lies inside polygons?

1 ビュー (過去 30 日間)
pietro
pietro 2019 年 4 月 3 日
コメント済み: pietro 2019 年 4 月 4 日
Hi all,
I have GPS coordinates of an off-road vehicle and I have to check when the vehicle lies on a road or on a field. I have downloaded the shape file of my region, where there are the bounding box of each field. Below, you will find my code, that is very slow because in the shape file there are around 3e5 polygons. How could I speed up the code? In my opinion, the calculation could be speeded up, if I can avoud the inner for, but I do not know how can I do it.
for i=1:length(GPSData)
OnField{i}=zeros(size(GPSData(i).Longitude));
for iS=1:length(FieldUseSHP)
a=inpolygon(GPSData(i).Longitude*pi/180,GPSData(i).Latitude*pi/180,FieldUseSHP(iS).Lon,FieldUseSHP(iS).Lat);
if any(a)==1
OnField{i}=iS.*a;
end
end
end
Thank you in advance
Best regards,
Pietro
  4 件のコメント
pietro
pietro 2019 年 4 月 4 日
Hi,
I have several GPS vehicle data, each is an acquisition and the first for loops through all the acquisitions. The other for loops through all the polygons of field plot contours.
In the plot I have shown only two field countours, that are the closest to the chosen acquisition.
Cheers
Pietro

サインインしてコメントする。

回答 (1 件)

Matt J
Matt J 2019 年 4 月 3 日
fconv=@(z) z(:).';
Longitude=cell2mat( cellfun( fconv, {GPSData.Longitude},'uni',0) )*pi/180;
Latitude=cell2mat( cellfun( fconv, {GPSData.Latitude},'uni',0) )*pi/180;
Onfield=cell(1,length(FieldUseSHP));
for iS=1:length(FieldUseSHP)
a=inpolygon(Longitude, Latitude,FieldUseSHP(iS).Lon,FieldUseSHP(iS).Lat);
OnField{iS}=iS.*a;
end

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by