查找点matlab

时间:2016-04-07 13:35:50

标签: performance matlab coordinates

我有一个带有几个链接的shapefile,我在matlab中打开,它生成一个结构,每行包含一个Xs单元格和一个Ys单元格,如下所示:

geo(1,1).X = [X1 X2 ... Xn NaN]
geo(1,1).Y = [Y1 Y2 ... Yn NaN]

然后,我有一些由(X,Y)对(矩阵myPoints)描述的点,我想创建一个候选数组cand,它只是用布尔值描述的,表示如果距离我的一个点到随机线i的距离小于R那么cand(i)= 1。当然if cand(i)== 1然后geo(i,1)是候选线。

下图中显示了一个说明性示例。如图所示,L2可以被视为具有坐标(x0,y0)

的点的候选线

Example

为了定义这个数组(或者在多个点的情况下使用矩阵),我所做的是使用polyxpoly函数,并检查每一行与圆的交点。

ii=zeros(size(Geo,1),size(myPoints,1))';
for i =1:size(myPoints,1)
    [latc, lonc] = scircle1(myPoints(i,1), myPoints(i,2), km2deg(rad));

   parfor j = 1:size(Geo,1)
        [~, ~, index] = polyxpoly(lonc, latc, ...
            Geo(j,1).X', Geo(j,1).Y');
        if isempty(index)~=1
            ii(i,j) =1;
        end
    end
end

然而,即使使用parfor循环也需要花费太多时间; 200分和94线约9秒,这对于这个候选链路阵列来说太多了,因为我需要将这个应用于数千个点(每15分钟约5000个点)和数千个线路(160,000个线路) )。

有什么想法可以让我加快速度吗?

欢迎其他功能或方法。

由于

0 个答案:

没有答案