Географическое объединение таблиц


Если две таблицы имеют географические объекты, то Аксиома может объединить эти таблицы на основе пространственных отношений между объектами этих таблиц. Таким образом, даже если таблицы не содержат общей колонки, то вы в ряде случаев можете объединить их географически.


В Аксиомe имеется несколько географических операторов. Они используются для выбора объектов на основании их взаимного расположения в пространстве. С географическими операторами в Аксиоме используется специальное ключевое слово: "obj". Оно определяет, что Аксиома должна вычислить значение на основании графических объектов, а не соответствующих им в таблице числовых полей.


Имя географического оператора указывается между географическими объектами. выбрать его можно в списке Операторы в диалоге SQL-запрос.


В таблице перечислены географические операторы:

Contains

"Содержит".
Объект A содержит объект Б, если центроид Б лежит в границах A.

Contains Entire

"Полностью содержит".
Объект A полностью содержит объект B, если граница B полностью лежит внутри границ A.

Within

"Внутри".
Объект A лежит внутри объекта Б, если его центроид лежит в границах B.

Entirely Within

"Полностью внутри".

Объект A лежит полностью внутри объекта B, если его граница полностью лежит внутри границ B.

Intersects

"Пересекает".
Объект A пересекается с объектом B, если они имеют хотя бы одну общую точку.

Различие между Contains и Within с одной стороны, и Contains Entire и Entirely Within с другой, состоит в том, что Contains и Within основаны на анализе центроида объекта, а Contains Entirely и Entirely Within - на анализе всего объекта.


Рисунок объясняет это различие:


объект A содержит объект B


объект B находится внутри (Within) объекта A


объект A содержит объект B


объект B находится внутри (Within) объекта A


объект A полностью содержит (Contains Entire) объект B


объект B полностью внутри (Entirely Within) объекта A


объект A пересекает объект B


объект B пересекает объект A


Во всех случаях объект A содержит объект B, так как центроид объекта B лежит внутри границы объекта A. Однако, на рисунке слева часть объекта B лежит вне границ объекта A. А на рисунке справа весь объект B лежит внутри объекта A. Только в этом случае мы говорим, что "объект A полностью содержит объект B" или что "объект B лежит полностью внутри объекта A". Далее, из того, что A полностью содержит B, следует, что A содержит B; а из того, что A полностью лежит внутри  B, следует, что A лежит внутри B.


При этом следует помнить, что  Аксиома выполняет простые операции "Содержит" (Contains) и "Внутри" (Within) гораздо быстрее, чем "Содержит полностью" (Contains Entire) и "Полностью внутри" (Entirely Within). Поэтому, если вам не обязательно точно знать, полностью ли один объект содержит другой, используйте Contains и Within вместо Contains Entire и Entirely Within.


Географические операторы удобно использовать при работе с несколькими таблицами. Если в таблицах нет колонки, которая определяла бы порядок объединения, можно задать объединение с помощью географических операторов (в окошке "с условием"). При работе с таблицами городов и штатов вы можете выполнить одну из следующих команд:


Cities_Greater_900K.obj within SubjectRF_n2.obj

SubjectRF_n2.obj Cities_Greater_900K.obj


В обоих случаях Аксиома ищет внутри каждого субъекта РФ те города, которые в нем находятся, и ставит в соответствие строке города строку этого субъекта РФ. С помощью функций обобщения можно сосчитать число городов в субъекте РФ, или найти какие-нибудь средние характеристики для городов каждого субъекта РФ.


Если имеется таблица областей-субъектов и таблица дорог, причем области изображены полигонами, а дороги - линиями и полилиниями, вы можете задать географическое объединение командами:


Major_Routes.obj within SubjectRF_n2.obj

SubjectRF_n2.obj contains Major_Routes.obj