# -*- coding: utf-8 -*-
import sys
import re

# 入力ファイルと出力ファイルを読み取る
args = sys.argv         # 引数取得
if (len(args) <= 2):    # 足りなかったら終了
    print ("[usage] altitude.py xml-filename output-filename")
    sys.exit()
filename=args[1]        # 入力ファイル名
ofilename=args[2]       # 出力ファイル名
skip = 1                # データ進行量(1が最低)
if len(args) >= 4:      # 進行量パラメータあれば取得
    skip = int(args[3])
    if skip < 1:
        skip = 1

# ヘッダ解析変数の初期値
lowlot=0    # 低経度
lowlat=0    # 低緯度
uplot=0     # 高経度
uplat=0     # 高緯度
width=0     # メッシュ幅
height=0    # メッシュ高さ

# 制御用変数の初期化
mode=0
linecnt = 0

# 出力ファイルの生成
csv=open(ofilename,'w')

# 入力ファイル読み込み
for line in open(filename,'r'):
    linecnt=linecnt+1
    if (mode == 0): # ヘッダ情報読み取りモード
        if 'lowerCorner>' in line:
            line=re.sub(r'</.*$',"",line)
            line=re.sub(r'^.*>',"",line)
            spline=line.split()
            lowlot=float(spline[1])
            lowlat=float(spline[0])
        if 'upperCorner>' in line:
            line=re.sub(r'</.*$',"",line)
            line=re.sub(r'^.*>',"",line)
            spline=line.split()
            uplot=float(spline[1])
            uplat=float(spline[0])
        if 'high>' in line:
            line=re.sub(r'</.*$',"",line)
            line=re.sub(r'^.*>',"",line)
            spline=line.split()
            width=int(spline[0])+1
            height=int(spline[1])+1

        # ヘッダ情報が揃ったら出力してスキップモードへ
        if ((lowlot != uplot) and (lowlat != uplat) and (width > 0) and (height > 0)):
            csv.write(str(lowlot)+'\n')
            csv.write(str(lowlat)+'\n')
            csv.write(str(uplot)+'\n')
            csv.write(str(uplat)+'\n')
            csv.write(str(int(width / skip))+'\n')
            csv.write(str(int(height / skip))+'\n')
            mode=1
    elif (mode==1): # 高さ情報が出るまでスキップモード
        if 'tupleList>' in line:
            mode=2
            w = 0
            h = 0
    elif (mode==2): # 高さ変換モード
        if 'tupleList>' in line:    # 高さ情報終了で読み取り終了
            mode = 3    # 終了モード
            break
        if ((w % skip) == 0) and ((h % skip) == 0):
            spline=line.split(',')
            csv.write(spline[1])
        w = w + 1
        if (w >= width):
            w = 0
            h = h + 1

csv.close() # 出力ファイルを閉じる

if ((linecnt == 0) and (mode != 3)):  # データ読み出し不能の場合は警告表示
    print("no file or non data");
    sys.exit()

print("finish")   # 正常終了表示

sys.exit()

