0

米国の地図をプロットする次のコードを mathworks から取得しました。

 figure; ax = usamap('conus');
    states = shaperead('usastatelo', 'UseGeoCoords', true,...
      'Selector',...
      {@(name) ~any(strcmp(name,{'Alaska','Hawaii'})), 'Name'});
    faceColors = makesymbolspec('Polygon',...
        {'INDEX', [1 numel(states)], 'FaceColor', ... 
        polcmap(numel(states))}); %NOTE - colors are random
    geoshow(ax, states, 'DisplayType', 'polygon', ...
       'SymbolSpec', faceColors)
    framem off; gridm off; mlabel off; plabel off

誰かが親切に次のことを手伝ってくれれば幸いです: 米国に分布する確率分布 (今のところ指数関数としますが、他の分布に合わせて変更できます) に従って 1000 ポイントをプロットしたいと思います。これらのクラスタ ポイントは、背景色と区別でき、十分な大きさである必要があります。さらに、他の計算のために、これらのポイントの座標 1000 ポイント "(x,y)" を取得できるようにしたいと考えています。これに関して何か助けていただければ幸いです。また、米国のコードをより効率的にして、カナダのケベック州を含めることができれば、それも非常にありがたいです。ありがとうございました!

4

1 に答える 1

0

まず、一連のランダムな座標を作成する必要があります。座標はマップの範囲 (境界) 内にある必要があることに注意してください。x 方向の範囲が [xmin xmax] で、y 方向の範囲が [ymin ymax] であるとします。

マップから最小値と最大値を抽出する必要があります。これは私が抽出したものです。1-貧弱な画像を使用する場合:

xmax = 2.354e6;
ymax = 5.478e6;
xmin = -1.984e6;
ymin = 2.674e6;

2- マップを使用する場合:

 v=[];
 allLat=[v states(:).LabelLat];
 allLon=[v states(:).LabelLon];
 xmin = min(allLon);
 xmax = max(allLon);
 ymin = min(allLat);
 ymax = max(allLat);

次に、区間[a、b]の一様分布から値を生成する必要があります。一般的な形式は次のとおりです。

% r = a + (b-a).*rand(100,1); % don't need to run this line

また、次のコマンドを使用して、ランダムに分散された 1000 個のポイントを作成できます。

X = xmin + (xmax-xmin).*rand(1000,1);
Y = ymin + (ymax-ymin).*rand(1000,1);

これで、ランダムに作成された点ができました。次に、簡単な部分は点をプロットすることです。その前に、ポイントが特定のマップ内にあることを確認する必要があります。

function v = checkPoint(x,y) 
b = zeros(size(landareas));
for i = 1:max(size(landareas))
    if x >= landareas(i).BoundingBox(1,1) && x <= landareas(i).BoundingBox(2,1) && y >=       landareas(i).BoundingBox(1,2) && y <= landareas(i).BoundingBox(2,2) 
    b(i) = 1;
end
end
v = ~isempty(find(b==1)) 

(ただし、上記の機能は最適化されていません)

したがって、「checkPoint」関数を使用してポイントをチェックし、戻り値が v = 1 の場合はポイントをプロットします。それ以外の場合はポイントを無視します。以下のコマンドを使用できるようになりました。

plot(X,Y,'oy','MarkerSize',10)

また、後で計算に X および Y ベクトルを使用することもできます。

最後に、次のコードを使用して、世界の好きな場所をプロットできます。

worldmap({'Canada','Usa'})
land = shaperead('landareas.shp', 'UseGeoCoords', true);
geoshow(land, 'FaceColor', [0.15 0.5 0.15])
cities = shaperead('worldcities', 'UseGeoCoords', true);
geoshow(cities, 'Marker', '.', 'Color', 'red')
于 2013-06-08T18:09:46.173 に答える