Wie kann ich extrahieren x, y und z-Koordinaten von geografischen Daten, die von Python?

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

  •  20-08-2019
  •  | 
  •  

Frage

Ich habe geographische Daten, die 14 Variablen hat. Die Daten werden in folgendem Format:

  

'quadname': rockport_colony_SD AUFLÖSUNG: 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

Die ganzen Daten viele früheren Variablen in der Folge hat.

Wie kann ich die Koordinaten ULLAT, ULLON LRLAT und aus den Daten in drei Listen extrahieren, so dass die jede Zeile einem Standort entspricht?

Diese Frage wurde von dem Problem in die Post .

War es hilfreich?

Lösung

So etwas wie dies funktionieren könnte, wenn die Daten alle in einer großen flachen Textdatei ist:

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

Andere Tipps

Stream Leser genannt, sollte dies Ihnen ein Liste (float, float, float). Ich schlage vor, eine Liste von 3-Tupeln, weil es wahrscheinlich bequemer sein werde und effizienter zu Fuß durch, es sei denn, aus irgendeinem Grunde nur Sie wollen alle Punkte einzeln zu bekommen.

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)

Es kann funktionieren, aber es ist hässlich. Ich bin kein Experte auf String-Parsing.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top