なめらかなポリゴンの頂点を達成するために大規模な並列処理

        、を利用することができる改善され、実際には、多くの優れたアルゴリズムがある主Chaikin曲線アルゴリズムに、最近の研究では、ベクトルスポット抽出(SHP形式)を平滑化する必要があるので、私は少し研究のためにここにいました時間を強制的に、それはで深い続けていませんでした、

インクルードを開始する権利このブログは、本当に自分の本当の良いアルゴリズムを示すことができ、「同志」のアルゴリズムを、スムージング従事したいと思います。私たちは、何百、何千、にポリゴンの数はおそらく、CPUのシリアルおよびパラレルコンピューティングが効率ギャップでないときことを知っているが、その数は1兆数ヶ月、数十万人、それの何百万人を超えたとき?

死ぬことを明らかシリアルので、私は、並列ベクトル平滑化アルゴリズムを探求するためにここにいます。私は、あなたが質問を持っているか、コードを理解する必要がある場合は、オープンソースコードの裏にあった、QQ:1044625113、備考:ベクトル並列処理を

       I 120個の000ポリゴン、計算効率の比較は、次の表を計算します。

コンピューティングモデル 計算時間(秒)
シリアル 70 
パラレル(クワッド)  20

       ああ、全3回のために保存し、兄弟、これは素晴らしかったです!

 

 

オリジナルのスポットを描くベクトル

図平滑化ベクトルパッチ

    以下のベクターは、スムーズなメインの機能コードを貼り付けます。

% chaikin-curve ????????????????
% written by Mr zhipan Wang,Email:[email protected],BeiJing,2019-10-21
% refer:https://www.cnblogs.com/hongru/archive/2011/10/27/2226946.html

clear
tic

%% read shape file
ShpFileName = '????????????.shp';
[shp,attribute] = shaperead(ShpFileName);

Scale = 3;                                        % ??????????????????
Iter = 6;                                         % ????????????????

% figure,mapshow(shp),title('original shapefile!')


%% curve smooth
numPolygon = length(shp);

STR = 'struct(''Geometry'',values ,''X'', values,''Y'', values,''ID'',values)';
values = cell(numPolygon, 1);                     % ????????帳??????,??????????????????????????????????,????????????????dbf??????,??????????????????????
newSHP = eval(STR);

parfor i = 1:numPolygon                           % ??????????????
    
    Latitude_arrary = shp(i).Y;
    Longitude_array = shp(i).X;
    
    [Smooth_Lati, Smooth_Longi] = ChaikinCurve_Smooth(Latitude_arrary, Longitude_array, Scale, Iter);
    
    newSHP(i).X = Smooth_Longi;
    newSHP(i).Y = Smooth_Lati;
    newSHP(i).ID = i-1;
    newSHP(i).Geometry = 'Polygon';
    
    
    fprintf(['??????????',num2str(numPolygon),'??????????????, ','????', num2str(i), '??????????????????????????...\n']);
    
end
clear shp

% figure,mapshow(newSHP),title('smooth shpfile!')     % ????????????ν??????????????????????,????????????????????????????????


%% export shape file
shapewrite(newSHP,'smoothSHP.shp');


toc

  贴上实现的函数代码:

      

function [Smooth_Lati, Smooth_Longi] = ChaikinCurve_Smooth(Latitude_arrary, Longitude_array, Scale, Iter)
% CK 曲线平滑算法的核心实现, Email:[email protected],BeiJing,2019-10-21!
% Latitude_arrary: 纬度数组
% Longitude_array: 经度数组
% Scale: 尺度参数, 正整数
% Iter: 迭代次数,一般四次即可!

if length(Latitude_arrary) ~= length(Longitude_array)
    
    fprintf('数组大小不一致...\n');
    return;
    
end

if Scale < 1
    
    fprintf('尺度参数应该大于1...\n');
    return;
    
end


% 迭代实现
for i = 1:Iter
    
    [Latitude_arrary, Longitude_array] = addPoint(Latitude_arrary, Longitude_array, Scale);
    
end

Smooth_Lati = Latitude_arrary;
Smooth_Longi = Longitude_array;

end

  总的来说,只需要设置迭代次数就可以了,平滑度参数默认3即可,迭代次数设置成3-6次基本上够用了,先写到这里吧

 

 

おすすめ

転載: www.cnblogs.com/wzp-749195/p/11717955.html