VBA(Excel)でポリゴンの重心位置を求めてみます


なんでこんなものが必要なのかというと….。

複数の図形を地図上に置いた場合、地図の初期位置を決める場合や、

ポリゴンの座標列の向きを判定するのに、この中の面積計算の符号が判定用の指標に使えるからです(^^)。

それに、不思議だけど、探してもVBA関連にはこの手の関数やライブラリがほとんど無いみたい。

で、作ってみました。

Excelで使うポリゴン・サークルのデータファイルはこのページで作成します。

ポリゴン・ポリライン

サークル

 


Excelブック

例えばこんな感じ。

ポリゴン・ポリラインのページで以下のような図形を描いて、データをGeoJSONで保存しておきます。

Excelを開いて作成したデータファイルを読み込みます。

 

読込後データをセットして、即重心計算を開始します。

途中でデータ列が右手系(反時計回り)か左手系(時計回り)かを判定。

 

計算終了後、Xg、Ygに重心位置を表示。

Xgが経度、Ygが緯度です。

地図で確認。

青丸の中の十字がこのポリゴンの重心位置です。

 


点群の重心

(X1,Y1),(X2,Y2),(X3,Y3),………………………….,(Xn,Yn)

各点が均等な重みを持つ場合

Xg = (X1 + X2 + X3 + …………………………… + Xn) /n

Yg = (Y1 + Y2 + Y3 + …………………………… + Yn) /n

 

各点の重みが異なる場合

wiは各点の重みの度合(例:代表点の人口密度などを標準化したもの)

$$\begin{align} X_g = \displaystyle \sum_{ i = 1 }^{ n } X_i \times W_i \times cos(Y_i) / \displaystyle \sum_{ i = 1 }^{ n } W_i \times cos(Y_i) \\ Y_g = \displaystyle \sum_{ i = 1 }^{ n } (Y_i \times W_i) / \displaystyle \sum_{ i = 1 }^{ n } W_i  \hspace{ 83pt } \end{align}$$

 

 


 

Be the first to comment

Leave a Reply

Your email address will not be published.


*