ベクターデータの座標変換・計測

アクセスしたベクターデータに対し、面積や距離を計算します。また、投影法の変換方法を学びます。

面積の計算

ここで使うデータはne_50m_admin_0_countries.shpです。QGISでレイヤを読み込んでおきましょう。データの取得方法はREADMEを参照してください。

図形を取得して、面積の計測をします。中国の図形を取得しましょう。変数geom_cリスト内は、QgsGeometryクラスです。

>>>layer = iface.activeLayer()
>>>geom_c = [f.geometry() for f in layer.getFeatures(QgsFeatureRequest().setFilterExpression('"NAME" = \'China\''))]

取得したgeom_cを確認します。

>>>geom_c
[<QgsGeometry: MultiPolygon (((118.18300781250002274 24.49628906249999716, 118.14951171875003411 24.43613281249999147, 118.09052734375001137
(以下略)

QgsGeometryクラスのarea()を使って面積を計算します。経緯度で座標を持っているため、経緯度のまま計算が行われます。

>>>geom_c[0].area()
950.9811074018482

投影変換

通常、経緯度のままで面積の計算をすることはありませんので、実距離系へ投影変換してみましょう。ここではWGS84(EPSG:4326)からWEBメルカトル(EPSG:3857)への変換します。

>>>coordwgs84 = QgsCoordinateReferenceSystem(4326)
>>>coordweb = QgsCoordinateReferenceSystem(3857)
>>>trans = QgsCoordinateTransform()
>>>trans.setSourceCrs(coordwgs84)
>>>trans.setDestinationCrs(coordweb)
>>>geom_c[0].transform(trans)
0
>>>geom_c[0].area()
14920502094783.385

図形の精度が悪いので正確な数字ではありませんが、単位は平方メートルです。

距離の計算

韓国の図形も同じように取得して、2図形の重心間の距離を求めてみましょう。 まずは中国の領域の重心点を取得します。図形の重心点はcentroid()で取得できます。

>>>center_c = geom_c[0].centroid()
>>>center_c
<QgsGeometry: Point (11593610.51544793881475925 4521632.4154491201043129)>

続いて韓国のポリゴンも取得し、重心点を取得しましょう。

>>>geom_k = [f.geometry() for f in layer.getFeatures(QgsFeatureRequest().setFilterExpression('"NAME" = \'South Korea\''))]
>>>geom_k[0].transform(trans)
0
>>>center_k = geom_k[0].centroid()
>>>center_k
<QgsGeometry: Point (14231228.16353077813982964 4356843.70478989742696285)>

中国の重心点から韓国の重心点までの距離をdistance()を使って取得します。

>>>center_c.distance(center_k)
2642760.3328033322

教材の利用に関するアンケート

 本プロジェクトでは、教材の改良を目的とした任意アンケートを実施しています。ご協力いただける方は、アンケートにお進みください。ご協力のほどよろしくお願いいたします。

※ 本アンケートの成果は、教材の改良のほか、学会での発表等の研究目的でも利用します。

results matching ""

    No results matching ""