# 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()
記事
