YouTube | Facebook | X(Twitter) | RSS

フィーチャクラスの作成

2016/9/1 (木)

# coding: utf-8
 
'''
pythonでフィーチャクラスを作成するテスト
'''
 
import os, sys, arcgisscripting
import math
 
 
def Usage():
    print u'%(exe)s ワークスペース名 入力CSVファイル名 出力シェープファイル名' % { 'exe' : (os.path.basename(sys.argv[0])) }
 
def NmeaXy2Deg(val):
    '''
    60進数*100の文字列を度に変換する
    '''
    x = float(val)
    x *= 100
    ary = math.modf(x)
    val = ary[1] + (ary[0] / 60.0)
    return val
 
 
def NMEA_X2Deg(xText, zoneText):
    '''
    NMEAの経度表示を10進数の度に変換する
    '''
    val = NmeaXy2Deg(xText)
     
    if zoneText == 'W':
        val *= -1
     
    return val
     
     
def NMEA_Y2Deg(yText, zoneText):
    '''
    NMEAの緯度表示を10進数の度に変換する
    '''
    val = NmeaXy2Deg(yText)
 
    if zoneText == 'E':
        val *= -1
 
    return val
 
 
if len(sys.argv) != 4:
    Usage()
    exit(-1)
 
workspace = sys.argv[1]
inFilename = sys.argv[2]
outFilename = sys.argv[3]
 
gp = arcgisscripting.create()
gp.Overwriteoutput = 1
 
# フィーチャクラスの作成
gp.CreateFeatureclass(workspace, outFilename, "POINT")
 
gp.workspace = workspace
gp.toolbox = "management"
 
# 入力CSVファイルを開く
f = open(os.path.join(workspace, inFilename), 'r')
 
# レコード追加カーソル作成
insertCursor = gp.InsertCursor(os.path.join(workspace, outFilename))
 
# ポイントクラス作成
point = gp.CreateObject('Point')
 
for line in f:
    nmeaElement = line.split(',')
    if len(nmeaElement) == 12:
        if nmeaElement[0] == '$GPRMC':
            point.x = NMEA_X2Deg(nmeaElement[5], nmeaElement[6])
            point.y = NMEA_Y2Deg(nmeaElement[3], nmeaElement[4])
            feature = insertCursor.NewRow()
            feature.shape = point
            insertCursor.InsertRow(feature)
 
del feature, insertCursor
f.close()
  • この記事を書いた人

羽田 康祐

伊達と酔狂のGISエンジニア。GIS上級技術者、Esri認定インストラクター、CompTIA CTT+ Classroom Trainer、潜水士、PADIダイブマスター、四アマ。WordPress は 2.1 からのユーザーで歴だけは長い。 代表著書『"地図リテラシー入門―地図の正しい読み方・描き方がわかる』 GIS を使った自己紹介はこちら。ESRIジャパン(株)所属、元青山学院大学非常勤講師を兼務。日本地図学会第31期常任委員。発言は個人の見解です。

-プログラミング, ArcGIS
-