ベクターデータの座標変換・計測
アクセスしたベクターデータに対し、面積や距離を計算します。また、投影法の変換方法を学びます。
Menu
面積の計算
ここで使うデータは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
教材の利用に関するアンケート
本プロジェクトでは、教材の改良を目的とした任意アンケートを実施しています。ご協力いただける方は、アンケートにお進みください。ご協力のほどよろしくお願いいたします。※ 本アンケートの成果は、教材の改良のほか、学会での発表等の研究目的でも利用します。