Avatar

Koordinatenliste mit FME ausdünnen (Geodäsie/Vermessung)

MichaeL ⌂, Bad Vilbel, Sonntag, 26. März 2017, 14:56 (vor 149 Tagen) @ Sebastian

Hi,

Ich hoffe so ist es etwas klarer geworden :-)

Okay, dann erzeug Dir doch enfach ein regelmäßiges Raster über Dein Gebiet. Für jeden Rasterpunkt suchst Du nun den dichtesten Punkt und speicherst diesen ggf. prüfst Du die Entfernung und verwirfst diese, damit kein Punkt doppelt gefunden wird. Das unten stehende Matlab/Octave Script erzeugt folgende Lösung:

[image]

Die grauen Punkte sind die Messungen (hier Zufallszahlen). Die Roten Punkte sind das Raster und die blauen Diamanten sind die Rasterpunkte nach der Ausdünnung.

Viele Grüße
Micha

clear all
close all
format long g
clc
 
data = [
   -7.7114   16.4498
  -40.5771    8.1479
    9.8524   73.9882
   -2.9076  -47.0442
   19.5949  -36.3852
   19.9888  -76.1571
   13.8531   87.9659
  -46.6396   29.1104
  -43.1194   -4.1074
  -18.0400   27.8634
    3.0864    8.9432
   15.4446   29.4623
   -9.2381    8.7772
   31.9981   44.2093
   21.8359    4.4991
   46.8649   98.7409
    3.1334  -56.2647
  -17.4854  -78.8403
  -39.4371  -78.0605
   11.0959  -87.2817
   27.8802  -19.0840
   -7.6547  -10.3254
  -40.9177  -26.8368
  -23.3529   52.7009
  -34.6343   25.5793
  -21.8995   54.3961
   -5.9915   86.5707
    2.7143   94.5482
   -4.2576  -61.5943
   37.5372  -72.2252
    1.8052   39.2533
   44.3623  -81.2360
   13.7709    5.0809
   45.7694    6.0688
  -25.9293   72.2280
   17.6122   -3.0293
  -21.0935  -21.3087
   17.1808   34.2862
   19.5140   48.2516
  -43.2007    4.0105
  -24.5210  -30.4575
  -27.5960  -70.0005
   16.7833   17.2184
   34.4392  -47.5709
  -15.5538  -91.1092
   28.0520   50.9867
   17.5332  -51.4429
  -49.3285  -11.5195
   10.2170   37.5592
  -11.3229  -28.1544
   41.5991   47.2680
  -49.8849  -21.0585
   -3.7551   36.6832
   -7.5651   40.8095
   -3.9084  -11.5389
   27.0160  -96.0845
  -17.7528  -33.8284
   28.4739  -15.1381
   -2.8643  -45.9459
  -46.4237  -60.5892
  -32.4126   64.3442
   22.1758  -14.0157
   -2.6514   77.5542
  -34.7279  -21.7634
  -15.8875   53.8229
   10.7389  -20.6417
  -30.8255   61.7028
   23.8427   51.0154
  -25.7150  -24.5209
   41.7424  -56.7962
  -23.0938   58.0814
   26.5500   89.8608
  -31.1338  -34.4869
  -21.2502   34.2529
  -40.8887  -12.2710
    7.6209   66.7001
   18.3363   53.7709
    4.6593  -66.5493
   -7.4271   72.3961
   14.4443   97.9744
   14.7618    2.8847
   17.9017   76.8562
   13.5787   17.6052
   44.5174  -69.0495
  -29.1065  -60.0274
   20.9282  -18.6090
  -26.3769   49.7411
  -38.0604   65.1168
   10.7304   57.9926
   -4.9862  -36.2952
   -4.1275    6.8128
   16.1945  -82.0099
   27.0286  -77.6589
  -14.9782  -72.7415
   16.2010   35.7305
   -8.3841   -0.9646
   34.1929  -62.0579
   33.2917   -0.9988
  -24.3559  -70.4784
   11.3461  -89.0052
];
 
plot(data(:,1), data(:,2), '.', 'Color', [0.6 0.6 0.6])
grid on
axis equal
hold on;
 
gridWidth = 25;
 
minX = min(data(:,1)) - 0.5*gridWidth;
minY = min(data(:,2)) - 0.5*gridWidth;
 
maxX = max(data(:,1));
maxY = max(data(:,2));
 
X = minX:gridWidth:maxX+gridWidth;
Y = minY:gridWidth:maxY+gridWidth;
 
myGrid = zeros(1,2);
gi = 1;
for i=1:length(X)
    xi = X(i);
    for j=1:length(Y)
        yj = Y(j);
        plot(xi, yj, '+r');
 
        dist = sqrt(sum(abs(data - kron([xi yj], ones(size(data,1),1))).^2,2)); 
        minDist = min(dist);
        if minDist < 0.5 * gridWidth
            myGrid(gi, :) = data(dist == minDist,:);
            gi = gi + 1;
        end
    end
end
 
plot(myGrid(:,1), myGrid(:,2), 'db')

--
freie Tools zur Netzausgleichung, Transformation und Formanalyse


gesamter Thread:

 RSS-Feed dieser Diskussion