diff --git a/_freeze/adv_06_Topology/execute-results/html.json b/_freeze/adv_06_Topology/execute-results/html.json index 03948c8..e75e0ac 100644 --- a/_freeze/adv_06_Topology/execute-results/html.json +++ b/_freeze/adv_06_Topology/execute-results/html.json @@ -1,7 +1,7 @@ { - "hash": "9e3454fde983b620ebcf8a13cebb9bc5", + "hash": "fd4381aa0add39d719978776e12143d0", "result": { - "markdown": "---\ntitle: \"Топологические отношения\"\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Модели топологических отношений разработаны в первой половине 90-х гг. ХХ в.:\n\n1. Модель 4 пересечений **4IM** [@egenhofer1991].\n2. Модель 9 пересечений **9IM** [@egenhofer1991a; @egenhofer1991b].\n3. Модель 4 пересечений с размерностью **DE-4IM** [@clementini1993].\n4. Аналитическая модель **CBM** [@clementini1993].\n5. Модель 9 пересечений с размерностью **DE-9IM** [@clementini1995].\n\nНаибольший вклад внесли два ученых:\n\n- [**Max Egenhofer**](https://scholar.google.de/citations?user=wS3m298AAAAJ&hl=en) (*University of Maine, USA*)\n\n- [**Eliseo Clementini**](https://scholar.google.com/citations?user=d6i4GswAAAAJ&hl=ru) (*University of L'Aquila, Italy*)\n\n## Обозначения\n\n::: columns\n::: {.column width=\"50%\"}\n| | |\n|--------------------|----------------------------|\n| $P$ | точка |\n| $L$ | линия |\n| $A$ | полигон |\n| $\\lambda$ | $P|L|A$ |\n| $\\partial$ | граница |\n| $^\\circ$ | внутренность |\n| $^-$ | внешняя область |\n| $\\cap$ | пересечение |\n| $\\varnothing$ | пустое множество |\n| $\\neg \\varnothing$ | непустое множество |\n| $-$ | нуль (отсутствие значения) |\n:::\n\n::: {.column width=\"50%\"}\n**Вычисление размерности**\n\nФункция $\\dim(S)$ применительно к произвольному множеству точек $S$ дает следующие значения:\n\n| | |\n|----------------|--------------------------------------------------------|\n| $-$ | если $S = \\varnothing$ |\n| $0$ | если $S$ содержит хотя бы одну точку и не содержит линий и полигонов |\n| $1$ | если $S$ содержит хотя бы одну линию и не содержит полигонов |\n| $2$ | если $S$ содержит хотя бы один полигон |\n:::\n:::\n\n## Определения\n\n**Граница**\n\n- $\\partial P$: граница точки всегда пуста ($\\partial P = \\varnothing$)\n\n- $\\partial L$: граница линии состоит из ее конечных точек или пуста если линия замкнута\n\n- $\\partial A$: граница полигона состоит из кривых, представляющих его предельные точки\n\n**Внутренность** произвольного объекта $\\lambda$ определяется как:\n\n$$\n\\lambda^\\circ = \\lambda - \\partial \\lambda\n$$\n\n**Внешняя область** произвольного объекта $\\lambda$ определяется как:\n\n$$\n\\lambda^- = \\mathbb R^2 - \\lambda\n$$\n\n## Модель 4-пересечений 4IM\n\n- Анализ пересечений внутренней области и границы двух объектов $\\lambda_1$ и $\\lambda_2$.\n\n- Каждое пересечение может быть пустым ($\\varnothing$) или не пустым ($\\neg \\varnothing$), что дает $2^4 = 16$ комбинаций.\n\n::: columns\n::: {.column width=\"60%\"}\nКаждая комбинация представляется в виде матрицы пересечений\n\n$$\nM=\\begin{pmatrix}\n\\lambda_1^\\circ \\cap \\lambda_2^\\circ & \\lambda_1^\\circ \\cap \\partial \\lambda_2 \\\\\n\\partial \\lambda_1 \\cap \\lambda_2^\\circ & \\partial \\lambda_1 \\cap \\partial \\lambda_2\n\\end{pmatrix}\n$$\n\n::: callout-note\n## Обратные отношения\n\nСоответствуют матрицам $M_1$ и $M_2$, для которых справедливо $M_1 = M_2^T$\n:::\n:::\n\n::: {.column width=\"40%\"}\n| $\\lambda_1 \\lambda_2$ | Возможно | Без обратных |\n|-----------------------|----------|--------------|\n| $AA$ | 8 | 6 |\n| $LA$ | 11 | 11 |\n| $PA$ | 3 | 3 |\n| $LL$ | 16 | 12 |\n| $PL$ | 3 | 3 |\n| $PP$ | 2 | 2 |\n| | *Итого* | *37* |\n:::\n:::\n\n## Модель 9-пересечений 9IM\n\n- Анализ пересечений внутренней области, границы и внешней области двух объектов $\\lambda_1$ и $\\lambda_2$.\n\n- Cочетания пустых ($\\varnothing$) и не пустых ($\\neg \\varnothing$) дают $2^9 = 512$ комбинаций.\n\n::: columns\n::: {.column width=\"60%\"}\nКаждая комбинация представляется в виде матрицы пересечений\n\n$$\nM=\\begin{pmatrix}\n\\lambda_1^\\circ \\cap \\lambda_2^\\circ & \\lambda_1^\\circ \\cap \\partial \\lambda_2 & \\lambda_1^\\circ \\cap \\lambda_2^- \\\\\n\\partial \\lambda_1 \\cap \\lambda_2^\\circ & \\partial \\lambda_1 \\cap \\partial \\lambda_2 & \\partial \\lambda_1 \\cap \\lambda_2^- \\\\\n\\lambda_1^- \\cap \\lambda_2^\\circ & \\lambda_1^- \\cap \\partial \\lambda_2 & \\lambda_1^- \\cap \\lambda_2^-\n\\end{pmatrix}\n$$\n\n::: callout-note\n## Обратите внимание\n\nЧисло комбинаций меняется только между линиями ($LL$) и между линиями и полигонами ($LA$).\n:::\n:::\n\n::: {.column width=\"40%\"}\n| $\\lambda_1\\lambda_2$ | Возможно | Без обратных |\n|----------------------|----------|--------------|\n| $AA$ | 8 | 6 |\n| $LA$ | 19 | 19 |\n| $PA$ | 3 | 3 |\n| $LL$ | 33 | 23 |\n| $PL$ | 3 | 3 |\n| $PP$ | 2 | 2 |\n| | *Итого* | *56* |\n:::\n:::\n\n## Модель 4-п. с размерностью DE-4IM\n\n- Анализ пересечений внутренней области и границы двух объектов $\\lambda_1$ и $\\lambda_2$.\n\n- Размерность пересечения может быть $-, 0, 1, 2$, что дает $4^4 =256$ комбинаций.\n\n::: columns\n::: {.column width=\"60%\"}\nКаждая комбинация представляется в виде матрицы пересечений\n\n$$\nM=\\begin{pmatrix}\n\\dim(\\lambda_1^\\circ \\cap \\lambda_2^\\circ) & \\dim(\\lambda_1^\\circ \\cap \\partial \\lambda_2) \\\\\n\\dim(\\partial \\lambda_1 \\cap \\lambda_2^\\circ) & \\dim(\\partial \\lambda_1 \\cap \\partial \\lambda_2)\n\\end{pmatrix}\n$$\n\n::: callout-note\n## Максимальная размерность пересечения\n\nМеньше или равна минимальной размерности объектов, участвующих в пересечении\n:::\n:::\n\n::: {.column width=\"40%\"}\n| $\\lambda_1 \\lambda_2$ | Возможно | Без обратных |\n|-----------------------|----------|--------------|\n| $AA$ | 12 | 9 |\n| $LA$ | 17 | 17 |\n| $PA$ | 3 | 3 |\n| $LL$ | 24 | 18 |\n| $PL$ | 3 | 3 |\n| $PP$ | 2 | 2 |\n| | *Итого* | *52* |\n:::\n:::\n\n## Подсчет реальных комбинаций\n\nДля подсчета реальных комбинаций необходимо посмотреть на возможные размерности пересечений\n\n$$\n\\begin{pmatrix}\n\\dim(L^\\circ \\cap A^\\circ) & \\dim(L^\\circ \\cap \\partial A) \\\\\n\\dim(\\partial L \\cap A^\\circ) & \\dim(\\partial L \\cap \\partial A)\n\\end{pmatrix} = \n\\begin{pmatrix}\n\\{-,1\\} & \\{-, 0, 1\\} \\\\\n\\{-,0\\} & \\{-,0\\}\n\\end{pmatrix}\n$$\n\n$$\n\\begin{pmatrix}\n\\dim(L_1^\\circ \\cap L_2^\\circ) & \\dim(L_1^\\circ \\cap \\partial L_2) \\\\\n\\dim(\\partial L_1 \\cap L_2^\\circ) & \\dim(\\partial L_1 \\cap \\partial L_2)\n\\end{pmatrix} = \n\\begin{pmatrix}\n\\{-,0,1\\} & \\{-, 0\\} \\\\\n\\{-,0\\} & \\{-,0\\}\n\\end{pmatrix}\n$$\n\n$$\n\\begin{pmatrix}\n\\dim(A_1^\\circ \\cap A_2^\\circ) & \\dim(A_1^\\circ \\cap \\partial A_2) \\\\\n\\dim(\\partial A_1 \\cap A_2^\\circ) & \\dim(\\partial A_1 \\cap \\partial A_2)\n\\end{pmatrix} = \n\\begin{pmatrix}\n\\{-,2\\} & \\{-, 1\\} \\\\\n\\{-, 1\\} & \\{-,0,1\\}\n\\end{pmatrix}\n$$\n\nВ каждом случае остается 24 комбинации из 256. Из них убираются невозможные и обратные друг другу отношения.\n\n## Модель 9-п. с размерностью DE-9IM\n\n- Анализ пересечений внутренней области, границы и внешней области двух объектов $\\lambda_1$ и $\\lambda_2$.\n\n- Размерность пересечения может быть $-, 0, 1, 2$, что дает $4^9 =262144$ комбинаций.\n\nКаждая комбинация представляется в виде матрицы пересечений\n\n$$\nM=\\begin{pmatrix}\n\\dim(\\lambda_1^\\circ \\cap \\lambda_2^\\circ) & \\dim(\\lambda_1^\\circ \\cap \\partial \\lambda_2) & \\dim(\\lambda_1^\\circ \\cap \\lambda_2^-) \\\\\n\\dim(\\partial \\lambda_1 \\cap \\lambda_2^\\circ) & \\dim(\\partial \\lambda_1 \\cap \\partial \\lambda_2) & \\dim(\\partial \\lambda_1 \\cap \\lambda_2^-) \\\\\n\\dim(\\lambda_1^- \\cap \\lambda_2^\\circ) & \\dim(\\lambda_1^- \\cap \\partial \\lambda_2) & \\dim(\\lambda_1^- \\cap \\lambda_2^-)\n\\end{pmatrix}\n$$\n\n## Модель 9-пересечений с размерностью\n\n::: columns\n::: {.column width=\"60%\"}\n- Анализ пересечений внутренней области, границы и внешней области двух объектов $\\lambda_1$ и $\\lambda_2$.\n\n- Размерность пересечения может быть $-, 0, 1, 2$, что дает $4^9 =262144$ комбинаций.\n\n::: callout-note\n## DE-9IM\n\nМодель DE-9IM описывает наиболее полный спектр топологических отношений и поддерживается в большинстве систем управления базами пространственных данных.\n:::\n:::\n\n::: {.column width=\"40%\"}\n| $\\lambda_1 \\lambda_2$ | Возможно | Без обратных |\n|-----------------------|----------|--------------|\n| $AA$ | 12 | 9 |\n| $LA$ | 31 | 31 |\n| $PA$ | 3 | 3 |\n| $LL$ | 36 | 33 |\n| $PL$ | 3 | 3 |\n| $PP$ | 2 | 2 |\n| | *Итого* | *81* |\n:::\n:::\n\n## **DE-4/9IM (01-08) точки**\n\n{width=\"100%\"}\n\n## **DE-4/9IM (09-17) полигоны**\n\n{width=\"100%\"}\n\n## **DE-4/9IM (18-25) линии/полигоны**\n\n{width=\"100%\"}\n\n## **DE-4/9IM (26-33) линии/полигоны**\n\n{width=\"100%\"}\n\n## **DE-4/9IM (34-43) линии/полигоны**\n\n{width=\"100%\"}\n\n## **DE-4/9IM (44-48) линии/полигоны**\n\n{width=\"100%\"}\n\n## **DE-4/9IM (49-58) линии**\n\n{width=\"100%\"}\n\n## **DE-4/9IM (59-69) линии**\n\n{width=\"100%\"}\n\n## **DE-4/9IM (70-78) линии**\n\n{width=\"100%\"}\n\n## **DE-4/9IM (79-81) линии**\n\n{width=\"100%\"}\n\n## Calculus-based model (CBM)\n\nБазируется на 5 отношениях и операторах границы для полигона ($A$) и линии ($L$).\n\n| | |\n|------------------|------------------------------------------------------|\n| $\\langle\\lambda_1, touch, \\lambda_2\\rangle$ | $(\\lambda_1^\\circ \\cap \\lambda_2^\\circ = \\varnothing) \\land (\\lambda_1 \\cap \\lambda_2 \\neq \\varnothing)$ |\n| $\\langle\\lambda_1, in, \\lambda_2\\rangle$ | $(\\lambda_1^\\circ \\cap \\lambda_2^\\circ \\neq \\varnothing) \\land (\\lambda_1 \\cap \\lambda_2 = \\lambda_1)$ |\n| $\\langle\\lambda_1, cross, \\lambda_2\\rangle$ | $(\\dim(\\lambda_1^\\circ \\cap \\lambda_2^\\circ) = \\max(\\dim(\\lambda_1^\\circ), \\dim(\\lambda_2^\\circ)) - 1)\\\\\\land (\\lambda_1 \\cap \\lambda_2 \\neq \\lambda_1) \\land (\\lambda_1 \\cap \\lambda_2 \\neq \\lambda_2)$ |\n| $\\langle\\lambda_1, overlap, \\lambda_2\\rangle$ | $(\\dim(\\lambda_1^\\circ) = \\dim(\\lambda_2^\\circ) = \\dim(\\lambda_1^\\circ \\cap \\lambda_2^\\circ))\\\\\\land (\\lambda_1 \\cap \\lambda_2 \\neq \\lambda_1) \\land (\\lambda_1 \\cap \\lambda_2 \\neq \\lambda_2)$ |\n| $\\langle\\lambda_1, disjoint, \\lambda_2\\rangle$ | $\\lambda_1 \\cap \\lambda_2 = \\varnothing$ |\n| $(A, b)$ | $\\partial A$ |\n| $(L, f), (L, t)$ | $\\partial L = \\{f, t\\}$ |\n| $\\lambda$ | $A~|~L~|~P~|~(A,b)~|~(L,f)~|~(L,t)$ |\n\n## CBM и DE-9IM (touch, in)\n\nМожно доказать эквивалентность моделей **CBM** и **DE-9IM**, расписав каждое отношение в прямую и обратную сторону.\n\n$$\n\\color{red}{\\langle\\lambda_1, touch, \\lambda_2\\rangle} \\Leftrightarrow \\Big(\\dim(\\lambda_1^\\circ \\cap \\lambda_2^\\circ) = -\\Big) \\\\ \\land \\Big(\\big(\\dim(\\partial \\lambda_1 \\cap \\lambda_2^\\circ) \\neq -\\big) \\lor \\big(\\dim(\\lambda_1^\\circ \\cap \\partial \\lambda_2) \\neq - \\big) \\lor \\big(\\dim(\\partial \\lambda_1 \\cap \\partial \\lambda_2) \\neq -\\big)\\Big)\n$$\n\n$$\n\\color{red}{\\langle\\lambda_1, in, \\lambda_2\\rangle} \\Leftrightarrow \\big(\\dim(\\lambda_1^\\circ \\cap \\lambda_2^\\circ) \\neq -\\big) \\\\ \\land \\big(\\dim(\\lambda_1^\\circ \\cap \\lambda_2^-) = -\\big) \\land \\big(\\dim(\\partial \\lambda_1 \\cap \\lambda_2^-) = - \\big)\n$$\n\n::: callout-note\n## Обратите внимание\n\nДля определения отношений **touch** и **in** не требуется уточнять топологическую размерность геометрии\n:::\n\n## CBM и DE-9IM (cross, overlap)\n\n$$\n\\color{red}{\\langle L, cross, A\\rangle} \\Leftrightarrow \\big(\\dim(L^\\circ \\cap A^\\circ) \\neq -\\big) \\land \\big(\\dim(L^\\circ \\cap A^-) \\neq -\\big)\n$$\n\n$$\n\\color{red}{\\langle L_1, cross, L_2\\rangle} \\Leftrightarrow \\dim(L_1^\\circ \\cap L_2^\\circ) = 0\n$$\n\n$$\n\\color{red}{\\langle A_1, overlap, A_2\\rangle} \\Leftrightarrow \\big(\\dim(A_1^\\circ \\cap A_2^\\circ) \\neq -\\big) \\\\ \\land \\big(\\dim(A_1^\\circ \\cap A_2^-) \\neq -\\big) \\land \\big(\\dim(A_1^- \\cap A_2^\\circ) \\neq - \\big)\n$$\n\n$$\n\\color{red}{\\langle L_1, overlap, L_2\\rangle} \\Leftrightarrow \\big(\\dim(L_1^\\circ \\cap L_2^\\circ) = 1 \\big) \\\\ \\land \\big(\\dim(L_1^\\circ \\cap L_2^-) \\neq -\\big) \\land \\big(\\dim(L_1^- \\cap L_2^\\circ) \\neq - \\big)\n$$\n\n::: callout-note\n## Обратите внимание\n\nОтношение **cross** определено только для линий. Отношение **overlap** определено для геометрий одинаковой топологической размерности (но не точек).\n:::\n\n## CBM и DE-9IM (disjoint, equals)\n\n$$\n\\color{red}{\\langle\\lambda_1, disjoint, \\lambda_2\\rangle} \\Leftrightarrow \\big(\\dim(\\lambda_1^\\circ \\cap \\lambda_2^\\circ) = -\\big) \\\\ \\land \\big(\\dim(\\partial \\lambda_1 \\cap \\lambda_2^\\circ) = -\\big) \\land \\big(\\dim(\\lambda_1^\\circ \\cap \\partial \\lambda_2) = - \\big) \\land \\big(\\dim(\\partial \\lambda_1 \\cap \\partial \\lambda_2) = -\\big)\n$$\n\nОтношение **equals** в модели CBM не определено, но его можно развернуть следующим образом:\n\n$$\n\\color{green}{\\langle \\lambda_1, equals, \\lambda_2\\rangle} \\Leftrightarrow \\big(\\dim(\\lambda_1^\\circ \\cap \\lambda_2^\\circ) \\neq - \\big) \\\\ \\land \\big(\\dim(\\lambda_1^\\circ \\cap \\lambda_2^-) = - \\big) \\land \\big(\\dim(\\partial \\lambda_1 \\cap \\lambda_2^-) = - \\big) \\\\ \\land \\big(\\dim(\\lambda_1^- \\cap \\lambda_2^\\circ) = - \\big) \\land \\big(\\dim(\\lambda_1^- \\cap \\partial \\lambda_2) = - \\big)\n$$\n\n## CBM и DE-9IM (частные случаи)\n\n**Граница полигона внутри другого объекта (без уточнения размерности)**\n\n$$\n\\color{blue}{\\langle (A, b), in, \\lambda\\rangle} \\Leftrightarrow \\big( \\dim(\\partial A \\cap \\lambda^\\circ) \\neq - \\big) \\land \\big(\\dim(\\partial A \\cap \\lambda^-) \\neq - \\big) \\\\ \\Leftrightarrow \\Big(\\dim\\big((\\partial A)^\\circ \\cap \\lambda^\\circ \\big) \\neq - \\Big) \\land \\Big(\\dim\\big((\\partial A)^\\circ \\cap \\lambda^- \\big) = - \\Big) \\land \\Big(\\dim\\big(\\partial(\\partial A) \\cap \\lambda^- \\big) = - \\Big)\n$$\n\n**Одна граничная точка линии касается полигона, а вторая нет**\n\n$$\n\\color{blue}{\\langle (L, f), touch, A \\rangle \\land \\langle (L, t), disjoint, A \\rangle} \\\\ \\Leftrightarrow \\big( \\dim(\\partial L \\cap \\partial A) = 0 \\big) \\land \\big( \\dim (\\partial L \\cap A^-) = 0 \\big)\n$$\n\n::: callout-tip\n## А остальные?\n\nАналогичным образом можно определить эквивалентность моделей для каждого из 81 случая модели DE-8IM, а также их генерализаций DE-4IM.\n:::\n\n## ISO/IEC 13249:2016 SQL/MM Part 3: Spatial\n\nВ стандарте определены SQL-функции для работы с пространственными данными:\n\n| Функция | CBM / DE-8IM | OGC Simple Features | SQL/MM | PostGIS |\n|-----------------|-------------------|--------------------|---------|---------|\n| `ST_Equals` | $\\color{green}{\\langle\\lambda_1, equals, \\lambda_2\\rangle}$ | `a.Equals(b)` | ✓ | ✓ |\n| `ST_Disjoint` | $\\langle\\lambda_1, disjoint, \\lambda_2\\rangle$ | `a.Disjoint(b)` | ✓ | ✓ |\n| `ST_Intersects` | $\\lnot\\langle\\lambda_1, disjoint, \\lambda_2\\rangle$ | `a.Intersects(b)` | ✓ | ✓ |\n| `ST_Touches` | $\\langle\\lambda_1, touch, \\lambda_2\\rangle$ | `a.Touches(b)` | ✓ | ✓ |\n\n{width=\"100%\"}\n\n## ISO/IEC 13249:2016 SQL/MM Part 3: Spatial\n\nВ стандарте определены SQL-функции для работы с пространственными данными:\n\n| Функция | CBM / DE-8IM | OGC Simple Features | SQL/MM | PostGIS |\n|----------------|------------------|--------------------|----------|----------|\n| `ST_Crosses` | $\\langle\\lambda_1, cross, \\lambda_2\\rangle$ | `a.Crosses(b)` | ✓ | ✓ |\n| `ST_Within` | $\\langle \\color{red}{\\lambda_1}, in, \\color{blue}{\\lambda_2}\\rangle$ | `a.Within(b)` | ✓ | ✓ |\n| `ST_Contains` | $\\langle \\color{blue}{\\lambda_2}, in, \\color{red}{\\lambda_1}\\rangle$ | `a.Contains(b)` | ✓ | ✓ |\n| `ST_Overlaps` | $\\langle\\lambda_1, overlap, \\lambda_2\\rangle$ | `a.Overlaps(b)` | ✓ | ✓ |\n\n{width=\"100%\"}\n\n## Дополнительные функции PostGIS\n\nДополнительно к `ST_Contains` в PostGIS определены функции:\n\n| Функция | CBM / DE-8IM | PostGIS |\n|--------------------|---------------------------------|--------------------|\n| `ST_CoveredBy` | $\\langle \\color{red}{\\lambda_1}, in, \\color{blue}{\\lambda_2}\\rangle \\lor \\langle \\color{red}{\\lambda_1}, in, \\color{blue}{(\\lambda_2,b)}\\rangle$ | ✓ |\n| `ST_Covers` | $\\langle \\color{blue}{\\lambda_2}, in, \\color{red}{\\lambda_1}\\rangle \\lor \\langle \\color{blue}{\\lambda_2}, in, \\color{red}{(\\lambda_1,b)}\\rangle$ | ✓ |\n| `ST_ContainsProperly` | $\\langle \\color{blue}{\\lambda_2}, in, \\color{red}{\\lambda_1}\\rangle \\land \\langle \\color{blue}{\\lambda_2}, disjoint, \\color{red}{(\\lambda_1,b)}\\rangle$ | ✓ |\n\n{width=\"100%\"}\n\n## Contains, ContainsProperly, Covers\n\nДанные топологические отношения различаются следующим образом:\n\n| Функция | Множества | Пояснение |\n|--------------------|------------|-----------------------------------------|\n| `ST_Contains` | $\\lambda_2^\\circ \\subset \\lambda_1^\\circ$ | внутренность второго объекта располагается во внутренности первого |\n| `ST_ContainsProperly` | $\\lambda_2 \\subset \\lambda_1^\\circ$ | второй объект располагается во внутренности первого |\n| `ST_Covers` | $\\lambda_2 \\subset \\lambda_1$ | второй объект располагается внутри первого |\n\n## Геометрическое равенство\n\n**Геометрическое равенство** означает, что геометрии совпадают с точностью до внутреннего представления.\n\n## Библиография\n", + "markdown": "---\ntitle: \"Топологические отношения\"\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Модели топологических отношений разработаны в первой половине 90-х гг. ХХ в.:\n\n1. Модель 4 пересечений **4IM** [@egenhofer1991].\n2. Модель 9 пересечений **9IM** [@egenhofer1991a; @egenhofer1991b].\n3. Модель 4 пересечений с размерностью **DE-4IM** [@clementini1993].\n4. Аналитическая модель **CBM** [@clementini1993].\n5. Модель 9 пересечений с размерностью **DE-9IM** [@clementini1995].\n\nНаибольший вклад внесли два ученых:\n\n- [**Max Egenhofer**](https://scholar.google.de/citations?user=wS3m298AAAAJ&hl=en) (*University of Maine, USA*)\n\n- [**Eliseo Clementini**](https://scholar.google.com/citations?user=d6i4GswAAAAJ&hl=ru) (*University of L'Aquila, Italy*)\n\n## Обозначения\n\n::: columns\n::: {.column width=\"50%\"}\n| | |\n|--------------------|----------------------------|\n| $P$ | точка |\n| $L$ | линия |\n| $A$ | полигон |\n| $\\lambda$ | $P|L|A$ |\n| $\\partial$ | граница |\n| $^\\circ$ | внутренность |\n| $^-$ | внешняя область |\n| $\\cap$ | пересечение |\n| $\\varnothing$ | пустое множество |\n| $\\neg \\varnothing$ | непустое множество |\n| $-$ | нуль (отсутствие значения) |\n:::\n\n::: {.column width=\"50%\"}\n**Вычисление размерности**\n\nФункция $\\dim(S)$ применительно к произвольному множеству точек $S$ дает следующие значения:\n\n| | |\n|----------------|--------------------------------------------------------|\n| $-$ | если $S = \\varnothing$ |\n| $0$ | если $S$ содержит хотя бы одну точку и не содержит линий и полигонов |\n| $1$ | если $S$ содержит хотя бы одну линию и не содержит полигонов |\n| $2$ | если $S$ содержит хотя бы один полигон |\n:::\n:::\n\n## Определения\n\n**Граница**\n\n- $\\partial P$: граница точки всегда пуста ($\\partial P = \\varnothing$)\n\n- $\\partial L$: граница линии состоит из ее конечных точек или пуста если линия замкнута\n\n- $\\partial A$: граница полигона состоит из кривых, представляющих его предельные точки\n\n**Внутренность** произвольного объекта $\\lambda$ определяется как:\n\n$$\n\\lambda^\\circ = \\lambda - \\partial \\lambda\n$$\n\n**Внешняя область** произвольного объекта $\\lambda$ определяется как:\n\n$$\n\\lambda^- = \\mathbb R^2 - \\lambda\n$$\n\n## Модель 4-пересечений 4IM\n\n- Анализ пересечений внутренней области и границы двух объектов $\\lambda_1$ и $\\lambda_2$.\n\n- Каждое пересечение может быть пустым ($\\varnothing$) или не пустым ($\\neg \\varnothing$), что дает $2^4 = 16$ комбинаций.\n\n::: columns\n::: {.column width=\"60%\"}\nКаждая комбинация представляется в виде матрицы пересечений\n\n$$\nM=\\begin{pmatrix}\n\\lambda_1^\\circ \\cap \\lambda_2^\\circ & \\lambda_1^\\circ \\cap \\partial \\lambda_2 \\\\\n\\partial \\lambda_1 \\cap \\lambda_2^\\circ & \\partial \\lambda_1 \\cap \\partial \\lambda_2\n\\end{pmatrix}\n$$\n\n::: callout-note\n## Обратные отношения\n\nСоответствуют матрицам $M_1$ и $M_2$, для которых справедливо $M_1 = M_2^T$\n:::\n:::\n\n::: {.column width=\"40%\"}\n| $\\lambda_1 \\lambda_2$ | Возможно | Без обратных |\n|-----------------------|----------|--------------|\n| $AA$ | 8 | 6 |\n| $LA$ | 11 | 11 |\n| $PA$ | 3 | 3 |\n| $LL$ | 16 | 12 |\n| $PL$ | 3 | 3 |\n| $PP$ | 2 | 2 |\n| | *Итого* | *37* |\n:::\n:::\n\n## Модель 9-пересечений 9IM\n\n- Анализ пересечений внутренней области, границы и внешней области двух объектов $\\lambda_1$ и $\\lambda_2$.\n\n- Cочетания пустых ($\\varnothing$) и не пустых ($\\neg \\varnothing$) дают $2^9 = 512$ комбинаций.\n\n::: columns\n::: {.column width=\"60%\"}\nКаждая комбинация представляется в виде матрицы пересечений\n\n$$\nM=\\begin{pmatrix}\n\\lambda_1^\\circ \\cap \\lambda_2^\\circ & \\lambda_1^\\circ \\cap \\partial \\lambda_2 & \\lambda_1^\\circ \\cap \\lambda_2^- \\\\\n\\partial \\lambda_1 \\cap \\lambda_2^\\circ & \\partial \\lambda_1 \\cap \\partial \\lambda_2 & \\partial \\lambda_1 \\cap \\lambda_2^- \\\\\n\\lambda_1^- \\cap \\lambda_2^\\circ & \\lambda_1^- \\cap \\partial \\lambda_2 & \\lambda_1^- \\cap \\lambda_2^-\n\\end{pmatrix}\n$$\n\n::: callout-note\n## Обратите внимание\n\nЧисло комбинаций меняется только между линиями ($LL$) и между линиями и полигонами ($LA$).\n:::\n:::\n\n::: {.column width=\"40%\"}\n| $\\lambda_1\\lambda_2$ | Возможно | Без обратных |\n|----------------------|----------|--------------|\n| $AA$ | 8 | 6 |\n| $LA$ | 19 | 19 |\n| $PA$ | 3 | 3 |\n| $LL$ | 33 | 23 |\n| $PL$ | 3 | 3 |\n| $PP$ | 2 | 2 |\n| | *Итого* | *56* |\n:::\n:::\n\n## Модель 4-п. с размерностью DE-4IM\n\n- Анализ пересечений внутренней области и границы двух объектов $\\lambda_1$ и $\\lambda_2$.\n\n- Размерность пересечения может быть $-, 0, 1, 2$, что дает $4^4 =256$ комбинаций.\n\n::: columns\n::: {.column width=\"60%\"}\nКаждая комбинация представляется в виде матрицы пересечений\n\n$$\nM=\\begin{pmatrix}\n\\dim(\\lambda_1^\\circ \\cap \\lambda_2^\\circ) & \\dim(\\lambda_1^\\circ \\cap \\partial \\lambda_2) \\\\\n\\dim(\\partial \\lambda_1 \\cap \\lambda_2^\\circ) & \\dim(\\partial \\lambda_1 \\cap \\partial \\lambda_2)\n\\end{pmatrix}\n$$\n\n::: callout-note\n## Максимальная размерность пересечения\n\nМеньше или равна минимальной размерности объектов, участвующих в пересечении\n:::\n:::\n\n::: {.column width=\"40%\"}\n| $\\lambda_1 \\lambda_2$ | Возможно | Без обратных |\n|-----------------------|----------|--------------|\n| $AA$ | 12 | 9 |\n| $LA$ | 17 | 17 |\n| $PA$ | 3 | 3 |\n| $LL$ | 24 | 18 |\n| $PL$ | 3 | 3 |\n| $PP$ | 2 | 2 |\n| | *Итого* | *52* |\n:::\n:::\n\n## Подсчет реальных комбинаций\n\nДля подсчета реальных комбинаций необходимо посмотреть на возможные размерности пересечений\n\n$$\n\\begin{pmatrix}\n\\dim(L^\\circ \\cap A^\\circ) & \\dim(L^\\circ \\cap \\partial A) \\\\\n\\dim(\\partial L \\cap A^\\circ) & \\dim(\\partial L \\cap \\partial A)\n\\end{pmatrix} = \n\\begin{pmatrix}\n\\{-,1\\} & \\{-, 0, 1\\} \\\\\n\\{-,0\\} & \\{-,0\\}\n\\end{pmatrix}\n$$\n\n$$\n\\begin{pmatrix}\n\\dim(L_1^\\circ \\cap L_2^\\circ) & \\dim(L_1^\\circ \\cap \\partial L_2) \\\\\n\\dim(\\partial L_1 \\cap L_2^\\circ) & \\dim(\\partial L_1 \\cap \\partial L_2)\n\\end{pmatrix} = \n\\begin{pmatrix}\n\\{-,0,1\\} & \\{-, 0\\} \\\\\n\\{-,0\\} & \\{-,0\\}\n\\end{pmatrix}\n$$\n\n$$\n\\begin{pmatrix}\n\\dim(A_1^\\circ \\cap A_2^\\circ) & \\dim(A_1^\\circ \\cap \\partial A_2) \\\\\n\\dim(\\partial A_1 \\cap A_2^\\circ) & \\dim(\\partial A_1 \\cap \\partial A_2)\n\\end{pmatrix} = \n\\begin{pmatrix}\n\\{-,2\\} & \\{-, 1\\} \\\\\n\\{-, 1\\} & \\{-,0,1\\}\n\\end{pmatrix}\n$$\n\nВ каждом случае остается 24 комбинации из 256. Из них убираются невозможные и обратные друг другу отношения.\n\n## Модель 9-п. с размерностью DE-9IM\n\n- Анализ пересечений внутренней области, границы и внешней области двух объектов $\\lambda_1$ и $\\lambda_2$.\n\n- Размерность пересечения может быть $-, 0, 1, 2$, что дает $4^9 =262144$ комбинаций.\n\nКаждая комбинация представляется в виде матрицы пересечений\n\n$$\nM=\\begin{pmatrix}\n\\dim(\\lambda_1^\\circ \\cap \\lambda_2^\\circ) & \\dim(\\lambda_1^\\circ \\cap \\partial \\lambda_2) & \\dim(\\lambda_1^\\circ \\cap \\lambda_2^-) \\\\\n\\dim(\\partial \\lambda_1 \\cap \\lambda_2^\\circ) & \\dim(\\partial \\lambda_1 \\cap \\partial \\lambda_2) & \\dim(\\partial \\lambda_1 \\cap \\lambda_2^-) \\\\\n\\dim(\\lambda_1^- \\cap \\lambda_2^\\circ) & \\dim(\\lambda_1^- \\cap \\partial \\lambda_2) & \\dim(\\lambda_1^- \\cap \\lambda_2^-)\n\\end{pmatrix}\n$$\n\n## Модель 9-пересечений с размерностью\n\n::: columns\n::: {.column width=\"60%\"}\n- Анализ пересечений внутренней области, границы и внешней области двух объектов $\\lambda_1$ и $\\lambda_2$.\n\n- Размерность пересечения может быть $-, 0, 1, 2$, что дает $4^9 =262144$ комбинаций.\n\n::: callout-note\n## DE-9IM\n\nМодель DE-9IM описывает наиболее полный спектр топологических отношений и поддерживается в большинстве систем управления базами пространственных данных.\n:::\n:::\n\n::: {.column width=\"40%\"}\n| $\\lambda_1 \\lambda_2$ | Возможно | Без обратных |\n|-----------------------|----------|--------------|\n| $AA$ | 12 | 9 |\n| $LA$ | 31 | 31 |\n| $PA$ | 3 | 3 |\n| $LL$ | 36 | 33 |\n| $PL$ | 3 | 3 |\n| $PP$ | 2 | 2 |\n| | *Итого* | *81* |\n:::\n:::\n\n## **DE-4/9IM (01-08) точки**\n\n{width=\"100%\"}\n\n## **DE-4/9IM (09-17) полигоны**\n\n{width=\"100%\"}\n\n## **DE-4/9IM (18-25) линии/полигоны**\n\n{width=\"100%\"}\n\n## **DE-4/9IM (26-33) линии/полигоны**\n\n{width=\"100%\"}\n\n## **DE-4/9IM (34-43) линии/полигоны**\n\n{width=\"100%\"}\n\n## **DE-4/9IM (44-48) линии/полигоны**\n\n{width=\"100%\"}\n\n## **DE-4/9IM (49-58) линии**\n\n{width=\"100%\"}\n\n## **DE-4/9IM (59-69) линии**\n\n{width=\"100%\"}\n\n## **DE-4/9IM (70-78) линии**\n\n{width=\"100%\"}\n\n## **DE-4/9IM (79-81) линии**\n\n{width=\"100%\"}\n\n## Calculus-based model (CBM)\n\nБазируется на 5 отношениях и операторах границы для полигона ($A$) и линии ($L$).\n\n| | |\n|------------------|------------------------------------------------------|\n| $\\langle\\lambda_1, touch, \\lambda_2\\rangle$ | $(\\lambda_1^\\circ \\cap \\lambda_2^\\circ = \\varnothing) \\land (\\lambda_1 \\cap \\lambda_2 \\neq \\varnothing)$ |\n| $\\langle\\lambda_1, in, \\lambda_2\\rangle$ | $(\\lambda_1^\\circ \\cap \\lambda_2^\\circ \\neq \\varnothing) \\land (\\lambda_1 \\cap \\lambda_2 = \\lambda_1)$ |\n| $\\langle\\lambda_1, cross, \\lambda_2\\rangle$ | $(\\dim(\\lambda_1^\\circ \\cap \\lambda_2^\\circ) = \\max(\\dim(\\lambda_1^\\circ), \\dim(\\lambda_2^\\circ)) - 1)\\\\\\land (\\lambda_1 \\cap \\lambda_2 \\neq \\lambda_1) \\land (\\lambda_1 \\cap \\lambda_2 \\neq \\lambda_2)$ |\n| $\\langle\\lambda_1, overlap, \\lambda_2\\rangle$ | $(\\dim(\\lambda_1^\\circ) = \\dim(\\lambda_2^\\circ) = \\dim(\\lambda_1^\\circ \\cap \\lambda_2^\\circ))\\\\\\land (\\lambda_1 \\cap \\lambda_2 \\neq \\lambda_1) \\land (\\lambda_1 \\cap \\lambda_2 \\neq \\lambda_2)$ |\n| $\\langle\\lambda_1, disjoint, \\lambda_2\\rangle$ | $\\lambda_1 \\cap \\lambda_2 = \\varnothing$ |\n| $(A, b)$ | $\\partial A$ |\n| $(L, f), (L, t)$ | $\\partial L = \\{f, t\\}$ |\n| $\\lambda$ | $A~|~L~|~P~|~(A,b)~|~(L,f)~|~(L,t)$ |\n\n## CBM и DE-9IM (touch, in)\n\nМожно доказать эквивалентность моделей **CBM** и **DE-9IM**, расписав каждое отношение в прямую и обратную сторону.\n\n$$\n\\color{red}{\\langle\\lambda_1, touch, \\lambda_2\\rangle} \\Leftrightarrow \\Big(\\dim(\\lambda_1^\\circ \\cap \\lambda_2^\\circ) = -\\Big) \\\\ \\land \\Big(\\big(\\dim(\\partial \\lambda_1 \\cap \\lambda_2^\\circ) \\neq -\\big) \\lor \\big(\\dim(\\lambda_1^\\circ \\cap \\partial \\lambda_2) \\neq - \\big) \\lor \\big(\\dim(\\partial \\lambda_1 \\cap \\partial \\lambda_2) \\neq -\\big)\\Big)\n$$\n\n$$\n\\color{red}{\\langle\\lambda_1, in, \\lambda_2\\rangle} \\Leftrightarrow \\big(\\dim(\\lambda_1^\\circ \\cap \\lambda_2^\\circ) \\neq -\\big) \\\\ \\land \\big(\\dim(\\lambda_1^\\circ \\cap \\lambda_2^-) = -\\big) \\land \\big(\\dim(\\partial \\lambda_1 \\cap \\lambda_2^-) = - \\big)\n$$\n\n::: callout-note\n## Обратите внимание\n\nДля определения отношений **touch** и **in** не требуется уточнять топологическую размерность геометрии\n:::\n\n## CBM и DE-9IM (cross, overlap)\n\n$$\n\\color{red}{\\langle L, cross, A\\rangle} \\Leftrightarrow \\big(\\dim(L^\\circ \\cap A^\\circ) \\neq -\\big) \\land \\big(\\dim(L^\\circ \\cap A^-) \\neq -\\big)\n$$\n\n$$\n\\color{red}{\\langle L_1, cross, L_2\\rangle} \\Leftrightarrow \\dim(L_1^\\circ \\cap L_2^\\circ) = 0\n$$\n\n$$\n\\color{red}{\\langle A_1, overlap, A_2\\rangle} \\Leftrightarrow \\big(\\dim(A_1^\\circ \\cap A_2^\\circ) \\neq -\\big) \\\\ \\land \\big(\\dim(A_1^\\circ \\cap A_2^-) \\neq -\\big) \\land \\big(\\dim(A_1^- \\cap A_2^\\circ) \\neq - \\big)\n$$\n\n$$\n\\color{red}{\\langle L_1, overlap, L_2\\rangle} \\Leftrightarrow \\big(\\dim(L_1^\\circ \\cap L_2^\\circ) = 1 \\big) \\\\ \\land \\big(\\dim(L_1^\\circ \\cap L_2^-) \\neq -\\big) \\land \\big(\\dim(L_1^- \\cap L_2^\\circ) \\neq - \\big)\n$$\n\n::: callout-note\n## Обратите внимание\n\nОтношение **cross** определено только для линий. Отношение **overlap** определено для геометрий одинаковой топологической размерности (но не точек).\n:::\n\n## CBM и DE-9IM (disjoint, equals)\n\n$$\n\\color{red}{\\langle\\lambda_1, disjoint, \\lambda_2\\rangle} \\Leftrightarrow \\big(\\dim(\\lambda_1^\\circ \\cap \\lambda_2^\\circ) = -\\big) \\\\ \\land \\big(\\dim(\\partial \\lambda_1 \\cap \\lambda_2^\\circ) = -\\big) \\land \\big(\\dim(\\lambda_1^\\circ \\cap \\partial \\lambda_2) = - \\big) \\land \\big(\\dim(\\partial \\lambda_1 \\cap \\partial \\lambda_2) = -\\big)\n$$\n\nОтношение **equals** в модели CBM не определено, но его можно развернуть следующим образом:\n\n$$\n\\color{green}{\\langle \\lambda_1, equals, \\lambda_2\\rangle} \\Leftrightarrow \\big(\\dim(\\lambda_1^\\circ \\cap \\lambda_2^\\circ) \\neq - \\big) \\\\ \\land \\big(\\dim(\\lambda_1^\\circ \\cap \\lambda_2^-) = - \\big) \\land \\big(\\dim(\\partial \\lambda_1 \\cap \\lambda_2^-) = - \\big) \\\\ \\land \\big(\\dim(\\lambda_1^- \\cap \\lambda_2^\\circ) = - \\big) \\land \\big(\\dim(\\lambda_1^- \\cap \\partial \\lambda_2) = - \\big)\n$$\n\n## CBM и DE-9IM (частные случаи)\n\n**Граница полигона внутри другого объекта (без уточнения размерности)**\n\n$$\n\\color{blue}{\\langle (A, b), in, \\lambda\\rangle} \\Leftrightarrow \\big( \\dim(\\partial A \\cap \\lambda^\\circ) \\neq - \\big) \\land \\big(\\dim(\\partial A \\cap \\lambda^-) \\neq - \\big) \\\\ \\Leftrightarrow \\Big(\\dim\\big((\\partial A)^\\circ \\cap \\lambda^\\circ \\big) \\neq - \\Big) \\land \\Big(\\dim\\big((\\partial A)^\\circ \\cap \\lambda^- \\big) = - \\Big) \\land \\Big(\\dim\\big(\\partial(\\partial A) \\cap \\lambda^- \\big) = - \\Big)\n$$\n\n**Одна граничная точка линии касается полигона, а вторая нет**\n\n$$\n\\color{blue}{\\langle (L, f), touch, A \\rangle \\land \\langle (L, t), disjoint, A \\rangle} \\\\ \\Leftrightarrow \\big( \\dim(\\partial L \\cap \\partial A) = 0 \\big) \\land \\big( \\dim (\\partial L \\cap A^-) = 0 \\big)\n$$\n\n::: callout-tip\n## А остальные?\n\nАналогичным образом можно определить эквивалентность моделей для каждого из 81 случая модели DE-8IM, а также их генерализаций DE-4IM.\n:::\n\n## ISO/IEC 13249:2016 SQL/MM Part 3: Spatial\n\nВ стандарте определены SQL-функции для работы с пространственными данными:\n\n| Функция | CBM / DE-8IM | OGC Simple Features | SQL/MM | PostGIS |\n|-----------------|-------------------|--------------------|---------|---------|\n| `ST_Equals` | $\\color{green}{\\langle\\lambda_1, equals, \\lambda_2\\rangle}$ | `a.Equals(b)` | ✓ | ✓ |\n| `ST_Disjoint` | $\\langle\\lambda_1, disjoint, \\lambda_2\\rangle$ | `a.Disjoint(b)` | ✓ | ✓ |\n| `ST_Intersects` | $\\lnot\\langle\\lambda_1, disjoint, \\lambda_2\\rangle$ | `a.Intersects(b)` | ✓ | ✓ |\n| `ST_Touches` | $\\langle\\lambda_1, touch, \\lambda_2\\rangle$ | `a.Touches(b)` | ✓ | ✓ |\n\n{width=\"100%\"}\n\n## ISO/IEC 13249:2016 SQL/MM Part 3: Spatial\n\nВ стандарте определены SQL-функции для работы с пространственными данными:\n\n| Функция | CBM / DE-8IM | OGC Simple Features | SQL/MM | PostGIS |\n|----------------|------------------|--------------------|----------|----------|\n| `ST_Crosses` | $\\langle\\lambda_1, cross, \\lambda_2\\rangle$ | `a.Crosses(b)` | ✓ | ✓ |\n| `ST_Within` | $\\langle \\color{red}{\\lambda_1}, in, \\color{blue}{\\lambda_2}\\rangle$ | `a.Within(b)` | ✓ | ✓ |\n| `ST_Contains` | $\\langle \\color{blue}{\\lambda_2}, in, \\color{red}{\\lambda_1}\\rangle$ | `a.Contains(b)` | ✓ | ✓ |\n| `ST_Overlaps` | $\\langle\\lambda_1, overlap, \\lambda_2\\rangle$ | `a.Overlaps(b)` | ✓ | ✓ |\n\n{width=\"100%\"}\n\n## Дополнительные функции PostGIS\n\nДополнительно к `ST_Contains` в PostGIS определены функции:\n\n| Функция | CBM / DE-8IM | PostGIS |\n|--------------------|---------------------------------|--------------------|\n| `ST_CoveredBy` | $\\langle \\color{red}{\\lambda_1}, in, \\color{blue}{\\lambda_2}\\rangle \\lor \\langle \\color{red}{\\lambda_1}, in, \\color{blue}{(\\lambda_2,b)}\\rangle$ | ✓ |\n| `ST_Covers` | $\\langle \\color{blue}{\\lambda_2}, in, \\color{red}{\\lambda_1}\\rangle \\lor \\langle \\color{blue}{\\lambda_2}, in, \\color{red}{(\\lambda_1,b)}\\rangle$ | ✓ |\n| `ST_ContainsProperly` | $\\langle \\color{blue}{\\lambda_2}, in, \\color{red}{\\lambda_1}\\rangle \\land \\langle \\color{blue}{\\lambda_2}, disjoint, \\color{red}{(\\lambda_1,b)}\\rangle$ | ✓ |\n\n{width=\"100%\"}\n\n## Contains, ContainsProperly, Covers\n\nДанные топологические отношения различаются следующим образом:\n\n| Функция | Множества | Пояснение |\n|--------------------|------------|-----------------------------------------|\n| `ST_Contains` | $\\lambda_2^\\circ \\subset \\lambda_1^\\circ$ | внутренность второго объекта располагается во внутренности первого |\n| `ST_ContainsProperly` | $\\lambda_2 \\subset \\lambda_1^\\circ$ | второй объект располагается во внутренности первого |\n| `ST_Covers` | $\\lambda_2 \\subset \\lambda_1$ | второй объект располагается в первом |\n\n::: callout-note\n## Но разница проявляется в области границы\n\n::: columns\n::: {.column width=\"10%\"}\n{width=\"80%\"}\n:::\n\n::: {.column width=\"90%\"}\nЧтобы найти линию, целиком совпадающую с границей полигона, нужно использовать `ST_Covers`. Она не располагается внутри полигона (`ST_Contains` и `ST_ContainsProperly` дадут ложь) и при этом полигон имеет пересечение с внутренностью линии (`ST_Touches` тоже даст ложь).\n:::\n:::\n:::\n\n## Равенство геометрий\n\n**Пространственное равенство** означает, что геометрии совпадают на уровне множеств координат:\n\n``` sql\nSELECT ST_Equals(\n ST_GeomFromText('GEOMETRYCOLLECTION (POINT (1 2), POINT (2 3))'),\n ST_GeomFromText('MULTIPOINT ((1 2), (2 3))')\n) -- true\n```\n\n**Геометрическое равенство** означает, что геометрии совпадают с точностью до внутреннего представления.\n\n``` sql\nSELECT ST_OrderingEquals(\n ST_GeomFromText('GEOMETRYCOLLECTION (POINT (1 2), POINT (2 3))'),\n ST_GeomFromText('MULTIPOINT ((1 2), (2 3))')\n) -- false\n```\n\n`ST_OrderingEquals` --- дополнительная функция **PostGIS**, которая позволяет установить факт геометрического равенства. Если не учитывать информацию о СК, ее вызов соответствует выражению `ST_AsBinary(A) = ST_AsBinary(B)`\n\n## ST_Relate: отношения общего вида\n\nСтандарт **SQL/MM** также предписывает необходимость наличия функции `ST_Relate`, которую можно использовать для:\n\n- проверки отношения на предмет соответствия заданному шаблону *DE-9IM*;\n\n- вычисления фактической матрицы *DE-9IM* для заданных объектов.\n\n| **SQL/MM** | DE-9IM | Расшифровка |\n|---------|-------------|---------------------------------------------------|\n| `T` | $\\dim(S) \\neq -$ | Пересечение существует |\n| `F` | $\\dim(S) = -$ | Пересечение не существует |\n| `*` | --- | Наличие пересечения не имеет значения |\n| `0` | $\\dim(S) = 0$ | Пересечение существует и его размерность равна $0$ |\n| `1` | $\\dim(S) = 1$ | Пересечение существует и его размерность равна $1$ |\n| `2` | $\\dim(S) = 2$ | Пересечение существует и его размерность равна $2$ |\n\n## Библиография\n", "supporting": [], "filters": [ "rmarkdown/pagebreak.lua" diff --git a/adv_06_Topology.qmd b/adv_06_Topology.qmd index eb602ac..64321fc 100644 --- a/adv_06_Topology.qmd +++ b/adv_06_Topology.qmd @@ -462,10 +462,59 @@ $$ |--------------------|------------|-----------------------------------------| | `ST_Contains` | $\lambda_2^\circ \subset \lambda_1^\circ$ | внутренность второго объекта располагается во внутренности первого | | `ST_ContainsProperly` | $\lambda_2 \subset \lambda_1^\circ$ | второй объект располагается во внутренности первого | -| `ST_Covers` | $\lambda_2 \subset \lambda_1$ | второй объект располагается внутри первого | +| `ST_Covers` | $\lambda_2 \subset \lambda_1$ | второй объект располагается в первом | -## Геометрическое равенство +::: callout-note +## Но разница проявляется в области границы + +::: columns +::: {.column width="10%"} +{width="80%"} +::: + +::: {.column width="90%"} +Чтобы найти линию, целиком совпадающую с границей полигона, нужно использовать `ST_Covers`. Она не располагается внутри полигона (`ST_Contains` и `ST_ContainsProperly` дадут ложь) и при этом полигон имеет пересечение с внутренностью линии (`ST_Touches` тоже даст ложь). +::: +::: +::: + +## Равенство геометрий + +**Пространственное равенство** означает, что геометрии совпадают на уровне множеств координат: + +``` sql +SELECT ST_Equals( + ST_GeomFromText('GEOMETRYCOLLECTION (POINT (1 2), POINT (2 3))'), + ST_GeomFromText('MULTIPOINT ((1 2), (2 3))') +) -- true +``` **Геометрическое равенство** означает, что геометрии совпадают с точностью до внутреннего представления. +``` sql +SELECT ST_OrderingEquals( + ST_GeomFromText('GEOMETRYCOLLECTION (POINT (1 2), POINT (2 3))'), + ST_GeomFromText('MULTIPOINT ((1 2), (2 3))') +) -- false +``` + +`ST_OrderingEquals` --- дополнительная функция **PostGIS**, которая позволяет установить факт геометрического равенства. Если не учитывать информацию о СК, ее вызов соответствует выражению `ST_AsBinary(A) = ST_AsBinary(B)` + +## ST_Relate: отношения общего вида + +Стандарт **SQL/MM** также предписывает необходимость наличия функции `ST_Relate`, которую можно использовать для: + +- проверки отношения на предмет соответствия заданному шаблону *DE-9IM*; + +- вычисления фактической матрицы *DE-9IM* для заданных объектов. + +| **SQL/MM** | DE-9IM | Расшифровка | +|---------|-------------|---------------------------------------------------| +| `T` | $\dim(S) \neq -$ | Пересечение существует | +| `F` | $\dim(S) = -$ | Пересечение не существует | +| `*` | --- | Наличие пересечения не имеет значения | +| `0` | $\dim(S) = 0$ | Пересечение существует и его размерность равна $0$ | +| `1` | $\dim(S) = 1$ | Пересечение существует и его размерность равна $1$ | +| `2` | $\dim(S) = 2$ | Пересечение существует и его размерность равна $2$ | + ## Библиография diff --git a/docs/adv_06_Topology.html b/docs/adv_06_Topology.html index 76d05db..e0662c8 100644 --- a/docs/adv_06_Topology.html +++ b/docs/adv_06_Topology.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 { 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 */ /* CSS for citations */ div.csl-bib-body { } div.csl-entry { @@ -1172,14 +1237,103 @@
ST_Covers
Но разница проявляется в области границы
+Чтобы найти линию, целиком совпадающую с границей полигона, нужно использовать ST_Covers
. Она не располагается внутри полигона (ST_Contains
и ST_ContainsProperly
дадут ложь) и при этом полигон имеет пересечение с внутренностью линии (ST_Touches
тоже даст ложь).