diff --git a/.DS_Store b/.DS_Store
index f5a060a..1f495fe 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/_freeze/adv_05_PostGIS/execute-results/html.json b/_freeze/adv_05_PostGIS/execute-results/html.json
index 41c5701..d34742a 100644
--- a/_freeze/adv_05_PostGIS/execute-results/html.json
+++ b/_freeze/adv_05_PostGIS/execute-results/html.json
@@ -1,7 +1,7 @@
{
- "hash": "d742e532f3665d58ee4ad47f85ef236c",
+ "hash": "29de79a3535f0842d0aa0893b1b27695",
"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: \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{width=\"100%\"}\n:::\n\n::: {.column width=\"70%\"}\n**GDAL** выполняет конвертацию между форматами данных и растровые операции\n:::\n:::\n\n**PROJ** выполняет преобразования систем координат\n\n{width=\"70%\"}\n:::\n\n::: {.column width=\"50%\"}\n**GEOS** выполняет геометрические операции в *2D*\n\n\n\n**\\[SF\\]CGAL** выполняет геометрические операции в *3D*\n\n{width=\"70%\"}\n:::\n:::\n\n## Структура базы данных\n\n{width=\"100%\"}\n\n## Структура схемы\n\n{width=\"100%\"}\n\n## Структура схемы (продолжение)\n\n{width=\"100%\"}\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: \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{width=\"100%\"}\n:::\n\n::: {.column width=\"70%\"}\n**GDAL** выполняет конвертацию между форматами данных и растровые операции\n:::\n:::\n\n**PROJ** выполняет преобразования систем координат\n\n{width=\"70%\"}\n:::\n\n::: {.column width=\"50%\"}\n**GEOS** выполняет геометрические операции в *2D*\n\n\n\n**\\[SF\\]CGAL** выполняет геометрические операции в *3D*\n\n{width=\"70%\"}\n:::\n:::\n\n## Структура базы данных\n\n{width=\"100%\"}\n\n## Структура схемы\n\n{width=\"100%\"}\n\n## Структура схемы (продолжение)\n\n{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\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",
"supporting": [],
"filters": [
"rmarkdown/pagebreak.lua"
diff --git a/adv_03_WKT_WKB.qmd b/adv_03_WKT_WKB.qmd
index 6fda156..e1db885 100644
--- a/adv_03_WKT_WKB.qmd
+++ b/adv_03_WKT_WKB.qmd
@@ -99,21 +99,15 @@ mainfont: PT Sans
**БНФ** базируется на следующих обозначениях:
-+---------+------------------------------------------------------------------------------------------------------------------------------+
-| `{}` | Опциональный (необязательный) токен; фигурные скобки используются для обозначения и не являются частью токена |
-+---------+------------------------------------------------------------------------------------------------------------------------------+
-| `()` | Группировка последовательности токенов в один токен; круглые скобки используются для обозначения и не являются частью токена |
-+---------+------------------------------------------------------------------------------------------------------------------------------+
-| `*` | Опциональное (необязательное) использование множества экземпляров токена |
-+---------+------------------------------------------------------------------------------------------------------------------------------+
-| `|` | Разделитель альтернативных токенов; не включается в результат |
-+---------+------------------------------------------------------------------------------------------------------------------------------+
-| `<>` | Определяемый нетерминальный токен |
-+---------+------------------------------------------------------------------------------------------------------------------------------+
-| `::=` | Оператор, обозначающий производящее правило: левый операнд может быть заменен на правый. |
-+---------+------------------------------------------------------------------------------------------------------------------------------+
-| | Последовательность символов без обозначений представляет собой терминальный токен |
-+---------+------------------------------------------------------------------------------------------------------------------------------+
+| | |
+|-------|------------------------------------------------------------------------------------------------------------------------------|
+| `{}` | Опциональный (необязательный) токен; фигурные скобки используются для обозначения и не являются частью токена |
+| `()` | Группировка последовательности токенов в один токен; круглые скобки используются для обозначения и не являются частью токена |
+| `*` | Опциональное (необязательное) использование множества экземпляров токена |
+| `|` | Разделитель альтернативных токенов; не включается в результат |
+| `<>` | Определяемый нетерминальный токен |
+| `::=` | Оператор, обозначающий производящее правило: левый операнд может быть заменен на правый. |
+| | Последовательность символов без обозначений представляет собой терминальный токен |
## Определение WKT
@@ -138,27 +132,18 @@ mainfont: PT Sans
## Определение WKT
-+---------------------------------------------------------------------------------------------------------------------------+
+| |
+|---------------------------------------------------------------------------------------------------------------------------|
| ` ::= {{}}|` |
-+---------------------------------------------------------------------------------------------------------------------------+
| ` ::= ` |
-+---------------------------------------------------------------------------------------------------------------------------+
| ` ::= ` |
-+---------------------------------------------------------------------------------------------------------------------------+
| ` ::= E` |
-+---------------------------------------------------------------------------------------------------------------------------+
| ` ::= | ` |
-+---------------------------------------------------------------------------------------------------------------------------+
| ` ::= {}` |
-+---------------------------------------------------------------------------------------------------------------------------+
| ` ::= ` |
-+---------------------------------------------------------------------------------------------------------------------------+
| ` ::= ` |
-+---------------------------------------------------------------------------------------------------------------------------+
| ` ::= ` |
-+---------------------------------------------------------------------------------------------------------------------------+
| ` ::= ` |
-+---------------------------------------------------------------------------------------------------------------------------+
## Разложение действительного числа
@@ -200,13 +185,11 @@ mainfont: PT Sans
## Определение $2D$-геометрий
-+------------------------------------------------------------------------------------------------------------------+
+| |
+|------------------------------------------------------------------------------------------------------------------|
| ` ::= | {}* ` |
-+------------------------------------------------------------------------------------------------------------------+
| ` ::= polyhedralsurface ` |
-+------------------------------------------------------------------------------------------------------------------+
| ` ::= tin ` |
-+------------------------------------------------------------------------------------------------------------------+
{width="100%"}
@@ -285,13 +268,10 @@ mainfont: PT Sans
3. Интерфейс объектов с $M$-геометрией содержит дополнительные методы `LocateAlong()` и `LocateBetween()`.
-+-------------------------+-------------------------------------------------------------------------------------------+
| Метод | Назначение |
-+=========================+===========================================================================================+
+|-------------------------|-------------------------------------------------------------------------------------------|
| `LocateAlong(m)` | Возвращает производную геометрическую коллекцию, которая соответствует `m` |
-+-------------------------+-------------------------------------------------------------------------------------------+
| `LocateBetween(m1, m2)` | Возвращает производную геометрическую коллекцию, которая соответствует отрезку `[m1, m2]` |
-+-------------------------+-------------------------------------------------------------------------------------------+
## Дополнительные измерения
@@ -365,31 +345,20 @@ plt.show()
## Коды геометрических типов {.table-small}
-+----------------------------------+---------+---------+---------+----------+
-| **Тип** | **XY** | **XYZ** | **XYM** | **XYZM** |
-+----------------------------------+---------+---------+---------+----------+
-| `GEOMETRY` | `0` | `1000` | `2000` | `3000` |
-+----------------------------------+---------+---------+---------+----------+
-| `POINT` | `1` | `1001` | `2001` | `3001` |
-+----------------------------------+---------+---------+---------+----------+
-| `LINESTRING` | `2` | `1002` | `2002` | `3002` |
-+----------------------------------+---------+---------+---------+----------+
-| `POLYGON` | `3` | `1003` | `2003` | `3003` |
-+----------------------------------+---------+---------+---------+----------+
-| `MULTIPOINT` | `4` | `1004` | `2004` | `3004` |
-+----------------------------------+---------+---------+---------+----------+
-| `MULTILINESTRING` | `5` | `1005` | `2005` | `3005` |
-+----------------------------------+---------+---------+---------+----------+
-| `MULTIPOLYGON` | `6` | `1006` | `2006` | `3006` |
-+----------------------------------+---------+---------+---------+----------+
-| `GEOMETRYCOLLECTION` | `7` | `1007` | `2007` | `3007` |
-+----------------------------------+---------+---------+---------+----------+
-| $\texttt{CIRCULARSTRING}^ \star$ | `8` | `1008` | `2008` | `3008` |
-+----------------------------------+---------+---------+---------+----------+
-| $\texttt{COMPOUNDCURVE}^\star$ | `9` | `1009` | `2009` | `3009` |
-+----------------------------------+---------+---------+---------+----------+
-| $\texttt{CURVEPOLYGON}^\star$ | `10` | `1010` | `2010` | `3010` |
-+----------------------------------+---------+---------+---------+----------+
+| | | | | |
+|----------------------------------|--------|---------|---------|----------|
+| **Тип** | **XY** | **XYZ** | **XYM** | **XYZM** |
+| `GEOMETRY` | `0` | `1000` | `2000` | `3000` |
+| `POINT` | `1` | `1001` | `2001` | `3001` |
+| `LINESTRING` | `2` | `1002` | `2002` | `3002` |
+| `POLYGON` | `3` | `1003` | `2003` | `3003` |
+| `MULTIPOINT` | `4` | `1004` | `2004` | `3004` |
+| `MULTILINESTRING` | `5` | `1005` | `2005` | `3005` |
+| `MULTIPOLYGON` | `6` | `1006` | `2006` | `3006` |
+| `GEOMETRYCOLLECTION` | `7` | `1007` | `2007` | `3007` |
+| $\texttt{CIRCULARSTRING}^ \star$ | `8` | `1008` | `2008` | `3008` |
+| $\texttt{COMPOUNDCURVE}^\star$ | `9` | `1009` | `2009` | `3009` |
+| $\texttt{CURVEPOLYGON}^\star$ | `10` | `1010` | `2010` | `3010` |
$\star$ --- зарезервированные типы
@@ -520,11 +489,10 @@ $$
Число $11789422_{10}$ ($\texttt{0x}\color{red}{\texttt{B3}}\color{green}{\texttt{E4}}\color{blue}{\texttt{6E}}_{16}$) можно записать двумя способами:
-+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| | |
+|--------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| $\texttt{Big Endian}$ | $\color{red}{A_{n-1}}...\color{green}{A_1}\color{blue}{A_0} \rightarrow \color{red}{\texttt{1011 0011}}~\color{green}{\texttt{1110 0100}}~\color{blue}{\texttt{0110 1110}}$ |
-+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| $\texttt{Little Endian}$ | $\color{blue}{A_0}\color{green}{A_1}...\color{red}{A_{n-1}} \rightarrow \color{blue}{\texttt{0110 1110}}~\color{green}{\texttt{1110 0100}}~\color{red}{\texttt{1011 0011}}$ |
-+--------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
## IEEE 754 `binary64`
diff --git a/adv_05_PostGIS.qmd b/adv_05_PostGIS.qmd
index d44f16f..79839c3 100644
--- a/adv_05_PostGIS.qmd
+++ b/adv_05_PostGIS.qmd
@@ -65,4 +65,149 @@ mainfont: PT Sans
{width="100%"}
+## Создание пустой БД
+
+**Создание БД** (запрос к любой существующей БД)
+
+``` sql
+CREATE DATABASE satino;
+```
+
+**Создание схемы и активация расширения**
+
+``` sql
+CREATE SCHEMA postgis;
+GRANT USAGE ON schema postgis to public; -- доступ для всех
+CREATE EXTENSION postgis SCHEMA postgis; -- включить postgis для схемы
+CREATE EXTENSION postgis_raster SCHEMA postgis; -- включить растры для схемы
+ALTER DATABASE satino SET search_path=public,postgis; -- добавить в путь поиска
+```
+
+**Проверка установки**
+
+``` sql
+SELECT postgis_full_version();
+```
+
+::: callout-important
+## Внимание
+
+Установка расширения `postgis` через графический интерфейс не позволяет выбрать схему и выполняется в схеме `public`.
+:::
+
+## Типы пространственных данных
+
+В PostGIS существует 4 типа пространственных данных
+
+| | Тип | Особенности |
+|-----|-------------|-------------------------------------------------|
+| 1 | `geometry` | Векторные данные в декартовой системе координат |
+| 2 | `geography` | Векторные данные в угловой системе координат |
+| 3 | `raster` | Растровые данные (многомерные) |
+| 4 | `topology` | Топологические данные (вершины и грани). |
+
+::: callout-note
+## Топологические данные
+
+Тип данных `topology` используется для хранения топологических покрытий и сетевых данных. Для анализа последних применяется отдельное расширение **pgRouting**.
+:::
+
+::: callout-tip
+## Интересный факт
+
+PostGIS позволяет хранить несколько пространственных столбцов в одной таблице
+:::
+
+## Каталог систем координат
+
+::: columns
+::: {.column width="30%"}
+Системы координат хранятся в таблице `spatial_ref_sys`
+
+::: callout-note
+#### SRS vs CRS
+
+Несмотря на то, что каталог имеет называется *SRS (Spatial Reference Systems)*, по факту он хранит описание *CRS (Coordinate Reference Systems)*.
+:::
+
+::: callout-important
+#### Терминология WKT
+
+Терминология WKT при описании CRS может не полностью соответствовать стандартами ISO / OGC
+:::
+:::
+
+::: {.column width="70%"}
+
+:::
+:::
+
+## Создание пространственных таблиц
+
+При создании пространственных таблиц необходимо указать
+
+- уникальный идентификатор
+
+- геометрический столбец заданного типа и КСО
+
+Например, таблица точек гидрологических промеров может иметь следующий состав:
+
+``` sql
+CREATE TABLE postgis.hydro_measures (
+ fid serial primary key,
+ depth real,
+ geom geography(point, 4326)
+)
+```
+
+## Ручное создание данных
+
+Вставка новых строк выполняется посредством стандартной команды INSERT:
+
+``` sql
+INSERT INTO postgis.hydro_measures(fid, depth, geom)
+VALUES
+ (1, 1.23, ST_GeomFromText('POINT (36.37802128 55.21121827)')),
+ (2, 1.57, ST_GeomFromText('POINT (36.37834198 55.21127511)')),
+ (3, 0.78, ST_GeomFromText('POINT (36.37861509 55.21139158)')),
+ (4, 0.95, ST_GeomFromText('POINT (36.37905934 55.21137259)')),
+ (5, 1.11, ST_GeomFromText('POINT (36.37938529 55.21125473)'));
+```
+
+Альтернативный синтаксис через преобразование строки к типу данных:
+
+``` sql
+INSERT INTO postgis.hydro_measures(fid, depth, geom)
+VALUES
+ (1, 1.23, 'POINT (36.37802128 55.21121827)'::geography),
+ (2, 1.57, 'POINT (36.37834198 55.21127511)'::geography),
+ (3, 0.78, 'POINT (36.37861509 55.21139158)'::geography),
+ (4, 0.95, 'POINT (36.37905934 55.21137259)'::geography),
+ (5, 1.11, 'POINT (36.37938529 55.21125473)'::geography);
+```
+
+## Импорт из CSV
+
+Для импорта можно использовать команду `COPY` :
+
+``` sql
+CREATE TABLE IF NOT EXISTS postgis.geo_points (
+ fid serial primary key,
+ name text,
+ comment text,
+ height_abs real,
+ height_add real,
+ type text,
+ x real,
+ y real
+);
+
+DELETE FROM postgis.geo_points; -- опционально, если хотите очистить
+
+COPY postgis.geo_points
+ FROM '/Volumes/Data/Spatial/Satino/geo_points.csv'
+ DELIMITER as ','
+ CSV HEADER;
+```
+
## Библиография
diff --git a/docs/adv_05_PostGIS.html b/docs/adv_05_PostGIS.html
index feb3acd..3e6cf3b 100644
--- a/docs/adv_05_PostGIS.html
+++ b/docs/adv_05_PostGIS.html
@@ -29,6 +29,71 @@
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
vertical-align: middle;
}
+ /* CSS for syntax highlighting */
+ pre > code.sourceCode { white-space: pre; position: relative; }
+ pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
+ pre > code.sourceCode > span:empty { height: 1.2em; }
+ .sourceCode { overflow: visible; }
+ code.sourceCode > span { color: inherit; text-decoration: inherit; }
+ div.sourceCode { margin: 1em 0; }
+ pre.sourceCode { margin: 0; }
+ @media screen {
+ div.sourceCode { overflow: auto; }
+ }
+ @media print {
+ pre > code.sourceCode { white-space: pre-wrap; }
+ pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
+ }
+ pre.numberSource code
+ { counter-reset: source-line 0; }
+ pre.numberSource code > span
+ { position: relative; left: -4em; counter-increment: source-line; }
+ pre.numberSource code > span > a:first-child::before
+ { content: counter(source-line);
+ position: relative; left: -1em; text-align: right; vertical-align: baseline;
+ border: none; display: inline-block;
+ -webkit-touch-callout: none; -webkit-user-select: none;
+ -khtml-user-select: none; -moz-user-select: none;
+ -ms-user-select: none; user-select: none;
+ padding: 0 4px; width: 4em;
+ color: #aaaaaa;
+ }
+ pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
+ div.sourceCode
+ { color: #003b4f; background-color: #f1f3f5; }
+ @media screen {
+ pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
+ }
+ code span { color: #003b4f; } /* Normal */
+ code span.al { color: #ad0000; } /* Alert */
+ code span.an { color: #5e5e5e; } /* Annotation */
+ code span.at { color: #657422; } /* Attribute */
+ code span.bn { color: #ad0000; } /* BaseN */
+ code span.bu { } /* BuiltIn */
+ code span.cf { color: #003b4f; } /* ControlFlow */
+ code span.ch { color: #20794d; } /* Char */
+ code span.cn { color: #8f5902; } /* Constant */
+ code span.co { color: #5e5e5e; } /* Comment */
+ code span.cv { color: #5e5e5e; font-style: italic; } /* CommentVar */
+ code span.do { color: #5e5e5e; font-style: italic; } /* Documentation */
+ code span.dt { color: #ad0000; } /* DataType */
+ code span.dv { color: #ad0000; } /* DecVal */
+ code span.er { color: #ad0000; } /* Error */
+ code span.ex { } /* Extension */
+ code span.fl { color: #ad0000; } /* Float */
+ code span.fu { color: #4758ab; } /* Function */
+ code span.im { color: #00769e; } /* Import */
+ code span.in { color: #5e5e5e; } /* Information */
+ code span.kw { color: #003b4f; } /* Keyword */
+ code span.op { color: #5e5e5e; } /* Operator */
+ code span.ot { color: #003b4f; } /* Other */
+ code span.pp { color: #ad0000; } /* Preprocessor */
+ code span.sc { color: #5e5e5e; } /* SpecialChar */
+ code span.ss { color: #20794d; } /* SpecialString */
+ code span.st { color: #20794d; } /* String */
+ code span.va { color: #111111; } /* Variable */
+ code span.vs { color: #20794d; } /* VerbatimString */
+ code span.wa { color: #5e5e5e; font-style: italic; } /* Warning */
@@ -338,7 +403,7 @@
PostGIS
-
21 сентября 2023 г.
+
24 сентября 2023 г.
Базовые библиотеки
@@ -374,6 +439,183 @@
Структура схемы
Структура схемы (продолжение)
+
+
Создание пустой БД
+
Создание БД (запрос к любой существующей БД)
+
CREATEDATABASE satino;
+
Создание схемы и активация расширения
+
CREATESCHEMA postgis;
+GRANTUSAGEONschema postgis topublic; -- доступ для всех
+CREATE EXTENSION postgis SCHEMA postgis; -- включить postgis для схемы
+CREATE EXTENSION postgis_raster SCHEMA postgis; -- включить растры для схемы
+ALTERDATABASE satino SET search_path=public,postgis; -- добавить в путь поиска
+
Проверка установки
+
SELECT postgis_full_version();
+
+
+
+
+
+
+
Внимание
+
+
+
Установка расширения postgis через графический интерфейс не позволяет выбрать схему и выполняется в схеме public.
+
+
+
+
+
+
Типы пространственных данных
+
В PostGIS существует 4 типа пространственных данных
+
+
+
+
+
Тип
+
Особенности
+
+
+
+
+
1
+
geometry
+
Векторные данные в декартовой системе координат
+
+
+
2
+
geography
+
Векторные данные в угловой системе координат
+
+
+
3
+
raster
+
Растровые данные (многомерные)
+
+
+
4
+
topology
+
Топологические данные (вершины и грани).
+
+
+
+
+
+
+
+
+
+
Топологические данные
+
+
+
Тип данных topology используется для хранения топологических покрытий и сетевых данных. Для анализа последних применяется отдельное расширение pgRouting.
+
+
+
+
+
+
+
+
+
+
Интересный факт
+
+
+
PostGIS позволяет хранить несколько пространственных столбцов в одной таблице
+
+
+
+
+
+
Каталог систем координат
+
+
+
Системы координат хранятся в таблице spatial_ref_sys
+
+
+
+
+
+
+
SRS vs CRS
+
+
+
Несмотря на то, что каталог имеет называется SRS (Spatial Reference Systems), по факту он хранит описание CRS (Coordinate Reference Systems).
+
+
+
+
+
+
+
+
+
+
Терминология WKT
+
+
+
Терминология WKT при описании CRS может не полностью соответствовать стандартами ISO / OGC
+
+
+
+
+
+
+
+
+
+
Создание пространственных таблиц
+
При создании пространственных таблиц необходимо указать
+
+
уникальный идентификатор
+
геометрический столбец заданного типа и КСО
+
+
Например, таблица точек гидрологических промеров может иметь следующий состав: