{ "cells": [ { "cell_type": "markdown", "id": "a18dd0c5-2575-4745-94d3-086356f2a3e5", "metadata": {}, "source": [ "# Обработка геофизических данных" ] }, { "cell_type": "markdown", "id": "7010c3f9-e268-47af-9c2e-8735cb6c3d45", "metadata": {}, "source": [ "## Обработка сейсмограмм\n", "\n", "Для обработки сейсмограмм существует достаточно мощная библиотека `obspy`.\n", "\n", "Подробное описание возможностей библиотеки с примерами приведено на [официальном сайте](https://docs.obspy.org/contents.html).\n", "\n", "### Ключевые объекты obspy\n", "\n", "`UTCDateTime` — формат времени повышенной точности. Похож на `datetime`, но всегда в UTC и может содержать информацию о времени с более высокой точностью.\n", "\n", "`Trace` — непрерывный ряд наблюдений.\n", "\n", "`Stream` — набор объектов типа Trace. " ] }, { "cell_type": "code", "execution_count": null, "id": "4cb0821e-8605-4ea2-bc40-92da9890d540", "metadata": {}, "outputs": [], "source": [ "import obspy\n", "\n", "# Загружаем данные\n", "st = obspy.read('http://examples.obspy.org/RJOB_061005_072159.ehz.new')\n", "\n", "# Обзор имеющихся трасс\n", "print(st)\n", "\n", "# Получаем отдельную трассу\n", "tr = st[0]\n", "\n", "# Общая информация о ней\n", "print(tr)\n", "\n", "# Метаинформация\n", "print(tr.stats)\n", "\n", "# Данные наблюдений в виде np.array\n", "print(tr.data)\n", "\n", "# График\n", "tr.plot()" ] }, { "cell_type": "markdown", "id": "a81eaf58-c556-4c08-a657-cdad8a6a044a", "metadata": {}, "source": [ "### Работа с геопривязанными данными\n", "\n", "Наиболее распространен формат векторных геопривязанными данных ESRI Shapefiles. В простейшем случае имеется два файла и индекс (`.shp`, `.dbf`, `.shx`). В первом содержатся табличные данные, во втором — собственно геоданные (точки, линии, полигоны, …), причем в одном `.shp` файле может быть только один тип геоданных.\n", "\n", "Будем работать с `.shp` файлами с помощью инструмента `pyshp`.\n", "\n", "Следует отметить, что Python не GIS, а потому, чтобы красиво нарисовать карту целесообразнее воспользоваться, например, QGis." ] }, { "cell_type": "code", "execution_count": null, "id": "f2a64f4a-f430-4e08-a786-062d5a67c705", "metadata": {}, "outputs": [], "source": [ "import shapefile\n", "\n", "# Имя файла без расширения\n", "shpfile = shapefile.Reader(\"data/polygons\")\n", "\n", "# Количество записей\n", "print(len(shpfile))\n", "\n", "# Тип записей\n", "print(shpfile.shapeType)\n", "\n", "# Описание полей таблицы\n", "print(shpfile.fields)\n", "\n", "shapeRecs = shpfile.shapeRecords()\n", "\n", "# Координаты точек\n", "shapeRecs[25].shape\n", "\n", "# Соответствующая запись в таблице\n", "shapeRecs[25].record" ] }, { "cell_type": "markdown", "id": "51a85283-69bf-4d65-82c2-40356e6f0585", "metadata": {}, "source": [ "### Создание shp файла" ] }, { "cell_type": "code", "execution_count": null, "id": "e0feb093-9e65-4b37-97eb-e485a7928820", "metadata": {}, "outputs": [], "source": [ "import shapefile\n", "\n", "# Создаем объект для записи данных\n", "shpw = shapefile.Writer()\n", "\n", "# Добавляем поле в таблицу\n", "shpw.field('name', 'C')\n", "\n", "# Добавляем точку и запись в таблицу\n", "shpw.point(122, 37) \n", "shpw.record('point1')\n", "\n", "# Сохраняем файл\n", "w.save('shapefiles/test/point')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.6" } }, "nbformat": 4, "nbformat_minor": 5 }