どのように私は、x、y、zはPythonが地理データから座標を抽出することができますか?

StackOverflow https://stackoverflow.com/questions/489901

  •  20-08-2019
  •  | 
  •  

質問

私は14個の変数を持っている地理的なデータを持っています。データの形式は次のとおりです。

  

QUADNAME:rockport_colony_SD解像度:10 ULLAT:43.625
  ULLON:-97.87527466 LRLAT:43.5
  LRLON:-97.75027466 HDATUM:27
  ZMIN:361.58401489 ZMAX:   413.38400269 ZMEAN:396.1293335 ZSIGMA:12.36359215 PMETHOD:5
  QUADDATE:20001001

全体のデータが順番に多くの以前の変数を持っています。

各行が一つの位置に対応するように、私は、3本のリストへのデータから座標ULLAT、ULLONとLRLATを抽出できますか?

この質問は、<のhref = "https://stackoverflow.com/questions/486807/where-can-i-get-the-xyz-coordinates-for-california-to-use-に問題が提起された

輪郭プロット ">ポストでます。

役に立ちましたか?

解決

:データはすべての大きなフラット・テキスト・ファイルである場合は、

このような何かがうまくいくかもしれません

import re

data = """
QUADNAME: rockport_colony_SD RESOLUTION: 10 ULLAT: 43.625
ULLON: -97.87527466 LRLAT: 43.5
LRLON: -97.75027466 HDATUM: 27
ZMIN: 361.58401489 ZMAX: 413.38400269 ZMEAN: 396.1293335 ZSIGMA: 12.36359215 PMETHOD: 5
QUADDATE: 20001001
"""

regex = re.compile(
    r"""ULLAT:\ (?P<ullat>-?[\d.]+).*?
    ULLON:\ (?P<ullon>-?[\d.]+).*?
    LRLAT:\ (?P<lrlat>-?[\d.]+)""", re.DOTALL|re.VERBOSE)

print regex.findall(data) # Yields: [('43.625', '-97.87527466', '43.5')]

他のヒント

のStreamReader のリーダーの名前を考えると、これはあなたを与える必要があります(フロート、フロート、フロート)のリスト。おそらく何らかの理由でのみ個別にすべてのポイントを取得したい場合を除き、ウォークスルーするために、より便利で、より効率的になるだろうので、私は3つのタプルのリストを示唆しています。

coords = []
reader
while line=reader.readline():

  index_ullat = line.find("ULLAT")
  if index_ullat >= 0:
    ullat = float(line[ index_ULLAT+7 : ])

    line = reader.readline()

    index_ullon = line.find("ULLON")
    index_lrlat = line.find("LRLAT")
    if index_ullon >= 0 and index_lrlat >= 0:
      ullon = float(line[ index_ullon+7 : index_lrlat-1 ])
      lrlat = float(line[ index_lrlat+7 : ])
    else:
      raise InputError, "ULLON and LRLAT didn't follow ULLAT."

    coords.append(ullat, ullon, lrlat)

これは動作しますが、それは醜いです。私は、文字列解析では何の専門家だ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top