如何在不使用for循环的情况下在MATLAB中使用inpolygon函数?

如何在不使用for循环的情况下在MATLAB中使用inpolygon函数?,matlab,for-loop,latitude-longitude,point-in-polygon,Matlab,For Loop,Latitude Longitude,Point In Polygon,我有一组点的坐标(x=lon_点,y=lat_点)。我只想检查这些点是否位于一组0.5x0.5网格框的外部或内部/之上,其中心坐标由(x=lon\u gridbox,y=lat\u gridbox)指定 我当前在for循环中运行的代码如下所示。尽管我对大量的网格框执行此操作,但为了便于表示,我在这里仅提供有限数量网格框的代码 我想在不使用for循环的情况下执行此操作。原因是我实际操作的大量网格盒需要花费很多时间。 有人能建议一种通过避免for循环以更快的方式执行此操作的方法吗 lat_point

我有一组点的坐标(x=lon_点,y=lat_点)。我只想检查这些点是否位于一组0.5x0.5网格框的外部或内部/之上,其中心坐标由(x=lon\u gridbox,y=lat\u gridbox)指定

我当前在for循环中运行的代码如下所示。尽管我对大量的网格框执行此操作,但为了便于表示,我在这里仅提供有限数量网格框的代码

我想在不使用for循环的情况下执行此操作。原因是我实际操作的大量网格盒需要花费很多时间。 有人能建议一种通过避免for循环以更快的方式执行此操作的方法吗

lat_points=[45.40927;45.40961;45.40995;45.41029;45.41063;45.41097;45.41131;45.41165];%点的y坐标
lon_点=[-50.00022;-50.05021;-50.10021;-50.15020;-50.20019;-50.25019;-50.30018;-50.35018];%点的x坐标
lon_网格盒=[-84;-84;-84;-83.5;-83.5;-83.5;-83.5;-83.5;-83.5;-83;-83;-83;-83;-83;-83;-82.5];%每个0.5x0.5网格框中心的x坐标
横向网格框=[27;27.5;28;26.5;27;27.5;28;28.5;26.5;27;27.5;28;28.5;29;26.5];%每个0.5x0.5网格框中心的y坐标
xv=[lon_网格盒(:,1)-0.25,lon_网格盒(:,1)+0.25,lon_网格盒(:,1)+0.25,lon_网格盒(:,1)-0.25,lon_网格盒(:,1)-0.25];%每个0.5x0.5网格框的顶点的x坐标
yv=[lat_gridbox(:,1)-0.25,lat_gridbox(:,1)-0.25,lat_gridbox(:,1)+0.25,lat_gridbox(:,1)+0.25,lat_gridbox(:,1)-0.25];%每个0.5x0.5网格框顶点的y坐标
int=[];
对于n=1:长度(横向网格框(:,1))
[on-in]=inpolygon(lat_点(:,1),lon_点(:,1),xv(n,:),yv(n,:);%检查点是否位于由顶点xv和yv定义的网格框的外部或内部/上。
int=[int;[lon_gridbox(n,1),lat_gridbox(n,1),in',on']];
结束

您的代码不是因为循环而变慢,而是因为
inpolygon
,这很昂贵。您不需要在多边形中检查点是否在框内。您要检查纬度是否在框中心的0.5范围内,经度是否在框中心的0.5范围内。这是一张微不足道的支票。没错。我会申请的。非常感谢。