如何通过Python从地理数据中提取x,y和z坐标?

时间:2009-01-28 23:36:32

标签: python extraction geography

我的地理数据有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

整个数据在序列中有许多先前的变量。

如何从数据中将坐标ULLAT,ULLON和LRLAT提取到三个列表中,以便每行对应一个位置?

the post中的问题引发了这个问题。

2 个答案:

答案 0 :(得分:4)

如果数据都在一个大的平面文本文件中,那么这样的东西可能会起作用:

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')]

答案 1 :(得分:2)

给定一个StreamReader命名的阅读器,这应该给你一个(float,float,float)列表。我建议列出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)

它可能有用,但它很难看。我不是字符串解析的专家。