كيف يمكنني استخراج x و y و z ينسق من البيانات الجغرافية التي بايثون؟

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

والبيانات كله لديه العديد من المتغيرات السابقة في التسلسل.

وكيف يمكنني استخراج الإحداثيات 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