====== Обработка геофизических данных ======
===== Обработка сейсмограмм =====
Для обработки сейсмограмм существует достаточно мощная библиотека ''obspy''pip.
Подробное описание возможностей библиотеки с примерами приведено [[https://docs.obspy.org/contents.html|на официальном сайте]].
==== Ключевые объекты obspy ====
''UTCDateTime'' — формат времени повышенной точности. Похож на ''datetime'', но всегда в UTC и может содержать информацию о времени с более высокой точностью.
''Trace'' — непрерывный ряд наблюдений.
''Stream'' — набор объектов типа ''Trace''.
==== Пример работы ====
import obspy
# Загружаем данные
st = obspy.read('http://examples.obspy.org/RJOB_061005_072159.ehz.new')
# Обзор имеющихся трасс
print(st)
# Получаем отдельную трассу
tr = st[0]
# Общая информация о ней
print(tr)
# Метаинформация
print(tr.stats)
# Данные наблюдений в виде np.array
print(tr.data)
# График
tr.plot()
===== Работа с геопривязанными данными =====
Наиболее распространен формат векторных геопривязанными данных ESRI Shapefiles. В простейшем случае имеется два файла и индекс (shp, dbf, shx). В первом содержатся табличные данные, во втором — собственно геоданные (точки, линии, полигоны, ...), причем в одном shp файле может быть только один тип геоданных.
Будем работать с shp файлами с помощью инструмента ''pyshp''pip.
Следует отметить, что Python не GIS, а потому, чтобы красиво нарисовать карту целесообразнее воспользоваться, например, QGis.
==== Открытие файла ====
import shapefile
# Имя файла без расширения
shpfile = shapefile.Reader("data/polygons")
# Количество записей
print(len(shpfile))
# Тип записей
print(shpfile.shapeType)
# Описание полей таблицы
print(shpfile.fields)
==== Работа с записями ====
shapeRecs = shpfile.shapeRecords()
# Координаты точек
shapeRecs[25].shape
# Соответствующая запись в таблице
shapeRecs[25].record
==== Создание shp файла ====
Создание простейшего shp файла для точек.
import shapefile
# Создаем объект для записи данных
shpw = shapefile.Writer()
# Добавляем поле в таблицу
shpw.field('name', 'C')
# Добавляем точку и запись в таблицу
shpw.point(122, 37)
shpw.record('point1')
# Сохраняем файл
w.save('shapefiles/test/point')