WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
MySQL поддерживает пространственные расширения, чтобы позволить хранение и
анализ географических свойств. Эти свойства доступны для таблиц типов
Хотя пространственные расширения обеспечиваются в таблицах
Эта глава покрывает следующие темы: Основание этих пространственных расширений в
модели геометрии OpenGIS. Форматы для представления пространственных данных. Как использовать пространственные данные в MySQL. Использование индексации для пространственных данных. Отличия MySQL от спецификации OpenGIS. Дополнительные ресурсы Open Geospatial Consortium издает
OpenGIS Simple Features Specifications For SQL,
документ, который предлагает несколько концептуальных способов для
распространения SQL RDBMS, чтобы поддерживать пространственные данные. Эта
спецификация доступна на
http://www.opengis.org/docs/99-049.pdf. Если Вы имеете вопросы или интересы относительно использования
пространственных расширений MySQL, Вы можете обсуждать их на форуме GIS:
http://forums.mysql.com/list.php?23. MySQL осуществляет пространственные расширения по спецификации Open
Geospatial Consortium (OGC). Это международный консорциум более, чем 250
компаний, агентств и университетов, участвующих в разработке публично
доступных концептуальных решений, которые могут быть полезны со всеми видами
прикладных программ, которые управляют пространственными данными. OGC
поддерживает Web-сайт
http://www.opengis.org/.
В 1997 Open Geospatial Consortium опубликовал
OpenGIS Simple Features Specifications For SQL.
Эта спецификация доступна на
http://www.opengis.org/docs/99-049.pdf. MySQL осуществляет подмножество типов SQL with
Geometry Types, среду, предложенную OGC. Этот термин
относится к SQL-среде, которая была расширена с набором типов геометрии.
Оцененный геометрией SQL столбец выполнен как столбец, который имеет тип
геометрии. Спецификация описывает набор SQL-типов геометрии также, как
функций на этих типах, чтобы создавать и анализировать значения геометрии.
Географическее свойство
состоит в том, что есть что-нибудь в мире, имеющее расположение.
Свойство может быть: Объект. Например, гора, водоем, город. Пустота. Например, область почтового индекса, тропики. Определимое расположение. Например, дорога, как специфическое
место, где два прохода пересекаются. Некоторые документы используют термин
geospatial feature, чтобы
обратиться к географическим свойствам. Geometry другое слово, которое
обозначает географическее свойство. Первоначально геометрия означала
измерение земли. Другое значение исходит от картографии, оно касается
геометрических свойств, которые картографы используют, чтобы отобразить мир.
Эта глава использует все эти условия синонимично:
geographic feature,
geospatial feature,
feature или
geometry. Обычно используется
геометрия, определенная как отметка или набор пунктов (точек),
представляющих что-нибудь в мире, что имеет расположение. Набор типов геометрии, предложенных окружением OGC
SQL with Geometry Types основан на
OpenGIS Geometry Model. В этой
модели каждый геометрический объект имеет следующие общие реквизиты: Это связано с пространственной системой ссылки,
которая описывает координаты места, в котором объект определен. Это принадлежит некоторому классу геометрии. Классы геометрии определяют свою иерархию следующим образом:
Невозможно создать объекты в non-instantiable классах. Возможно создать
объекты в классах instantiable. Все классы имеют реквизиты, и классы
instantiable могут также иметь утверждения (правила, которые определяют
допустимые образцы класса). Основной класс Реквизиты геометрии Значение геометрии имеет следующие реквизиты: type.
Каждая геометрия принадлежит одному из instantiable классов в иерархии.
SRID или Spatial
Reference Identifier (пространственный идентификатор ссылки). Это значение
идентифицирует связанную пространственную систему ссылки геометрии, которая
описывает координатное пространство, в котором объект геометрии определен.
В MySQL значение SRID только целое число, связанное со значением геометрии.
Все вычисления выполнены, принимая Евклидову (плоскую) геометрию. Координата в
пространственной системе ссылки, представляемая как числа двойной точности (с
восьмью байтами). Все не пустые конфигурации включают по крайней мере одну
пару координат (X,Y). Пустые конфигурации не содержат никаких координат. Координаты связаны со SRID. Например, в различных системах координат
расстояние между двумя объектами может отличаться даже, когда объекты имеют
те же самые координаты потому, что расстояние на плоской системе координат и
расстояния на геоцентрической системе (на поверхности Земли) разные вещи.
Внутренний, граничный и внешний. Каждая геометрия занимает некоторую позицию. Внешнее, с точки зрения
геометрии, это все место, не занятое геометрией. Внутреннее, соответственно,
место, занятое геометрией. Граница находится между внутренним и внешним.
MBR (Minimum Bounding
Rectangle) или Envelope (минимальный ограничительный прямоугольник, конверт).
Это геометрия ограничения, сформированная минимумом и максимумом (X,Y): Является ли значение простым или нет. Значения геометрии типов
( Закрыто ли значение или нет. Значения геометрии типов
( Является ли значение пустым или не пустым: геометрия пуста, если не
имеет никаких точек. Внешний, внутренний и граница пустой геометрии не
определены (то есть они представляются значением Размерность. Геометрия может иметь размерность 0, 1 или 2: 0 для геометрии без длины и никакой области. 1 для геометрии с ненулевой длиной и нулевой областью, а также
для пустой геометрии. 2 для геометрии с ненулевой областью. Объекты Примеры Point Вообразите крупномасштабную карту мира с многими
городами. Объект На городской карте объект Свойства Point Значение X. Значение Y. Границей Свойства Curve Граница закрытой Граница не закрытой Примеры LineString: На всемирной карте объекты
В городской карте объекты Свойства LineString
Свойства Surface
OpenGIS определяет простой Граница простого Пример Polygon. На карте области объекты Утверждения Polygon.
Граница Предшествующие утверждения делают Все элементы в Тип элемента (например, Размерность. Ограничения на степень пространственного перекрытия между элементами.
Примеры MultiPoint: На всемирной карте На городской карте Свойства MultiPoint
Граница Свойства MultiCurve
Граница Граница закрытой Примеры MultiLineString
На карте области Утверждения MultiSurface
Две поверхности Два элемента Примеры MultiPolygon
На карте области Утверждения MultiPolygon
Свойства MultiPolygon
Граница Каждая Каждая Этот раздел описывает стандартные пространственные форматы данных, которые
используются, чтобы представить объекты геометрии в запросах. Это: Well-Known Text (WKT). Well-Known Binary (WKB). Внутренне MySQL сохраняет значения геометрии в формате, который не
идентичен любому формату WKT или WKB. Представление геометрии Well-Known Text (WKT) разработано, чтобы
обмениваться данными геометрии в форме ASCII. Примеры WKT представлений объектов геометрии: Обратите внимание, что отметка определена без отделения запятой. Обратите внимание, что пары координат отделяются запятыми. Грамматика Backus-Naur, которая определяет формальные правила вывода для
записи значений WKT, может быть найдена в спецификации OpenGIS. Представление геометрии Well-Known Binary (WKB) определено спецификацией
OpenGIS. Это также определено в ISO SQL/MM
Part 3: Spatial standard. WKB используется, чтобы обмениваться данными геометрии как двоичными
потоками, представляемыми значениями WKB использует однобайтовые целые числа без знака, целые числа без знака с
четырьмя байтами и числа двойной точности с восемью байтами (IEEE 754). Байт
равен восьми битам. Например, значение WKB, которое соответствует Последовательность может быть разделена на эти компоненты: Представление компонента следующее: Byte order может быть 0 или 1, чтобы указать
little-endian или big-endian формат хранения. little-endian и big-endian
также известны как Network Data Representation (NDR) и External Data
Representation (XDR), соответственно. WKB type задает код, который указывает тип геометрии. Значения от 1 до
7 указывают Значение WKB-значения для более сложных значений геометрии представляются более
сложными структурами данных, как детализировано в спецификации OpenGIS. Этот раздел описывает типы данных, которые Вы можете использовать для
представления пространственных данных в MySQL и функции, доступные для
создания и поиска пространственных значений. MySQL имеет типы данных, которые соответствуют классам OpenGIS.
Часть этих типов хранит одиночные значения геометрии: Другие типы данных хранят совокупности значений: Этот раздел описывает, как создать пространственные значения, использующие
функции Well-Known Text и Well-Known Binary, которые определены в стандарте
OpenGIS, и применить MySQL-функции. MySQL обеспечивает ряд функций, которые берут как входные параметры
представление Well-Known Text и, факультативно, пространственный
идентификатор системы ссылки (SRID).
Они возвращают соответствующую геометрию.
Создает значение
Создает значение геометрии из любого типа, использующего
WKT представление и SRID.
Создает значение
Создает значение
Создает значение
Создает значение
Создает значение
Создает значение Спецификация OpenGIS также определяет следующие факультативные функции,
которые MySQL не выполняет. Эти функции создают значения
Создает значение
Создает значение MySQL обеспечивает ряд функций, которые берут как входные параметры
Создает значение
Создает значение геометрии из любого типа, использующего
WKB представление и SRID.
Создает значение
Создает значение
Создает значение
Создает значение
Создает значение
Создает значение Спецификация OpenGIS также описывает факультативные функции для построения
значений
Создает значение
Создает значение MySQL обеспечивает набор полезных ненормативных функций для создания
геометрии с WKB представлениями. Функции, описанные в этом разделе,
MySQL-расширения спецификации OpenGIS. Результатами этих функций будут
значения
Создает значение WKB
Создает значение WKB
Создает значение WKB
Создает значение WKB
Создает значение WKB
Создает значение WKB
Создает значение WKB MySQL обеспечивает стандартный способ создания пространственных столбцов
для типов геометрии, например, через Используйте инструкцию Используйте инструкцию После того, как Вы создали пространственные столбцы, Вы можете заполнять
их пространственными данными. Значения должны быть сохранены во внутреннем формате геометрии, но Вы
можете преобразовывать их в этот формат из Well-Known Text (WKT) или из
Well-Known Binary (WKB). Следующие примеры показывают, как вставить значения
геометрии в таблицу, преобразуя значения WKT во внутренний формат геометрии:
Выполните преобразование непосредственно в инструкции
Выполните преобразование до Следующие примеры вставляют более сложные конфигурации в таблицу: Предшествующие примеры применяют Обратите внимание, что, если прикладная программа пользователя хочет
использовать WKB-представления значений геометрии, она ответственна за
посылку правильно сформированных WKB в запросах на сервер. Однако, имеются
несколько способов удовлетворения этого требования. Например: Вставка значения ODBC-прикладная программа может посылать WKB-представление, привязывая
его к метке-заполнителю, использующей параметр типа Другие интерфейсы программирования могут поддерживать подобный
механизм метки-заполнителя. В программе на C Вы можете выходить из двоичного значения, используя
Значения геометрии, сохраненные в таблице, могут быть выбраны во
внутреннем формате. Вы можете также преобразовывать их в формат
WKT или WKB. Выборка пространственных данных во внутреннем формате:
Выборка геометрии с использованием внутреннего формата, может быть полезна
в передачах из таблицы в таблицу: Выборка пространственных данных в формате WKT: Функция Выборка пространственных данных в формате WKB: Функция После начальной загрузки пространственных столбцов со значениями, Вы
готовы сделать запрос и анализировать их. MySQL обеспечивает набор функций,
чтобы выполнить различные операции на пространственных данных. Эти функции
могут быть сгруппированы в четыре главных категории согласно типу операции,
которую они выполняют: Функции, которые преобразовывают конфигурации
между различными форматами. Функции, которые обеспечивают доступ к качественным
или количественным реквизитам геометрии. Функции, которые описывают отношения между двумя конфигурациями.
Функции, которые создают новые конфигурации из существующих.
Пространственные функции анализа могут использоваться во
многих контекстах, типа: Любая интерактивная программа SQL, типа
mysql или MySQL Query Browser. Прикладные программы, написанные на любом языке, который поддерживает
клиентский MySQL API. MySQL поддерживает следующие функции для преобразования значений геометрии
между внутренним форматом и форматом WKT или WKB:
Преобразовывает значение во внутреннем формате геометрии к представлению
WKB и возвращает двоичный результат. Преобразовывает значение во внутреннем формате геометрии к представлению
WKT и возвращает строковый результат.
Преобразовывает строковое значение из WKT-представления во внутренний
формат геометрии и возвращает результат. Ряд специфических для типа функций
также обеспечивается, типа
Преобразовывает двоичное значение из WKB-представления во внутренний
формат геометрии и возвращает результат. Ряд специфических для типа функций
также обеспечивается, типа Каждая функция, которая принадлежит к этой группе, берет значение
геометрии как параметр и возвращает некоторое количественное или качественное
свойство геометрии. Некоторые функции ограничивают их тип параметра. Такие
функции возвращают Функции, перечисленные в этом разделе, не ограничивают их параметр и
принимают значение геометрии любого типа. Возвращается свойственная размерность геометрии Возвращается минимальный ограничительный прямоугольник (MBR) для геометрии
Многоугольник определен пунктами (точками) угла блока ограничения: Возвращает как строку имя типа геометрии, образец которой является членом
Возвращается целое число, указывающее пространственный ID системы
ссылки для геометрии В MySQL значение SRID только целое число, связанное со значением
геометрии. Все вычисления выполнены, принимая евклидову (плоскую) геометрию.
Спецификация OpenGIS также определяет следующие функции, которые
MySQL не выполняет: Возвращает геометрию, которая является замкнутым выражением
комбинаторной границы геометрии Возвращается 1, если геометрия В настоящее время эта функция не должна использоваться. Если выполнено,
поведение будет как описано в следующем параграфе. Возвращается 1, если геометрия Описание каждого instantiable геометрического класса, данного ранее в
главе включает специфические условия, которые заставляют образец того класса
быть классифицированными как не простой. Возвращает значение X-координаты для Возвращает значение Y-координаты для Возвращает Возвращает как число двойной точности длина значение
Возвращает число объектов Возвращает Возвращает Спецификация OpenGIS также определяет следующую функцию, которую
MySQL не выполняет: Возвращает 1, если значение Возвращает как число двойной точности длину значения
Возвращает 1, если значение Возвращает как число двойной точности область значения
Возвращает внешнее кольцо значения
Возвращает Возвращает число внутренних колец в
значении Возвращает как число двойной точности область значения
Спецификация OpenGIS также определяет следующие функции, которые
MySQL не выполняет: Возвращает математический центр для значения Возвращает значение
Возвращает Возвращает число конфигураций в значении
Раздел
"4.5.2. Функции OpenGIS предлагает ряд других функций, которые могут производить
конфигурации. Они разработаны, чтобы выполнить пространственные операторы.
Эти функции не выполнены в MySQL. Они могут появляться в будущих выпусках.
Возвращает геометрию, которая представляет все пункты (точки), чьи
расстояния от геометрии Возвращает геометрию, которая представляет выпуклую оболочку геометрии
Возвращает геометрию, которая представляет разность множеств
точек значения геометрий Возвращает геометрию, которая представляет пересечение набора точек
геометрий Возвращает геометрию, которая представляет набор точек, симметричных
разнице значений геометрий
Возвращает геометрию, которая представляет объединение набора точек
значений геометрии Функции, описанные в этих разделах, берут две конфигурации как входные
параметры и возвращают качественное или количественное отношение между ними.
MySQL обеспечивает несколько функций, которые проверяют отношения между
минимальными ограничительными прямоугольниками двух конфигураций
Возвращает 1 или 0, чтобы указать, содержит ли минимальный ограничительный
прямоугольник
Возвращает 1 или 0, чтобы указать, являются ли минимальные ограничительные
прямоугольники двух конфигураций
Возвращает 1 или 0, чтобы указать, являются ли минимальные ограничительные
прямоугольники двух конфигураций
Возвращает 1 или 0, чтобы указать, пересекаются ли минимальные
ограничительные прямоугольники двух конфигураций
Возвращает 1 или 0, чтобы указать, накладываются ли
минимальные ограничительные прямоугольники
Возвращает 1 или 0, чтобы указать, касаются ли минимальные ограничительные
прямоугольники
Возвращает 1 или 0, чтобы указать, является ли минимальный ограничительный
прямоугольник Спецификация OpenGIS определяет следующие функции. Они проверяют связь
между двумя значениями геометрии В настоящее время MySQL не выполняет эти функции согласно спецификации.
Которые выполнены, возвратят тот же самый результат, что и соответствующие
MBR-функции. Это включает функции в следующем списке. Эти функции могут быть
выполнены в будущих выпусках с полной поддержкой для пространственного
анализа, а не только MBR-поддержки.
Возвращает 1 или 0, чтобы указать, содержит ли
Возвращает 1, если Термин "пространственно пересекается", обозначает пространственное
отношение между двумя данными конфигурациями, которые
имеют следующие реквизиты: Две конфигурации пересекаются. Их пересечение приводит к геометрии, которая имеет размерность,
которая на единицу меньше, чем максимальная размерность
двух данных конфигураций. Их пересечение не равно любой из двух данных конфигураций.
Возвращается 1 или 0, чтобы указать, является ли
Возвращает как число двойной точности самое короткое расстояние между
любыми двумя точками в двух конфигурациях.
Возвращает 1 или 0, чтобы указать, является ли
Возвращает 1 или 0, чтобы указать, пересекает ли
Возвращает 1 или 0, чтобы указать, накладывается ли
Возвращает 1 или 0, чтобы указать, существует ли пространственная связь,
определенная
Возвращается 1 или 0, чтобы указать, касается ли
Возвращается 1 или 0, чтобы указать, является ли Операции поиска в непространственных базах данных могут быть
оптимизированы, используя индексы. Это также истинно для пространственных баз
данных. С помощью большого разнообразия многомерных методов индексации,
которые предварительно были разработаны, возможно оптимизировать
пространственные поиски. Наиболее типично для них: Запросы точки, которые ищут все объекты, которые
содержат данную точку. Запросы области, которые ищут все объекты, которые накладываются
на данную область. MySQL использует R-деревья с квадратным разбиением, чтобы индексировать
пространственные столбцы. Пространственный индекс сформирован, используя MBR
геометрии. Для большинства конфигураций MBR минимальный прямоугольник,
который окружает конфигурацию. Для горизонтальных или вертикальных linestring
MBR прямоугольник, вырождающийся в linestring. Для point MBR является точкой.
Также возможно создать нормальные индексы на пространственных столбцах.
Вам надо объявить префикс для любого непространственного индекса на
пространственном столбце, кроме столбцов MySQL может создавать пространственные индексы, использующие синтаксис,
подобный аналогичному для создания регулярных индексов, но расширенный с
ключевым словом С С С Для таблиц Для удаления пространственного индекса, используйте С С Пример: Предположите, что таблица Чтобы добавлять пространственный индекс на столбце Оптимизатор исследует, могут ли доступные пространственные индексы
включаться в поиск для запросов, которые используют функцию типа
Использование Проверьте, что случилось бы без пространственного индекса: Выполнение инструкции В будущих выпусках пространственные индексы могут также использоваться для
оптимизации других функций. MySQL еще не выполняет следующие свойства GIS: Дополнительные просмотры метаданных. Спецификация OpenGIS предлагает несколько дополнительных просмотров
метаданных. Например, просмотр системы Функция OpenGIS Проблема в том, что имеется существующая SQL-функция
Глава 4. Пространственные расширения
MyISAM
, InnoDB
, NDB
и
ARCHIVE
. Однако, тип ARCHIVE
не поддерживает
индексацию, так что пространственные столбцы в столбцах ARCHIVE
не могут быть индексированы. MySQL Cluster также не поддерживает
индексацию пространственных столбцов.InnoDB
, использование пространственных индексов может
вызывать аварийный отказ (Глюк #15860).4.1. Введение в пространственную
поддержку MySQL
4.2. Модель геометрии OpenGIS
4.2.1.
Иерархия класса геометрии
Geometry
(non-instantiable)Point
(instantiable)Curve
(non-instantiable)LineString
(instantiable)Line
LinearRing
Surface
(non-instantiable)Polygon
(instantiable)
GeometryCollection
(instantiable)MultiPoint
(instantiable)MultiCurve
(non-instantiable)MultiLineString
(instantiable)MultiSurface
(non-instantiable)MultiPolygon
(instantiable)
Geometry
базовый класс. Это абстрактный класс. Подклассы
Geometry
ограничены нуль-, одно- и двумерными геометрическими
объектами, которые существуют в двумерном координатном пространстве. Все
instantiable классы геометрии определены так, чтобы допустимые образцы класса
были закрытой топологии (то есть, все определенные конфигурации
включают их границу).Geometry
имеет подклассы для
Point
, Curve
,
Surface
и GeometryCollection
:Point
представляет нуль-мерные объекты.
Curve
представляет одномерные объекты и имеет подкласс
LineString
с под-подклассами
Line
и LinearRing
.Surface
разработан для двумерных объектов и
имеет подкласс Polygon
.GeometryCollection
имеет специальные коллекции для
нуль-, одно- и двумерных объектов, известные как
MultiPoint
, MultiLineString
и
MultiPolygon
для конфигураций моделирования, соответствующих
совокупностям Points
, LineStrings
и
Polygons
, соответственно. MultiCurve
и
MultiSurface
представляются как абстрактные суперклассы, которые
обобщают интерфейсы совокупности, чтобы
обработать Curves
и Surfaces
.Geometry
, Curve
, Surface
,
MultiCurve
и MultiSurface
определены как
non-instantiable классы. Они определяют общий набор методов для их подклассов
и включены для расширяемости.Point
, LineString
, Polygon
,
GeometryCollection
, MultiPoint
,
MultiLineString
и MultiPolygon
instantiable классы.
4.2.2. Класс
Geometry
Geometry
представляет собой корневой класс иерархии. Это
non-instantiable класс, но имеет ряд реквизитов, которые являются общими для
всех значении геометрии, созданных любым из подклассов Geometry
.
Эти реквизиты описаны в следующем списке. Специфические подклассы имеют их
собственные специфические реквизиты, описанные позже.
((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))
LineString
, MultiPoint
,
MultiLineString
) являются простыми или не простыми. Каждый тип
определяет собственные утверждения, будучи простым или не простым.LineString
, MultiString
) закрыты или не закрыты.
Каждый тип определяет собственные утверждения.NULL
). Пустая
геометрия определена, чтобы быть всегда простой и имеет область 0.Point
имеют размерность 0. Объекты
LineString
имеют размерность 1. Объекты Polygon
имеют размерность 2. Размерности объектов MultiPoint
,
MultiLineString
и MultiPolygon
такие же, как
размерности тех элементов, из которых они состоят.4.2.3. Класс
Point
Point
геометрия, которая представляет одиночное
расположение в координатном пространстве.Point
мог бы представлять каждый город.
Point
мог бы представлять
автобусную остановку (Stylus советует "bus stop" писать как "останов шины",
зараза с русскими программистами).Point
определена как нуль-мерная геометрия.Point
является пустой набор.4.2.4. Класс
Curve
Curve
одномерная геометрия, обычно представляемая
последовательностью точек. Специфические подклассы Curve
определяют тип интерполяции между пунктами (точками).
Curve
non-instantiable.Curve
имеет координаты пунктов.Curve
определена как одномерная геометрия.Curve
проста, если не проходит через ту же
самую отметку дважды.Curve
закрыта, если отметка начала равна оконечной точке.
Curve
пуста.Curve
состоит из
двух оконечных точек.Curve
, которая является простой и закрытой,
LinearRing
.4.2.5. Класс
LineString
LineString
это Curve
с линейной интерполяцией
между пунктами (точками).LineString
могли бы представлять реки.LineString
могли бы
представлять любые проходы.LineString
имеет координаты сегментов,
определенных каждой последовательной парой пунктов.LineString
является Line
, если это состоит
из точно двух пунктов.LineString
является LinearRing
,
если закрыта и проста.4.2.6. Класс
Surface
Surface
двумерная геометрия. Это non-instantiable класс. Есть
instantiable подкласс: Polygon
.Surface
определен как двумерная геометрия.
Surface
как геометрию, которая
состоит из одиночной заплаты, связанной с одной внешней границей и нулем или
более внутренними границами.Surface
представляет собой набор
закрытых кривых, соответствующих внешним и внутренним границам.4.2.7. Класс
Polygon
Polygon
плоский вариант Surface
, представляющий
многостороннюю геометрию. Это определено одиночной внешней границей и нулем
или более внутренними границами, где каждая внутренняя граница
определяет отверстие в Polygon
.Polygon
могли бы
представлять леса, районы и так далее.Polygon
состоит из набора
объектов LinearRing
(то есть, объектов LineString
,
которые являются простыми и закрытыми), которые составляют
внешние и внутренние границы.Polygon
не имеет никаких пересечений. Кольца в границе
Polygon
могут пересекаться в Point
, но
только как тангенс.Polygon
не имеет никаких строк, выбросов или проколов.
Polygon
имеет внутреннюю структуру, которая является
связанным набором отметок.Polygon
может иметь отверстия. Внешний
Polygon
с отверстиями не связан. Каждое отверстие определяет
связанный компонент внешних.Polygon
простой геометрией.
4.2.8. Класс
GeometryCollection
GeometryCollection
геометрия, которая является совокупностью
одной или большего количества конфигураций любого класса.GeometryCollection
должны быть в той же самой
пространственной системе ссылки (то есть, в той же самой системе координат).
Не имеется никаких других ограничений на элементы
GeometryCollection
, хотя подклассы
GeometryCollection
, описанных в следующих разделах могут
ограничивать членство. Ограничения могут быть основаны на:MultiPoint
может содержать только элементы Point
).4.2.9. Класс
MultiPoint
MultiPoint
совокупность геометрии, составленная из элементов
Point
. Пункты (точки) всегда не связаны или упорядочены.MultiPoint
мог бы
представлять цепочку маленьких изолированных островов.MultiPoint
мог бы представлять выходы.
MultiPoint
нульмерная геометрия.MultiPoint
прост, если никакие два из значений
Point
не равны (имеют идентичные координатные значения).
MultiPoint
пустой набор.4.2.10. Класс
MultiCurve
MultiCurve
совокупность геометрии, составленная из элементов
Curve
. MultiCurve
non-instantiable класс.MultiCurve
одномерная геометрия.MultiCurve
проста, если (и только если) все элементы
просты. Единственные пересечения между любыми двумя элементами происходят в
пунктах (точках), которые находятся на границах обоих элементов.MultiCurve
получена, применяя правило
mod 2 union (также известно как правило
odd-even): точка находится в границе
MultiCurve
, если она находится в границах нечетного
числа элементов MultiCurve
.MultiCurve
закрыта, если все элементы закрыты.MultiCurve
всегда пуста.
4.2.11. Класс
MultiLineString
MultiLineString
совокупность геометрии
MultiCurve
, составленная из элементов LineString
.
MultiLineString
мог бы
представлять систему рек или систему дорог.4.2.12. Класс
MultiSurface
MultiSurface
совокупность геометрии, составленная из
поверхностных элементов. MultiSurface
non-instantiable класс.
Есть только instantiable подкласс MultiPolygon
.MultiSurface
не имеют
никаких внутренностей, которые пересекаются.MultiSurface
имеют границы, которые
пересекаются в конечном числе пунктов (точек).
4.2.13. Класс
MultiPolygon
MultiPolygon
объект MultiSurface
, составленный
из элементов Polygon
.MultiPolygon
мог
бы представлять систему озер.MultiPolygon
не имеет никаких двух
элементов Polygon
с внутренностями, которые пересекаются.
MultiPolygon
не имеет никаких двух элементов
Polygon
, которые пересекаются (пересечение также запрещается
предыдущим утверждением), или же касаются в бесконечном числе (точек).
MultiPolygon
, возможно, имеет вырезы, выбросы или
проколы. MultiPolygon
регулярен, закрытый набор отметок.
MultiPolygon
, который имеет больше чем один
Polygon
, имеет внутренности, которые не связаны. Число связанных
внутренних компонентов MultiPolygon
равно числу значений
Polygon
в MultiPolygon
.MultiPolygon
двумерная геометрия.
MultiPolygon
набор закрытых кривых (значения
LineString
), соответствующих
границам элементов Polygon
.Curve
в границе MultiPolygon
находится в границе точно одного элемента Polygon
.Curve
в границе элемента Polygon
находится в границе MultiPolygon
.4.3.
Обеспечиваемые пространственные форматы данных
4.3.1. Well-Known Text (WKT)
Point
:
POINT(15 20)
LineString
с четырьмя пунктами:
LINESTRING(0 0, 10 10, 20 25, 50 60)
Polygon
с одним внешним кольцом и
одним внутренним кольцом:
POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))
MultiPoint
с тремя значениями Point
:
MULTIPOINT(0 0, 20 20, 60 60)
MultiLineString
с двумя значениями
LineString
:
MULTILINESTRING((10 10, 20 20), (15 15, 30 15))
MultiPolygon
с двумя значениями Polygon
:
MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((5 5,7 5,7 7,5 7, 5 5)))
GeometryCollection
, состоящий из двух значений
Point
и одного LineString
:
GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))
4.3.2. Well-Known Binary (WKB)
BLOB
, содержащими
геометрическую информацию WKB.POINT(1 1)
состоит из этой последовательности 21 байтов (каждый представляется здесь
двумя шестнадцатеричными цифрами):
0101000000000000000000F03F000000000000F03F
Byte order : 01
WKB type : 01000000
X: 000000000000F03F
Y: 000000000000F03F
Point
, LineString
,
Polygon
, MultiPoint
, MultiLineString
,
MultiPolygon
и GeometryCollection
.Point
имеет координаты X и Y, каждпя
представляемая как значение двойной точности.4.4.
Создание пространственной базы данных MySQL
4.4.1.
Пространственные типы данных в MySQL
GEOMETRY
POINT
LINESTRING
POLYGON
GEOMETRY
может сохранять значения геометрии любого типа.
Другие типы с одиночным значением (POINT
,
LINESTRING
и POLYGON
) ограничивают их значения
специфическим типом геометрии.MULTIPOINT
MULTILINESTRING
MULTIPOLYGON
GEOMETRYCOLLECTION
GEOMETRYCOLLECTION
может сохранять совокупность объектов
любого типа. Другие типы совокупности (MULTIPOINT
,
MULTILINESTRING
, MULTIPOLYGON
и
GEOMETRYCOLLECTION
) ограничивают элементы совокупности
имеющими специфический тип геометрии.4.4.2.
Создание пространственных значений
4.4.2.1. Создание значений геометрии
через функции WKT
GeomFromText()
принимает WKT любого типа геометрии как первый
параметр. Реализация также обеспечивает специфические для типа функции для
конструкции значений геометрии каждого типа.GeomCollFromText(
,
wkt
[,srid
])GeometryCollectionFromText(
wkt
[,srid
])GEOMETRYCOLLECTION
, использующее
WKT представление и SRID.
GeomFromText(
,
wkt
[,srid
])GeometryFromText(
wkt
[,srid
])LineFromText(
,
wkt
[,srid
])LineStringFromText(
wkt
[,srid
])LINESTRING
, использующее
WKT представление и SRID.MLineFromText(
,
wkt
[,srid
])MultiLineStringFromText(
wkt
[,srid
])MULTILINESTRING
, использующее
WKT представление и SRID.MPointFromText(
,
wkt
[,srid
])MultiPointFromText(
wkt
[,srid
])MULTIPOINT
, использующее
WKT представление и SRID.MPolyFromText(
,
wkt
[,srid
])MultiPolygonFromText(
wkt
[,srid
])MULTIPOLYGON
, использующее
WKT представление и SRID.PointFromText(
wkt
[,srid
])POINT
, использующее
WKT представление и SRID.PolyFromText(
,
wkt
[,srid
])PolygonFromText(
wkt
[,srid
])POLYGON
, использующее
WKT представление и SRID.Polygon
или MultiPolygon
, основанные на WKT представлении совокупности
колец или закрытых значений LineString
.
Эти значения могут пересекаться.BdMPolyFromText(
wkt
,srid
)MultiPolygon
из MultiLineString
в формате WKT, содержащем произвольную совокупность закрытых
значений LineString
.BdPolyFromText(
wkt
,srid
)Polygon
из MultiLineString
в формате WKT, содержащем произвольную совокупность закрытых
значенийLineString
.4.4.2.2. Создание значенией геометрии с
помощью функций WKB
BLOB
, содержащий представление Well-Known Binary и,
факультативно, пространственный идентификатор системы ссылки (SRID). Они
возвращают соответствующую геометрию.GeomFromWKB()
принимает WKB любого типа геометрии как первый
параметр. Реализация также обеспечивает специфические для типа функции
для конструкции значений геометрии каждого типа геометрии.GeomCollFromWKB(
,
wkb
[,srid
])GeometryCollectionFromWKB(
wkb
[,srid
])GEOMETRYCOLLECTION
, использующее
WKB представление и SRID.GeomFromWKB(
,
wkb
[,srid
])GeometryFromWKB(
wkb
[,srid
])LineFromWKB(
,
wkb
[,srid
])LineStringFromWKB(
wkb
[,srid
])LINESTRING
, использующее
WKB представление и SRID.MLineFromWKB(
,
wkb
[,srid
])MultiLineStringFromWKB(
wkb
[,srid
])MULTILINESTRING
, использующее
WKB представление и SRID.MPointFromWKB(
,
wkb
[,srid
])MultiPointFromWKB(
wkb
[,srid
])MULTIPOINT
, использующее
WKB представление и SRID.MPolyFromWKB(
,
wkb
[,srid
])MultiPolygonFromWKB(
wkb
[,srid
])MULTIPOLYGON
, использующее
WKB представление и SRID.PointFromWKB(
wkb
[,srid
])POINT
, использующее
WKB представление и SRID.PolyFromWKB(
,
wkb
[,srid
])PolygonFromWKB(
wkb
[,srid
])POLYGON
, использующее
WKB представление и SRID.Polygon
или MultiPolygon
, основанных на
WKB представлении совокупности колец или закрытых значений
LineString
. Эти значения могут пересекаться.
MySQL не выполняет эти функции:BdMPolyFromWKB(
wkb
,srid
)MultiPolygon
из значения
MultiLineString
в формате WKB, содержащем произвольную
совокупность закрытых значений LineString
.BdPolyFromWKB(
wkb
,srid
)Polygon
из значения
MultiLineString
в формате WKB, содержащем произвольную
совокупность закрытых значений LineString
.4.4.2.3. Создание геометрии с
использованием MySQL-специфических функций
BLOB
, содержащие WKB-представления значений геометрии
без SRID. Результаты этих функций могут заменяться как первый параметр любой
функции в функциональном семействе GeomFromWKB()
.GeometryCollection(
g1
,g2
,...)GeometryCollection
. Если параметры не
задают правильно построенное WKB представление геометрии,
возвращаемое значение NULL
.LineString(
pt1
,pt2
,...)LineString
из ряда WKB параметров
Point
. Если любой аргумент не задает правильный
WKB Point
, вернется NULL
. Если число параметров
Point
меньше чем два, возвращаемое значение NULL
.
MultiLineString(
ls1
,ls2
,...)MultiLineString
, использующее WKB
параметры LineString
. Если любой параметр не WKB
LineString
, возвращаемое значение NULL
.MultiPoint(
pt1
,pt2
,...)MultiPoint
, использующее WKB параметры
Point
. Если любой параметр не WKB Point
,
возвращаемое значение NULL
.MultiPolygon(
poly1
,poly2
,...)MultiPolygon
из набора WKB параметров
Polygon
. Если любой параметр не WKB Polygon
,
возвращаемое значение NULL
.Point(
x
,y
)Point
, используя координаты.Polygon(
ls1
,ls2
,...)Polygon
из ряда WKB параметров
LineString
. Если любой параметр не представляет WKB
LinearRing
(то есть не закрытый и простой
LineString
), возвращаемое значение NULL
.
4.4.3.
Создание пространственных столбцов
CREATE TABLE
или
ALTER TABLE
. В настоящее время пространственные столбцы
обеспечиваются для таблиц типов MyISAM
,
InnoDB
, NDB
и ARCHIVE
.CREATE TABLE
,
чтобы создать таблицу с пространственным столбцом:
CREATE TABLE geom (g GEOMETRY);
ALTER TABLE
, чтобы добавлять или
удалять пространственный столбец в существующей таблице:
ALTER TABLE geom ADD pt POINT;
ALTER TABLE geom DROP pt;
4.4.4.
Начальная загрузка пространственных столбцов
INSERT
:
INSERT INTO geom VALUES (GeomFromText('POINT(1 1)'));
SET @g = 'POINT(1 1)';
INSERT INTO geom VALUES (GeomFromText(@g));
INSERT
:
SET @g = GeomFromText('POINT(1 1)');
INSERT INTO geom VALUES (@g);
SET @g = 'LINESTRING(0 0,1 1,2 2)';
INSERT INTO geom VALUES (GeomFromText(@g));
SET @g = 'POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))';
INSERT INTO geom VALUES (GeomFromText(@g));
SET @g = 'GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(0 0,1 1,2 2,3 3,4 4))';
INSERT INTO geom VALUES (GeomFromText(@g));
GeomFromText()
, чтобы
создать значения геометрии. Вы можете также использовать специфические
для типа функции:
SET @g = 'POINT(1 1)';
INSERT INTO geom VALUES (PointFromText(@g));
SET @g = 'LINESTRING(0 0,1 1,2 2)';
INSERT INTO geom VALUES (LineStringFromText(@g));
SET @g = 'POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))';
INSERT INTO geom VALUES (PolygonFromText(@g));
SET @g = 'GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(0 0,1 1,2 2,3 3,4 4))';
INSERT INTO geom VALUES (GeomCollFromText(@g));
POINT(1 1)
с
шестнадцатеричным литеральным синтаксисом:
mysql> INSERT INTO geom VALUES
-> (GeomFromWKB(0x0101000000000000000000F03F000000000000F03F));
BLOB
:
INSERT INTO geom VALUES (GeomFromWKB(?))
mysql_real_escape_string()
и включать результат в строку
запроса, которая послана серверу.4.4.5.
Выборка пространственных данных
CREATE TABLE geom2 (g GEOMETRY) SELECT g FROM geom;
AsText()
преобразовывает геометрию из внутреннего
формата в строку WKT.
SELECT AsText(g) FROM geom;
AsBinary()
преобразовывает геометрию из внутреннего
формата в BLOB
WKB.
SELECT AsBinary(g) FROM geom;
4.5.
Анализ пространственной информации
4.5.1. Функции преобразования формата геометрии
AsBinary(
g
)
SELECT AsBinary(g) FROM geom;
AsText(
g
)
mysql> SET @g = 'LineString(1 1,2 2,3 3)';
mysql> SELECT AsText(GeomFromText(@g));
+--------------------------+
| AsText(GeomFromText(@g)) |
+--------------------------+
| LINESTRING(1 1,2 2,3 3) |
+--------------------------+
GeomFromText(
wkt
[,srid
])PointFromText()
и
LineFromText()
.GeomFromWKB(
wkb
[,srid
])PointFromWKB()
и
LineFromWKB()
.Функции
4.5.2.
Geometry
NULL
, если параметр имеет неправильный тип
геометрии. Например, Area()
возвращает NULL
, если
тип объекта не является ни Polygon
, ни MultiPolygon
.
4.5.2.1. Общие функции геометрии
Dimension(
g
)g
.
Результат может быть 0, 1 или 2. Смысл этих значений дан в разделе
"
4.2.2. Класс Geometry
".
mysql> SELECT Dimension(GeomFromText('LineString(1 1,2 2)'));
+------------------------------------------------+
| Dimension(GeomFromText('LineString(1 1,2 2)')) |
+------------------------------------------------+
| 1 |
+------------------------------------------------+
Envelope(
g
)g
. Результат возвращен как значение
Polygon
.
POLYGON((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))
mysql> SELECT AsText(Envelope(GeomFromText('LineString(1 1,2 2)')));
+-------------------------------------------------------+
| AsText(Envelope(GeomFromText('LineString(1 1,2 2)'))) |
+-------------------------------------------------------+
| POLYGON((1 1,2 1,2 2,1 2,1 1)) |
+-------------------------------------------------------+
GeometryType(
g
)g
. Имя соответствует одному из
instantiable подклассов Geometry
.
mysql> SELECT GeometryType(GeomFromText('POINT(1 1)'));
+------------------------------------------+
| GeometryType(GeomFromText('POINT(1 1)')) |
+------------------------------------------+
| POINT |
+------------------------------------------+
SRID(
g
)g
.
mysql> SELECT SRID(GeomFromText('LineString(1 1,2 2)',101));
+-----------------------------------------------+
| SRID(GeomFromText('LineString(1 1,2 2)',101)) |
+-----------------------------------------------+
| 101 |
+-----------------------------------------------+
Boundary(
g
)g
.IsEmpty(
g
)g
пустая геометрия,
0, если это не пусто, и 1, если параметр NULL
. Если геометрия
пуста, это представляет пустой набор точек.IsSimple(
g
)g
не имеет никаких
аномальных геометрических пунктов (точек), типа самопересечения или
самокасания. IsSimple()
возвращает 0, если параметр не прост, и
1, если он NULL
.4.5.2.2. Функции
Point
Point
состоит из координат X и Y, которые могут быть
получены, используя следующие функции:X(
p
)p
как
число двойной точности.
mysql> SET @pt = 'Point(56.7 53.34)';
mysql> SELECT X(GeomFromText(@pt));
+----------------------+
| X(GeomFromText(@pt)) |
+----------------------+
| 56.7 |
+----------------------+
Y(
p
)p
как
число двойной точности.
mysql> SET @pt = 'Point(56.7 53.34)';
mysql> SELECT Y(GeomFromText(@pt));
+----------------------+
| Y(GeomFromText(@pt)) |
+----------------------+
| 53.34 |
+----------------------+
4.5.2.3. Функции
LineString
LineString
состоит из значений Point
.
Вы можете извлекать специфические пункты (точки) LineString
,
считать число точек объекта или получать длину.EndPoint(
ls
)Point
, которая является оконечной точкой
значения LineString
ls
.
mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT AsText(EndPoint(GeomFromText(@ls)));
+-------------------------------------+
| AsText(EndPoint(GeomFromText(@ls))) |
+-------------------------------------+
| POINT(3 3) |
+-------------------------------------+
GLength(
ls
)LineString
ls
в
связанной пространственной ссылке.
mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT GLength(GeomFromText(@ls));
+----------------------------+
| GLength(GeomFromText(@ls)) |
+----------------------------+
| 2.8284271247462 |
+----------------------------+
GLength()
ненормативное имя. Это передает данные функции
OpenGIS Length()
.NumPoints(
ls
)Point
в
the LineString
ls
.
mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT NumPoints(GeomFromText(@ls));
+------------------------------+
| NumPoints(GeomFromText(@ls)) |
+------------------------------+
| 3 |
+------------------------------+
PointN(
ls
,N
)N
-ый Point
в
Linestring
ls
.
Точки пронумерованы, начиная с 1.
mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT AsText(PointN(GeomFromText(@ls),2));
+-------------------------------------+
| AsText(PointN(GeomFromText(@ls),2)) |
+-------------------------------------+
| POINT(2 2) |
+-------------------------------------+
StartPoint(
ls
)Point
, которая является отметкой начала значения
point of the LineString
ls
.
mysql> SET @ls = 'LineString(1 1,2 2,3 3)';
mysql> SELECT AsText(StartPoint(GeomFromText(@ls)));
+---------------------------------------+
| AsText(StartPoint(GeomFromText(@ls))) |
+---------------------------------------+
| POINT(1 1) |
+---------------------------------------+
IsRing(
ls
)LineString
value
ls
закрыто (то есть, значения StartPoint()
и EndPoint()
те же самые) и просто (не проходит через ту же
самую точку больше, чем один раз). Возвращается 0, если
ls
не кольцо, и 1, если это NULL
.
4.5.2.4.
Функции
MultiLineString
GLength(
mls
)MultiLineString
mls
. Длина
mls
равна сумме длин элементов.
mysql> SET @mls = 'MultiLineString((1 1,2 2,3 3),(4 4,5 5))';
mysql> SELECT GLength(GeomFromText(@mls));
+-----------------------------+
| GLength(GeomFromText(@mls)) |
+-----------------------------+
| 4.2426406871193 |
+-----------------------------+
GLength()
ненормативное имя. Это передает данные функции
OpenGIS Length()
.IsClosed(
mls
)MultiLineString
mls
закрыто (то есть, значения
StartPoint()
и EndPoint()
равны для каждого
LineString
в mls
). Возвращает 0, если
mls
не закрыт, и 1, если это NULL
.
mysql> SET @mls = 'MultiLineString((1 1,2 2,3 3),(4 4,5 5))';
mysql> SELECT IsClosed(GeomFromText(@mls));
+------------------------------+
| IsClosed(GeomFromText(@mls)) |
+------------------------------+
| 0 |
+------------------------------+
4.5.2.5. Функции
Polygon
Area(
poly
)Polygon
poly
, как измеряется в
пространственной системе ссылки.
mysql> SET @poly = 'Polygon((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))';
mysql> SELECT Area(GeomFromText(@poly));
+---------------------------+
| Area(GeomFromText(@poly)) |
+---------------------------+
| 4 |
+---------------------------+
ExteriorRing(
poly
)Polygon
poly
как
LineString
.
mysql> SET @poly = 'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
mysql> SELECT AsText(ExteriorRing(GeomFromText(@poly)));
+-------------------------------------------+
| AsText(ExteriorRing(GeomFromText(@poly))) |
+-------------------------------------------+
| LINESTRING(0 0,0 3,3 3,3 0,0 0) |
+-------------------------------------------+
InteriorRingN(
poly
,N
)N
-ное внутреннее кольцо для значения
Polygon
poly
как LineString
.
Кольца пронумерованы, начиная с 1.
mysql> SET @poly =
-> 'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
mysql> SELECT AsText(InteriorRingN(GeomFromText(@poly),1));
+----------------------------------------------+
| AsText(InteriorRingN(GeomFromText(@poly),1)) |
+----------------------------------------------+
| LINESTRING(1 1,1 2,2 2,2 1,1 1) |
+----------------------------------------------+
NumInteriorRings(
poly
)Polygon
poly
.
mysql> SET @poly =
-> 'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
mysql> SELECT NumInteriorRings(GeomFromText(@poly));
+---------------------------------------+
| NumInteriorRings(GeomFromText(@poly)) |
+---------------------------------------+
| 1 |
+---------------------------------------+
4.5.2.6. Функции
MultiPolygon
Area(
mpoly
)MultiPolygon
mpoly
, как измеряется в
пространственной системе ссылки.
mysql> SET @mpoly =
-> 'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))';
mysql> SELECT Area(GeomFromText(@mpoly));
+----------------------------+
| Area(GeomFromText(@mpoly)) |
+----------------------------+
| 8 |
+----------------------------+
Centroid(
mpoly
)MultiPolygon
mpoly
как Point
. Не гарантируется, что
результат будет в MultiPolygon
.PointOnSurface(
mpoly
)Point
, которое гарантированно будет в
значении MultiPolygon
mpoly
.4.5.2.7. Функции
GeometryCollection
GeometryN(
gc
,N
)N
-ую геометрию в значении
GeometryCollection
gc
.
Конфигурации пронумерованы, начиная с 1.
mysql> SET @gc = 'GeometryCollection(Point(1 1), LineString(2 2, 3 3))';
mysql> SELECT AsText(GeometryN(GeomFromText(@gc), 1));
+----------------------------------------+
| AsText(GeometryN(GeomFromText(@gc), 1))|
+----------------------------------------+
| POINT(1 1) |
+----------------------------------------+
NumGeometries(
gc
)GeometryCollection
gc
.
mysql> SET @gc = 'GeometryCollection(Point(1 1), LineString(2 2, 3 3))';
mysql> SELECT NumGeometries(GeomFromText(@gc));
+----------------------------------+
| NumGeometries(GeomFromText(@gc)) |
+----------------------------------+
| 2 |
+----------------------------------+
4.5.3. Функции, которые создают новые конфигурации из существующих
4.5.3.1. Функции геометрии, которые производят новые конфигурации
Geometry
" обсуждает несколько функций,
которые создают новые конфигурации из существующих.Envelope(
g
)StartPoint(
ls
)EndPoint(
ls
)PointN(
ls
,N
)ExteriorRing(
poly
)InteriorRingN(
poly
,N
)GeometryN(
gc
,N
)
4.5.3.2. Пространственные операторы
Buffer(
g
,d
)g
меньше или равны расстоянию
d
.ConvexHull(
g
)g
.Difference(
g1
,g2
)
g1
и g2
.
Intersection(
g1
,g2
)
g1
и g2
.SymDifference(
g1
,g2
)
g1
и g2
.Union(
g1
,g2
)g1
и
g2
.
4.5.4. Функции для тестирования пространственных отношений
между геометрическими объектами
4.5.5. Отношения на геометрии:
минимальные ограничительные прямоугольники (MBR)
g1
и g2
. Возвращаемые значения 1 и 0 указывают
истину и ложь соответственно.MBRContains(
g1
,g2
)g1
минимальный ограничительный
прямоугольник g2
.
mysql> SET @g1 = GeomFromText('Polygon((0 0, 0 3, 3 3, 3 0, 0 0))');
mysql> SET @g2 = GeomFromText('Point(1 1)');
mysql> SELECT MBRContains(@g1, @g2), MBRContains(@g2, @g1);
+----------------------+----------------------+
| MBRContains(@g1, @g2)| MBRContains(@g2, @g1)|
+----------------------+----------------------+
| 1 | 0 |
+----------------------+----------------------+
MBRDisjoint(
g1
,g2
)g1
и
g2
непересекающимися.MBREqual(
g1
,g2
)g1
и
g2
тем же самым.MBRIntersects(
g1
,g2
)g1
и g2
.MBROverlaps(
g1
,g2
)g1
и g2
.MBRTouches(
g1
,g2
)
g1
и g2
.MBRWithin(
g1
,g2
)g1
внутренним для минимального
ограничительного прямоугольника g2
.
mysql> SET @g1 = GeomFromText('Polygon((0 0, 0 3, 3 3, 3 0, 0 0))');
mysql> SET @g2 = GeomFromText('Polygon((0 0, 0 5, 5 5, 5 0, 0 0))');
mysql> SELECT MBRWithin(@g1, @g2), MBRWithin(@g2, @g1);
+--------------------+--------------------+
| MBRWithin(@g1, @g2)| MBRWithin(@g2, @g1)|
+--------------------+--------------------+
| 1 | 0 |
+--------------------+--------------------+
4.5.6. Функции, которые проверяют пространственные
связи между конфигурациями
g1
и g2
.Contains(
g1
,g2
)g1
полностью g2
.Crosses(
g1
,g2
)g1
пространственно пересекает
g2
. Возвращает NULL
, если g1
Polygon
или MultiPolygon
, либо если
g2
Point
или
MultiPoint
. Иначе возвращает 0.Disjoint(
g1
,g2
)g1
пространственно непересекающейся с g2
.Distance(
g1
,g2
)Equals(
g1
,g2
)g1
пространственно равной g2
.Intersects(
g1
,g2
)g1
пространственно g2
.Overlaps(
g1
,g2
)g1
пространственно на g2
.
Термин "пространственно накладывается" используется, если две конфигурации
пересекаются, и их пересечение приводит к геометрии той же самой размерности,
но не равной любой из данных конфигураций.Related(
g1
,g2
,pattern_matrix
)pattern_matrix
между
g1
и g2
. Возвращает 1, если
параметры NULL
. Матрица образцов является строкой. Спецификация
будет отмечена здесь, если эта функция выполнена.Touches(
g1
,g2
)g1
пространственно g2
. Две конфигурации пространственно
касаются, если внутренности конфигураций не пересекаются, но граница одной из
конфигураций пересекает границу или внутренность другой.Within(
g1
,g2
)g1
пространственно внутри g2
.4.6.
Оптимизация пространственного анализа
POINT
.4.6.1.
Создание пространственных индексов
SPATIAL
. В настоящее время пространственные
столбцы, которые индексированы, должны быть объявлены как NOT
NULL
. Следующие примеры показывают, как
создавать пространственные индексы:CREATE TABLE
:
CREATE TABLE geom (g GEOMETRY NOT NULL, SPATIAL INDEX(g));
ALTER TABLE
:
ALTER TABLE geom ADD SPATIAL INDEX(g);
CREATE INDEX
:
CREATE SPATIAL INDEX sp_index ON geom (g);
MyISAM
SPATIAL INDEX
создает индекс
R-tree. Для других типов памяти, которые поддерживают пространственную
индексацию, SPATIAL INDEX
создает индекс B-tree. B-tree на
пространственных значениях будет полезен для поисковых таблиц с точным
значением, но не для диапазона.ALTER
TABLE
или DROP INDEX
:ALTER TABLE
:
ALTER TABLE geom DROP INDEX g;
DROP INDEX
:
DROP INDEX sp_index ON geom;
geom
содержит больше, чем
32000 конфигурации, которые сохранены в столбце g
типа
GEOMETRY
. Таблица также имеет столбец
AUTO_INCREMENT
fid
для сохранения
значений объекта ID.
mysql> DESCRIBE geom;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| fid | int(11) | | PRI | NULL | auto_increment |
| g | geometry | | | | |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
mysql> SELECT COUNT(*) FROM geom;
+----------+
| count(*) |
+----------+
| 32376 |
+----------+
1 row in set (0.00 sec)
g
,
используйте эту инструкцию:
mysql> ALTER TABLE geom ADD SPATIAL INDEX(g);
Query OK, 32376 rows affected (4.05 sec)
Records: 32376 Duplicates: 0 Warnings: 0
4.6.2.
Использование пространственного индекса
MBRContains()
или MBRWithin()
в предложении
WHERE
. Следующий запрос находит все объекты, которые
находятся в данном прямоугольнике:
mysql> SET @poly = 'Polygon((30000 15000, 31000 15000, 31000 16000,
-> 30000 16000, 30000 15000))';
mysql> SELECT fid, AsText(g) FROM geom WHERE
-> MBRContains(GeomFromText(@poly), g);
+-----+---------------------------------------------------------------+
| fid | AsText(g) |
+-----+---------------------------------------------------------------+
| 21 | LINESTRING(30350.4 15828.8,30350.6 15845,30333.8 15845,30 ... |
| 22 | LINESTRING(30350.6 15871.4,30350.6 15887.8,30334 15887.8, ... |
| 23 | LINESTRING(30350.6 15914.2,30350.6 15930.4,30334 15930.4, ... |
| 24 | LINESTRING(30290.2 15823,30290.2 15839.4,30273.4 15839.4, ... |
| 25 | LINESTRING(30291.4 15866.2,30291.6 15882.4,30274.8 15882. ... |
| 26 | LINESTRING(30291.6 15918.2,30291.6 15934.4,30275 15934.4, ... |
| 249 | LINESTRING(30337.8 15938.6,30337.8 15946.8,30320.4 15946. ... |
| 1 | LINESTRING(30250.4 15129.2,30248.8 15138.4,30238.2 15136. ... |
| 2 | LINESTRING(30220.2 15122.8,3024.2 15137.8,30207.6 15136, ... |
| 3 | LINESTRING(30179 15114.4,30176.6 15129.4,30167 15128,3016 ... |
| 4 | LINESTRING(30155.2 15121.4,30140.4 15118.6,30142 15109,30 ... |
| 5 | LINESTRING(30192.4 15085,30177.6 15082.2,30179.2 15072.4, ... |
| 6 | LINESTRING(30244 15087,30229 15086.2,30229.4 15076.4,3024 ... |
| 7 | LINESTRING(30200.6 15059.4,30185.6 15058.6,30186 15048.8, ... |
| 10 | LINESTRING(30179.6 1504.8,30181 15002.8,30190.8 15003.6, ... |
| 11 | LINESTRING(30154.2 15000.4,30168.6 15004.8,30166 15014.2, ... |
| 13 | LINESTRING(30105 15065.8,30108.4 15050.8,30118 15053,3011 ... |
| 154 | LINESTRING(30276.2 15143.8,30261.4 15141,30263 15131.4,30 ... |
| 155 | LINESTRING(30269.8 15084,30269.4 15093.4,30258.6 15093,30 ... |
| 157 | LINESTRING(30128.2 15011,30113.2 15010.2,30113.6 15000.4, ... |
+-----+---------------------------------------------------------------+
20 rows in set (0.00 sec)
EXPLAIN
показывает, каким способом
этот запрос выполнен:
mysql> SET @poly = 'Polygon((30000 15000, 31000 15000,
-> 31000 16000, 30000 16000, 30000 15000))';
mysql> EXPLAIN SELECT fid, AsText(g) FROM geom WHERE
-> MBRContains(GeomFromText(@poly), g)\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: geom
type: range
possible_keys: g
key: g
key_len: 32
ref: NULL
rows: 50
Extra: Using where
1 row in set (0.00 sec)
mysql> SET @poly = 'Polygon((30000 15000, 31000 15000,
-> 31000 16000, 30000 16000, 30000 15000))';
mysql> EXPLAIN SELECT fid,AsText(g) FROM g IGNORE INDEX (g) WHERE
-> MBRContains(GeomFromText(@poly), g)\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: geom
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 32376
Extra: Using where
1 row in set (0.00 sec)
SELECT
без пространственного индекса
выдает тот же самый результат, но заставляет время выполнения
повышаться с 0.00 до 0.46 секунды:
mysql> SET @poly = 'Polygon((30000 15000, 31000 15000,
-> 31000 16000, 30000 16000, 30000 15000))';
mysql> SELECT fid, AsText(g) FROM geom IGNORE INDEX (g) WHERE
-> MBRContains(GeomFromText(@poly), g);
+-----+---------------------------------------------------------------+
| fid | AsText(g) |
+-----+---------------------------------------------------------------+
| 1 | LINESTRING(30250.4 15129.2,30248.8 15138.4,30238.2 15136. ... |
| 2 | LINESTRING(30220.2 15122.8,3024.2 15137.8,30207.6 15136, ... |
| 3 | LINESTRING(30179 15114.4,30176.6 15129.4,30167 15128,3016 ... |
| 4 | LINESTRING(30155.2 15121.4,30140.4 15118.6,30142 15109,30 ... |
| 5 | LINESTRING(30192.4 15085,30177.6 15082.2,30179.2 15072.4, ... |
| 6 | LINESTRING(30244 15087,30229 15086.2,30229.4 15076.4,3024 ... |
| 7 | LINESTRING(30200.6 15059.4,30185.6 15058.6,30186 15048.8, ... |
| 10 | LINESTRING(30179.6 1504.8,30181 15002.8,30190.8 15003.6, ... |
| 11 | LINESTRING(30154.2 15000.4,30168.6 15004.8,30166 15014.2, ... |
| 13 | LINESTRING(30105 15065.8,30108.4 15050.8,30118 15053,3011 ... |
| 21 | LINESTRING(30350.4 15828.8,30350.6 15845,30333.8 15845,30 ... |
| 22 | LINESTRING(30350.6 15871.4,30350.6 15887.8,30334 15887.8, ... |
| 23 | LINESTRING(30350.6 15914.2,30350.6 15930.4,30334 15930.4, ... |
| 24 | LINESTRING(30290.2 15823,30290.2 15839.4,30273.4 15839.4, ... |
| 25 | LINESTRING(30291.4 15866.2,30291.6 15882.4,30274.8 15882. ... |
| 26 | LINESTRING(30291.6 15918.2,30291.6 15934.4,30275 15934.4, ... |
| 154 | LINESTRING(30276.2 15143.8,30261.4 15141,30263 15131.4,30 ... |
| 155 | LINESTRING(30269.8 15084,30269.4 15093.4,30258.6 15093,30 ... |
| 157 | LINESTRING(30128.2 15011,30113.2 15010.2,30113.6 15000.4, ... |
| 249 | LINESTRING(30337.8 15938.6,30337.8 15946.8,30320.4 15946. ... |
+-----+---------------------------------------------------------------+
20 rows in set (0.46 sec)
4.7. MySQL: согласованность и совместимость
GEOMETRY_COLUMNS
содержит описание столбцов геометрии, одна строка для каждого столбца
геометрии в базе данных.Length()
на LineString
и
MultiLineString
в настоящее время должна быть вызвана в
MySQL как GLength()
Length()
, которая вычисляет длину строковых значений, и иногда
невозможно различить, вызвана ли функция в текстовом или пространственном
контексте. Это будет со временем как-то решаться.
Найди своих коллег! |