フィーチャクラスの作成

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