Поиск
Создание базы данных MySQL для работы с пространственными данными
В этом разделе описываются типы данных, которые можно использовать для представления пространственных данных в MySQL, и функции, доступные для создания и извлечения пространственных значений.
Типы пространственных данных MySQL
В MySQL имеются типы данных, которые соответствуют классам OpenGIS. Некоторые из этих типов хранят единственное геометрическое значение:- GEOMETRY
- POINT
- LINESTRING
- POLYGON
GEOMETRY может хранить геометрические значения любого типа. Остальные типы пространственных данных с единственным значением - point, LINESTRING и polygon -ограничивают свои значения определенным геометрическим типом.
Некоторые типы данных могут хранить коллекции значений:
- MULTIPOINT
- MULTILINESTRING
- MULTIPOLYGON
- GEOMETRYCOLLECTION
GEOMETRYCOLLECTION позволяет сохранять коллекцию объектов любого типа. Остальные ТИПЫ коллекций - MULTIPOINT, MULTILINESTRING, MULTIPOLYGON И GEOMETRYCOLLECTION -ограничиваются коллекциями с определенным типом геометрических объектов.
Создание пространственных значений
В этом разделе описываются способы создания пространственных значений с помощью WKT- и WKB-функций, определенных в стандартах OpenGIS, а также с помощью специальных MySQL-функций.Создание геометрических значений с помощью WKT-функций
MySQL предлагает целый ряд функций, которые в качестве входных параметров принимают WKT-значения и, по выбору, идентификатор пространственной системы координат (SRID). Они возвращают значение соответствующей геометрии.Функция GeomFromText() в качестве первого аргумента принимает WKT-значение любого геометрического типа. Реализация также обеспечивает отдельные для каждого типа функции-конструкторы, необходимые для создания геометрических значений каждого типа геометрических объектов.
- GeomCollFromText(wkt[, srid)), GeometryCollectionFromText(wkt [, srid])
Создает значение GEOMETRYCOLLECTION, используя его WKT-формат и идентифи
катор SRID. - GeomFromText (wkt[, srid]), GeometryFromText (wkt [, srid])
Создает геометрическое значение любого типа, используя его 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(wfct [, srid])
Создает значение MULT I POLYGON, используя его WKT-формат и идентификатор SRID. - PointFromText (wkt[, srid])
Создает значение POINT, используя его WKT-формат и идентификатор SRID. - PolyFromText(wkt[, srid]), PolygonFromText(wkt [, srid])
Создает значение POLYGON, используя его WKT-формат и идентификатор SRID.
В спецификации OpenGIS также описываются и необязательные функции для создания значений Polygon и MultoPolygon, основанных на WKT-представлении коллекции колец или значений замкнутых объектов LineString. Эти значения могут пересекаться. В MySQL не реализованы следующие функции: - BdMPolyFromText (wkt, srid)
Создает значение MultiPolygon из значения MultiLineString в WKT-формате, которое содержит произвольную коллекцию значений замкнутых объектов LineString. - BdPolyFromText {wkt, srid)
- GeomCollFromWKB(wkb[, srid]), GeometryCollectionFromWKB(wkt[, srid])
Создает значение GEOMETRYCOLLECTION, используя его WKB-формат и идентифи
катор SRID. - GeomFromWKB(wkb[,srid]), GeometryFromWKB {wkt [,srid])
- LineFromWKB(fctfcb[,srid]), LineStringFromWKB {wkb[,srid])
- MLineFromWKB{ wkb [r srid] ),MultiLineStringFroraWKB{wkb[,srid])
- MPointFromWKB{wkb[,srid]), MultiPointFroraWKB{wkb[, srid])
- MPolyFromWKB {wkb[,srid]), MultiPolygonFromWKB[wkb[,srid])
- PointFroraWKB[wkb[,srid])
- PolyFromWKB {wkb [r srid]), PolygonFromWKB [wkb[, srid])
- BdMPolyFromWKB(wkb,srid)
- BdPolyFromWKB(wkb, srid)
- GeometryCollection{gl,д2,...)
- LineString {ptlrpt2,...)
- MultiLineString{lsl,Is2,...)
- Multipoint (ptltpt2,...)
- MultiPolygon[polyl,poly2, ...)
- Point (x, у)
- Polygon {lslrls2,...)
- Для создания таблицы с пространственным столбцом используйте оператор
CREATE TABLE:
- Чтобы добавить пространственный столбец в существующую таблицу или уда
лить его, используйте оператор ALTER TABLE:
- Можно вставить значение POINT (1 1), используя шестнадцатеричный литераль
ный/буквенный синтаксис:
- Приложение ODBC может посылать значения в WKB-формате, привязывая их к
заполнителю с помощью аргумента типа BLOB:
- В программе С можно отменить двоичное значение с помощью mysql_real_escape_string() и включить результат в отсылаемую на сервер строку запроса.
Создание геометрических значений с помощью WKB-функций
MySQL предлагает набор функций, которые в качестве входных параметров принимают значения BLOB в WKB-формате, и, по выбору, идентификатор пространственной системы координат (SRID).Они возвращают значение соответствующей геометрии.Функция GeomFromWKT () в качестве первого параметра принимает WKB-значения любого типа геометрических объектов. Реализация также обеспечивает отдельные для каждого типа функции-конструкторы, предназначенные для создания геометрических значений каждого типа геометрических объектов.
Создает геометрическое значение геометрии любого типа, используя его WKB-формат и идентификатор SRID.
Создание геометрических значений с помощью
специальных MySQL-функций | На заметку!щ Функции, перечисленные в этом разделе, в MySQL не реализованы.
MySQL предлагает набор полезных функций для создания WKB-представлений геометрических значений. Функции, описанные в этом разделе, являются расширениями MySQL для спецификаций OpenGIS. Результаты данных функций - это значения BLOB, содержащие WKB-представление геометрических значений без идентификатора пространственной системы координат (SRID). Результаты этих функций могут использоваться в качестве первого аргумента для любой функции из семейства GeomFromWKB ().
Создание пространственных столбцов
MySQL предлагает стандартный путь создания пространственных столбцов для разных типов геометрий, например, с помощью операторов CREATE TABLE или ALTER TABLE. В настоящее время пространственные столбцы поддерживаются только для таблиц My lSAM.raysql> ALTER TABLE geom DROP pt; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0
Заполнение пространственных столбцов
После того, как пространственные столбцы созданы, их можно заполнить пространственными данными.Значения должны сохраняться во внутреннем формате геометрического объекта, но в такой формат их можно преобразовывать и из форматов WKT и WKB. Следующие примеры иллюстрируют способы вставки геометрических значений в таблицу путем преобразования WKT-значений во внутренний геометрический формат.
Преобразование можно выполнять непосредственно через оператор INSERT:
INSERT INTO geom VALUES (GeomFromText(4POINT(1 1)'));
SET @g = 'POINT(1 1)';
INSERT INTO geom VALUES (GeomFromText(@g));
Или же можно преобразовать значения в нужный формат и перед выполнением оператора INSERT:
SET @g = GeomFromText('POINT(1 I)1); INSERT INTO geom VALUES (@g);
В следующих примерах выполняется вставка в таблицу более сложных геометрических значений:
SET @g = 'LINESTRING(0 0,1 1,2 2) ';
INSERT INTO geom VALUES (GeomFromText(@g));
SET @g = fPOLYGON((0 0,10 0,10 10,0 10,0 0), (5 5,7 5,7 7,5 7, 5 5))f;
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 (GeomFroraText(@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));
Обратите внимание, что если клиентская прикладная программа требует использовать WKB-формат геометрических значений, именно она и будет отвечать за отправку на сервер корректно оформленных WKB-значений в запросах. Однако существует несколько способов удовлетворить такое требование. Например:
-> (GeomFromWKB (0x0101000000000000000000F03F000000000000F03F));
Другие интерфейсы программирования могут поддерживать подобный механизм заполнителя.
Выборка пространственных данных
Геометрические значения, сохраненные в таблице, могут быть выбраны во внутреннем формате. Также их можно преобразовывать в формат WKT или WKB.Выборка пространственных данных во внутреннем формате
Выборка геометрических значений с использованием внутреннего формата может пригодиться при переходах от таблицы к таблице:CREATE TABLE geom2 (g GEOMETRY) SELECT g FROM geom;
Выборка пространственных данных в WKT-формате

Выборка пространственных данных в WKB-формате
Функция AsBinary() преобразует геометрический объект из внутреннего формата в содержащий WKB-значение объект BLOB.SELECT AsBinary(g) FROM geom;