FAQ
[フィールド演算] でラインの角度を属性テーブルに出力したい

ナレッジ番号:2651 | 登録日:2023/05/29 | 更新日:2024/03/14

概要

フィールド演算機能を使用して、ラインの角度(方位角)を算出します。

操作手順

準備

属性テーブルに新規にフィールドを追加します。フィールドのタイプは、「Double 型」にしてください。フィールドに作成方法につきましては、以下の FAQ をご参考ください。

新規でフィールドを作成するには?

手順

  1. 作成したフィールドの名前上で右クリックし、[フィールド演算] を選択します。
  2. [フィールド演算] ダイアログの [形式] から [Python] を選択します。
  3. [フィールド演算] ダイアログの [コードブロックを表示] にチェックを入れます。
  4. [Pre-Logic Script Code] の部分に以下の Python スクリプトを入力します。

    ○始点と終点から角度を算出する場合

    import math
    def GetAzimuthPolyline(shape):
      radian = math.atan2((shape.lastpoint.y - shape.firstpoint.y),(shape.lastpoint.x - shape.firstpoint.x))
      angle = radian * 180 / math.pi #一般角
      
      if angle < 0:
        angle = 360 + angle #負の角度を正の角度に変換
      
      #一般角を方位角に変換
      azimuth =((90 - angle)+360) % 360
      return azimuth
    

    ○始点と 2 番目の頂点から角度を算出する場合

    import math
    def GetAzimuthPolyline(shape):
      nextPoint = shape.getPart(0).getObject(1)
      radian = math.atan2((nextPoint.y - shape.firstpoint.y),(nextPoint.x - shape.firstpoint.x))
      angle = radian * 180 / math.pi #一般角
       
      if angle < 0:
        angle = 360 + angle #負の角度を正の角度に変換
       
      #一般角を方位角に変換
      azimuth = ((90 - angle)+360) % 360
      return azimuth
    

    ○終点と終点の 1 つ手前の頂点から角度を算出する場合

    import math
    def GetAzimuthPolyline(shape):
      beforePoint= shape.getPart(0).getObject(shape.pointCount-2)
      radian = math.atan2((shape.lastpoint.y - beforePoint.y),(shape.lastpoint.x - beforePoint.x))
      angle = radian * 180 / math.pi #一般角
       
      if angle < 0:
        angle = 360 + angle #負の角度を正の角度に変換
       
      #一般角を方位角に変換
      azimuth = ((90 - angle)+360) % 360
      return azimuth
    
  5. 下部にある「フィールド名 = 」の箇所に、以下のコードを入力します。
    GetAzimuthPolyline(!Shape!)
    
  6. [OK] をクリックし、フィールド演算を実行します。

このサンプル コードはポリラインの頂点情報を使用して、図上の真上を 0度とする方位角を算出します。複数のセグメントで構成されているポリラインに対して始点と終点から角度を算出した場合、形状に関わらず始点と終点を結ぶ線分の角度となります。また、座標値が地理座標系の場合には、期待する方位角は求められませんのでご注意ください。
地理座標系から投影座標系に変換するには、こちらのFAQの手順を用いて [投影変換] を行ってください。
上記の処理はラインだけでなく、ポリゴンに対しても実行することができます。

メタデータ

種類

製品

バージョン