Skip to content

Commit

Permalink
add st_point creation
Browse files Browse the repository at this point in the history
  • Loading branch information
tsamsonov committed Sep 24, 2023
1 parent 8576d24 commit 99e7763
Show file tree
Hide file tree
Showing 12 changed files with 87 additions and 17 deletions.
4 changes: 2 additions & 2 deletions _freeze/adv_05_PostGIS/execute-results/html.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"hash": "29de79a3535f0842d0aa0893b1b27695",
"hash": "990695b8aead4864eac2bd8458b2d7fc",
"result": {
"markdown": "---\ntitle: \"PostGIS\"\nsubtitle: \"Геоинформатика I. Базы пространственных данных\"\ndate: today\ndate-format: long\nauthor: \"Самсонов Тимофей Евгеньевич\"\nexecute:\n echo: false\n freeze: true\nengine: knitr\nformat:\n revealjs: \n theme: [default, custom.scss]\n margin: 0.2\n width: 1280\n height: 720\n slide-number: true\n footer: \"Самсонов Т. Е. Геоинформатика: курс лекций\"\n header-includes: <link rel=\"stylesheet\" media=\"screen\" href=\"https://fontlibrary.org//face/pt-sans\" type=\"text/css\"/>\nbibliography: references.yaml\nmainfont: PT Sans\n---\n\n\n## Базовые библиотеки\n\nФункциональность **PostGIS** опирается на 4 библиотеки:\n\n::: columns\n::: {.column width=\"50%\"}\n::: columns\n::: {.column width=\"30%\"}\n![](images/gdalicon.png){width=\"100%\"}\n:::\n\n::: {.column width=\"70%\"}\n**GDAL** выполняет конвертацию между форматами данных и растровые операции\n:::\n:::\n\n**PROJ** выполняет преобразования систем координат\n\n![](images/projicon.png){width=\"70%\"}\n:::\n\n::: {.column width=\"50%\"}\n**GEOS** выполняет геометрические операции в *2D*\n\n![](images/geosicon.png)\n\n**\\[SF\\]CGAL** выполняет геометрические операции в *3D*\n\n![](images/CGAL.png){width=\"70%\"}\n:::\n:::\n\n## Структура базы данных\n\n![](images/pg_database.svg){width=\"100%\"}\n\n## Структура схемы\n\n![](images/pg_schema1.svg){width=\"100%\"}\n\n## Структура схемы (продолжение)\n\n![](images/pg_schema2.svg){width=\"100%\"}\n\n## Создание пустой БД\n\n**Создание БД** (запрос к любой существующей БД)\n\n``` sql\nCREATE DATABASE satino;\n```\n\n**Создание схемы и активация расширения**\n\n``` sql\nCREATE SCHEMA postgis;\nGRANT USAGE ON schema postgis to public; -- доступ для всех\nCREATE EXTENSION postgis SCHEMA postgis; -- включить postgis для схемы\nCREATE EXTENSION postgis_raster SCHEMA postgis; -- включить растры для схемы\nALTER DATABASE satino SET search_path=public,postgis; -- добавить в путь поиска\n```\n\n**Проверка установки**\n\n``` sql\nSELECT postgis_full_version();\n```\n\n::: callout-important\n## Внимание\n\nУстановка расширения `postgis` через графический интерфейс не позволяет выбрать схему и выполняется в схеме `public`.\n:::\n\n## Типы пространственных данных\n\nВ PostGIS существует 4 типа пространственных данных\n\n| | Тип | Особенности |\n|-----|-------------|-------------------------------------------------|\n| 1 | `geometry` | Векторные данные в декартовой системе координат |\n| 2 | `geography` | Векторные данные в угловой системе координат |\n| 3 | `raster` | Растровые данные (многомерные) |\n| 4 | `topology` | Топологические данные (вершины и грани). |\n\n::: callout-note\n## Топологические данные\n\nТип данных `topology` используется для хранения топологических покрытий и сетевых данных. Для анализа последних применяется отдельное расширение **pgRouting**.\n:::\n\n::: callout-tip\n## Интересный факт\n\nPostGIS позволяет хранить несколько пространственных столбцов в одной таблице\n:::\n\n## Каталог систем координат\n\n::: columns\n::: {.column width=\"30%\"}\nСистемы координат хранятся в таблице `spatial_ref_sys`\n\n::: callout-note\n#### SRS vs CRS\n\nНесмотря на то, что каталог имеет называется *SRS (Spatial Reference Systems)*, по факту он хранит описание *CRS (Coordinate Reference Systems)*.\n:::\n\n::: callout-important\n#### Терминология WKT\n\nТерминология WKT при описании CRS может не полностью соответствовать стандартами ISO / OGC\n:::\n:::\n\n::: {.column width=\"70%\"}\n![](images/srs_postgis.png)\n:::\n:::\n\n## Создание пространственных таблиц\n\nПри создании пространственных таблиц необходимо указать\n\n- уникальный идентификатор\n\n- геометрический столбец заданного типа и КСО\n\nНапример, таблица точек гидрологических промеров может иметь следующий состав:\n\n``` sql\nCREATE TABLE postgis.hydro_measures (\n\tfid serial primary key,\n\tdepth real,\n\tgeom geography(point, 4326)\n)\n```\n\n## Ручное создание данных\n\nВставка новых строк выполняется посредством стандартной команды INSERT:\n\n``` sql\nINSERT INTO postgis.hydro_measures(fid, depth, geom)\nVALUES\n\t(1, 1.23, ST_GeomFromText('POINT (36.37802128 55.21121827)')),\n\t(2, 1.57, ST_GeomFromText('POINT (36.37834198 55.21127511)')),\n\t(3, 0.78, ST_GeomFromText('POINT (36.37861509 55.21139158)')),\n\t(4, 0.95, ST_GeomFromText('POINT (36.37905934 55.21137259)')),\n\t(5, 1.11, ST_GeomFromText('POINT (36.37938529 55.21125473)'));\n```\n\nАльтернативный синтаксис через преобразование строки к типу данных:\n\n``` sql\nINSERT INTO postgis.hydro_measures(fid, depth, geom)\nVALUES\n\t(1, 1.23, 'POINT (36.37802128 55.21121827)'::geography),\n\t(2, 1.57, 'POINT (36.37834198 55.21127511)'::geography),\n\t(3, 0.78, 'POINT (36.37861509 55.21139158)'::geography),\n\t(4, 0.95, 'POINT (36.37905934 55.21137259)'::geography),\n\t(5, 1.11, 'POINT (36.37938529 55.21125473)'::geography);\n```\n\n## Импорт из CSV\n\nДля импорта можно использовать команду `COPY` :\n\n``` sql\nCREATE TABLE IF NOT EXISTS postgis.geo_points (\n\tfid serial primary key,\n\tname text,\n\tcomment text,\n\theight_abs real,\n\theight_add real,\n\ttype text,\n\tx real, \n\ty real\n);\n\nDELETE FROM postgis.geo_points; -- опционально, если хотите очистить\n\nCOPY postgis.geo_points \n\tFROM '/Volumes/Data/Spatial/Satino/geo_points.csv' \n\tDELIMITER as ',' \n\tCSV HEADER;\n```\n\n## Библиография\n",
"markdown": "---\ntitle: \"PostGIS. Создание и загрузка данных\"\nsubtitle: \"Геоинформатика I. Базы пространственных данных\"\ndate: today\ndate-format: long\nauthor: \"Самсонов Тимофей Евгеньевич\"\nexecute:\n echo: false\n freeze: true\nengine: knitr\nformat:\n revealjs: \n theme: [default, custom.scss]\n margin: 0.2\n width: 1280\n height: 720\n slide-number: true\n footer: \"Самсонов Т. Е. Геоинформатика: курс лекций\"\n header-includes: <link rel=\"stylesheet\" media=\"screen\" href=\"https://fontlibrary.org//face/pt-sans\" type=\"text/css\"/>\nbibliography: references.yaml\nmainfont: PT Sans\n---\n\n\n## Базовые библиотеки\n\nФункциональность **PostGIS** опирается на 4 библиотеки:\n\n::: columns\n::: {.column width=\"50%\"}\n::: columns\n::: {.column width=\"30%\"}\n![](images/gdalicon.png){width=\"100%\"}\n:::\n\n::: {.column width=\"70%\"}\n**GDAL** выполняет конвертацию между форматами данных и растровые операции\n:::\n:::\n\n**PROJ** выполняет преобразования систем координат\n\n![](images/projicon.png){width=\"70%\"}\n:::\n\n::: {.column width=\"50%\"}\n**GEOS** выполняет геометрические операции в *2D*\n\n![](images/geosicon.png)\n\n**\\[SF\\]CGAL** выполняет геометрические операции в *3D*\n\n![](images/CGAL.png){width=\"70%\"}\n:::\n:::\n\n## Структура базы данных\n\n![](images/pg_database.svg){width=\"100%\"}\n\n## Структура схемы\n\n![](images/pg_schema1.svg){width=\"100%\"}\n\n## Структура схемы (продолжение)\n\n![](images/pg_schema2.svg){width=\"100%\"}\n\n## Создание пустой БД\n\n**Создание БД** (запрос к любой существующей БД)\n\n``` sql\nCREATE DATABASE satino;\n```\n\n**Создание схемы и активация расширения**\n\n``` sql\nCREATE SCHEMA postgis;\nGRANT USAGE ON schema postgis to public; -- доступ для всех\nCREATE EXTENSION postgis SCHEMA postgis; -- включить postgis для схемы\nCREATE EXTENSION postgis_raster SCHEMA postgis; -- включить растры для схемы\nALTER DATABASE satino SET search_path=public,postgis; -- добавить в путь поиска\n```\n\n**Проверка установки**\n\n``` sql\nSELECT postgis_full_version();\n```\n\n::: callout-important\n## Внимание\n\nУстановка расширения `postgis` через графический интерфейс не позволяет выбрать схему и выполняется в схеме `public`.\n:::\n\n## Типы пространственных данных\n\nВ PostGIS существует 4 типа пространственных данных\n\n| | Тип | Особенности |\n|-----|-------------|-------------------------------------------------|\n| 1 | `geometry` | Векторные данные в декартовой системе координат |\n| 2 | `geography` | Векторные данные в угловой системе координат |\n| 3 | `raster` | Растровые данные (многомерные) |\n| 4 | `topology` | Топологические данные (вершины и грани). |\n\n::: callout-note\n## Топологические данные\n\nТип данных `topology` используется для хранения топологических покрытий и сетевых данных. Для анализа последних применяется отдельное расширение **pgRouting**.\n:::\n\n::: callout-tip\n## Интересный факт\n\nPostGIS позволяет хранить несколько пространственных столбцов в одной таблице\n:::\n\n## Каталог систем координат\n\n::: columns\n::: {.column width=\"30%\"}\nСистемы координат хранятся в таблице `spatial_ref_sys`\n\n::: callout-note\n#### SRS vs CRS\n\nНесмотря на то, что каталог имеет называется *SRS (Spatial Reference Systems)*, по факту он хранит описание *CRS (Coordinate Reference Systems)*.\n:::\n\n::: callout-important\n#### Терминология WKT\n\nТерминология WKT при описании CRS может не полностью соответствовать стандартами ISO / OGC\n:::\n:::\n\n::: {.column width=\"70%\"}\n![](images/srs_postgis.png)\n:::\n:::\n\n## Создание пространственных таблиц\n\nПри создании пространственных таблиц необходимо указать\n\n- уникальный идентификатор\n\n- геометрический столбец заданного типа и КСО\n\nНапример, таблица точек гидрологических промеров может иметь следующий состав:\n\n``` sql\nCREATE TABLE postgis.hydro_measures (\n\tfid serial primary key,\n\tdepth real,\n\tgeom geography(point, 4326)\n)\n```\n\n## Ручное создание данных\n\nВставка новых строк выполняется посредством стандартной команды INSERT:\n\n``` sql\nINSERT INTO postgis.hydro_measures(fid, depth, geom)\nVALUES\n\t(1, 1.23, ST_GeomFromText('POINT (36.37802128 55.21121827)')),\n\t(2, 1.57, ST_GeomFromText('POINT (36.37834198 55.21127511)')),\n\t(3, 0.78, ST_GeomFromText('POINT (36.37861509 55.21139158)')),\n\t(4, 0.95, ST_GeomFromText('POINT (36.37905934 55.21137259)')),\n\t(5, 1.11, ST_GeomFromText('POINT (36.37938529 55.21125473)'));\n```\n\nАльтернативный синтаксис через преобразование строки к типу данных:\n\n``` sql\nINSERT INTO postgis.hydro_measures(fid, depth, geom)\nVALUES\n\t(1, 1.23, 'POINT (36.37802128 55.21121827)'::geography),\n\t(2, 1.57, 'POINT (36.37834198 55.21127511)'::geography),\n\t(3, 0.78, 'POINT (36.37861509 55.21139158)'::geography),\n\t(4, 0.95, 'POINT (36.37905934 55.21137259)'::geography),\n\t(5, 1.11, 'POINT (36.37938529 55.21125473)'::geography);\n```\n\n## Импорт из CSV\n\nДля импорта можно использовать команду `COPY` :\n\n``` sql\nCREATE TABLE IF NOT EXISTS postgis.geo_points (\n\tfid serial primary key,\n\tname text,\n\tcomment text,\n\theight_abs real,\n\theight_add real,\n\ttype text,\n\tx real, \n\ty real\n);\n\nDELETE FROM postgis.geo_points; -- опционально, если хотите очистить\n\nCOPY postgis.geo_points \n\tFROM '/Volumes/Data/Spatial/Satino/geo_points.csv' \n\tDELIMITER as ',' \n\tCSV HEADER;\n```\n\n## Непространственная таблица\n\nПолученная таблица не является пространственной:\n\n![](images/copy_csv.png)\n\n## Активация пространственных точек\n\n::: columns\n::: {.column width=\"50%\"}\nЕсли данные точечные и содержат координаты в столбцах, то можно на их основе создать геометрию\n\n``` sql\nALTER TABLE postgis.geo_points \n ADD geom geometry(point, 32637);\nUPDATE postgis.geo_points\n SET geom = ST_Point(x, y)\n```\n\n![](images/geom_fromxy.png)\n:::\n\n::: {.column width=\"50%\"}\nДля преобразования используем одну из функций PostGIS (без или с указанием *SRID*).\n\n![](images/st_point.png)\n:::\n:::\n\n## Библиография\n",
"supporting": [],
"filters": [
"rmarkdown/pagebreak.lua"
Expand Down
31 changes: 30 additions & 1 deletion adv_05_PostGIS.qmd
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: "PostGIS"
title: "PostGIS. Создание и загрузка данных"
subtitle: "Геоинформатика I. Базы пространственных данных"
date: today
date-format: long
Expand Down Expand Up @@ -210,4 +210,33 @@ COPY postgis.geo_points
CSV HEADER;
```

## Непространственная таблица

Полученная таблица не является пространственной:

![](images/copy_csv.png)

## Активация пространственных точек

::: columns
::: {.column width="50%"}
Если данные точечные и содержат координаты в столбцах, то можно на их основе создать геометрию

``` sql
ALTER TABLE postgis.geo_points
ADD geom geometry(point, 32637);
UPDATE postgis.geo_points
SET geom = ST_Point(x, y)
```

![](images/geom_fromxy.png)
:::

::: {.column width="50%"}
Для преобразования используем одну из функций PostGIS (без или с указанием *SRID*).

![](images/st_point.png)
:::
:::

## Библиография
25 changes: 23 additions & 2 deletions docs/adv_05_PostGIS.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<meta name="generator" content="quarto-1.4.309">

<meta name="author" content="Самсонов Тимофей Евгеньевич">
<title>Основы геоинформатики - PostGIS</title>
<title>Основы геоинформатики - PostGIS. Создание и загрузка данных</title>
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
Expand Down Expand Up @@ -392,7 +392,7 @@
<div class="slides">

<section id="title-slide" class="quarto-title-block center">
<h1 class="title">PostGIS</h1>
<h1 class="title">PostGIS. Создание и загрузка данных</h1>
<p class="subtitle">Геоинформатика I. Базы пространственных данных</p>

<div class="quarto-title-authors">
Expand Down Expand Up @@ -616,6 +616,27 @@ <h2>Импорт из CSV</h2>
<span id="cb7-16"><a href="#cb7-16"></a> DELIMITER <span class="kw">as</span> <span class="st">','</span> </span>
<span id="cb7-17"><a href="#cb7-17"></a> CSV <span class="kw">HEADER</span>;</span></code><button title="Скопировать текст" class="code-copy-button"><i class="bi"></i></button></pre></div>
</section>
<section id="непространственная-таблица" class="slide level2">
<h2>Непространственная таблица</h2>
<p>Полученная таблица не является пространственной:</p>

<img data-src="images/copy_csv.png" class="r-stretch"></section>
<section id="активация-пространственных-точек" class="slide level2">
<h2>Активация пространственных точек</h2>
<div class="columns">
<div class="column" style="width:50%;">
<p>Если данные точечные и содержат координаты в столбцах, то можно на их основе создать геометрию</p>
<div class="sourceCode" id="cb8"><pre class="sourceCode numberSource sql number-lines code-with-copy"><code class="sourceCode sql"><span id="cb8-1"><a href="#cb8-1"></a><span class="kw">ALTER</span> <span class="kw">TABLE</span> postgis.geo_points </span>
<span id="cb8-2"><a href="#cb8-2"></a> <span class="kw">ADD</span> geom geometry(point, <span class="dv">32637</span>);</span>
<span id="cb8-3"><a href="#cb8-3"></a><span class="kw">UPDATE</span> postgis.geo_points</span>
<span id="cb8-4"><a href="#cb8-4"></a> <span class="kw">SET</span> geom <span class="op">=</span> ST_Point(x, y)</span></code><button title="Скопировать текст" class="code-copy-button"><i class="bi"></i></button></pre></div>
<p><img data-src="images/geom_fromxy.png"></p>
</div><div class="column" style="width:50%;">
<p>Для преобразования используем одну из функций PostGIS (без или с указанием <em>SRID</em>).</p>
<p><img data-src="images/st_point.png"></p>
</div>
</div>
</section>
<section id="библиография" class="slide level2">
<h2>Библиография</h2>

Expand Down
Binary file added docs/images/copy_csv.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/geom_fromxy.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/st_point.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 99e7763

Please sign in to comment.