Как я могу извлечь координаты x, y и z из географических данных с помощью Python?

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

  •  20-08-2019
  •  | 
  •  

Вопрос

У меня есть географические данные, которые содержат 14 переменных.Данные представлены в следующем формате:

ИМЯ КВАДРАТА:РАЗРЕШЕНИЕ rockport_colony_SD:10 УЛЛАТ:43.625
УЛЛОН:-97.87527466 ЛРЛАТ:43.5
ЛРЛОН:-97.75027466 HDATUM:27
ЗМИН:361.58401489 ZMAX:413.38400269 ЗМЕАН:396.1293335 ZSIGMA:12.36359215 МЕТОД:5
КВАДРАТИЧНАЯ ДАТА:20001001

Все данные содержат много предыдущих переменных в последовательности.

Как я могу извлечь координаты ULLAT, ULLON и LRL из данных в три списка, чтобы каждая строка соответствовала одному местоположению?

Этот вопрос был поднят проблемой в почта.

Это было полезно?

Решение

Что-то подобное может сработать, если все данные находятся в большом плоском текстовом файле:

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

Другие советы

Учитывая, что Потоковый считыватель названный reader, он должен выдать вам список (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)

Это может сработать, но это некрасиво.Я не эксперт в разборе строк.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top