14.16.13 Функции пространственной удобства
Функции в этом разделе предоставляют удобные операции с геометрическими значениями.
Если не указано иное, функции в этом разделе обрабатывают свои геометрические аргументы следующим образом:
Если какой-либо аргумент является
NULL, возвращаемое значение равноNULL.Если какой-либо геометрический аргумент не является синтаксически корректной геометрией, возникает ошибка.
Если какой-либо геометрический аргумент является синтаксически корректной геометрией в неопределенной системе пространственной привязки (SRS), возникает ошибка.
Для функций, принимающих несколько геометрических аргументов, если эти аргументы не находятся в одной и той же системе SRS, возникает ошибка.
В противном случае, возвращаемое значение является не-
NULL.
Эти функции удобства доступны:
-
ST_Distance_Sphere(g1,g2[,radius])Возвращает минимальное сферическое расстояние между
PointилиMultiPointаргументами на сфере в метрах. (Для расчётов расстояний общего назначения, см. функциюST_Distance().) Необязательный аргументradiusдолжен быть указан в метрах.Если оба параметра геометрии являются допустимыми декартовыми
PointилиMultiPointзначениями в SRID 0, возвращаемое значение — кратчайшее расстояние между двумя геометриями на сфере с заданным радиусом. Если аргумент опущен, используется значение по умолчанию — 6 370 986 метров. Координаты точки X и Y интерпретируются как долгота и широта соответственно в градусах.Если оба параметра геометрии являются допустимыми
PointилиMultiPointзначениями в географической системе координат (SRS), возвращаемое значение — кратчайшее расстояние между двумя геометриями на сфере с заданным радиусом. Если аргумент опущен, используется значение по умолчанию, равное среднему радиусу, определяемому как (2a+b)/3, где a — большая полуось, а b — малая полуось SRS.ST_Distance_Sphere()обрабатывает свои аргументы так, как описано в введении к этому разделу, за исключением следующих моментов:Поддерживаемые комбинации аргументов геометрии —
PointиPoint, илиPointиMultiPoint(в любом порядке). Если хотя бы одна из геометрий не является ниPoint, ниMultiPoint, и её SRID равен 0, возникает ошибка. Если хотя бы одна из геометрий не является ниPoint, ниMultiPoint, и её SRID относится к географической SRS, возникает ошибка. Если какая-либо геометрия относится к проекционной SRS, возникает ошибка.-
Если у любого аргумента долгота или широта находятся вне допустимого диапазона, возникает ошибка:
Если значение долготы не находится в диапазоне (−180, 180], возникает ошибка.
Если значение широты не находится в диапазоне [−90, 90], возникает ошибка.
Указанные диапазоны — в градусах. Если SRS использует другие единицы измерения, диапазон использует соответствующие значения в этих единицах. Точные пределы диапазона незначительно отличаются из-за арифметики с плавающей запятой.
Если аргумент
radiusприсутствует, но не положителен, возникает ошибка.Если расстояние превышает диапазон числа двойной точности, возникает ошибка.
mysql>
SET @pt1 = ST_GeomFromText('POINT(0 0)');mysql>SET @pt2 = ST_GeomFromText('POINT(180 0)');mysql>SELECT ST_Distance_Sphere(@pt1, @pt2);+--------------------------------+ | ST_Distance_Sphere(@pt1, @pt2) | +--------------------------------+ | 20015042.813723423 | +--------------------------------+ -
Возвращает 1, если аргумент геометрически корректен, 0 — если нет. Корректность геометрии определяется спецификацией OGC.
Единственной допустимой пустой геометрией является пустой набор геометрий.
ST_IsValid()возвращает 1 в этом случае. MySQL не поддерживает значения GISEMPTY, такие какPOINT EMPTY.ST_IsValid()обрабатывает свои аргументы так, как описано в введении к этому разделу, за исключением следующего момента:-
Если геометрия имеет географическую SRS с долготой или широтой вне допустимого диапазона, возникает ошибка:
Если значение долготы не находится в диапазоне (−180, 180], возникает ошибка.
Если значение широты не находится в диапазоне [−90, 90], возникает ошибка.
Указанные диапазоны — в градусах. Если SRS использует другие единицы измерения, диапазон использует соответствующие значения в этих единицах. Точные пределы диапазона незначительно отличаются из-за арифметики с плавающей запятой.
mysql>
SET @ls1 = ST_GeomFromText('LINESTRING(0 0,-0.00 0,0.0 0)');mysql>SET @ls2 = ST_GeomFromText('LINESTRING(0 0, 1 1)');mysql>SELECT ST_IsValid(@ls1);+------------------+ | ST_IsValid(@ls1) | +------------------+ | 0 | +------------------+ mysql>SELECT ST_IsValid(@ls2);+------------------+ | ST_IsValid(@ls2) | +------------------+ | 1 | +------------------+ -
-
Возвращает прямоугольник, охватывающий две точки, как
Point,LineStringилиPolygon.Расчёты выполняются в декартовой системе координат, а не на сфере, сфероиде или Земле.
Для двух точек
pt1иpt2, функцияST_MakeEnvelope()создаёт геометрию результата на абстрактной плоскости следующим образом:Если
pt1иpt2равны, результат — точкаpt1.В противном случае, если
(является вертикальным или горизонтальным отрезком, результат — отрезокpt1,pt2)(.pt1,pt2)В противном случае, результат — многоугольник, используя
pt1иpt2в качестве диагональных точек.
Результат геометрии имеет SRID 0.
ST_MakeEnvelope()обрабатывает свои аргументы так, как описано в введении к этому разделу, за исключением следующих моментов:Если аргументы не являются
Pointзначениями, возникает ошибка.Возникает ошибка, если какое-либо значение координаты двух точек является бесконечным или
NaN.Если любая геометрия имеет значение SRID для географической системы координат (SRS), возникает ошибка.
mysql>
SET @pt1 = ST_GeomFromText('POINT(0 0)');mysql>SET @pt2 = ST_GeomFromText('POINT(1 1)');mysql>SELECT ST_AsText(ST_MakeEnvelope(@pt1, @pt2));+----------------------------------------+ | ST_AsText(ST_MakeEnvelope(@pt1, @pt2)) | +----------------------------------------+ | POLYGON((0 0,1 0,1 1,0 1,0 0)) | +----------------------------------------+ -
Упрощает геометрию с помощью алгоритма Дугласа-Пекера и возвращает упрощённое значение того же типа.
Геометрия может быть любого типа, хотя алгоритм Дугласа-Пекера может не обрабатывать каждый тип. Набор геометрий обрабатывается поочерёдно, передавая его компоненты алгоритму упрощения, а возвращаемые геометрии помещаются в набор геометрий в результате.
Аргумент
max_distance— это расстояние (в единицах входных координат) вершины до других отрезков, которые нужно удалить. Вершины, находящиеся на расстоянии, меньшем или равном этому значению, от упрощённых линий, удаляются.Согласно Boost.Geometry, геометрии могут стать некорректными в результате процесса упрощения, и процесс может создавать самопересечения. Чтобы проверить корректность результата, передайте его в функцию
ST_IsValid().ST_Simplify()обрабатывает свои аргументы так, как описано в введении к этому разделу, за исключением следующего момента:Если аргумент
max_distanceне положителен или являетсяNaN, возникает ошибка.
mysql>
SET @g = ST_GeomFromText('LINESTRING(0 0,0 1,1 1,1 2,2 2,2 3,3 3)');mysql>SELECT ST_AsText(ST_Simplify(@g, 0.5));+---------------------------------+ | ST_AsText(ST_Simplify(@g, 0.5)) | +---------------------------------+ | LINESTRING(0 0,0 1,1 1,2 3,3 3) | +---------------------------------+ mysql>SELECT ST_AsText(ST_Simplify(@g, 1.0));+---------------------------------+ | ST_AsText(ST_Simplify(@g, 1.0)) | +---------------------------------+ | LINESTRING(0 0,3 3) | +---------------------------------+ -
Проверяет геометрию по спецификации OGC. Геометрия может быть синтаксически корректной (значение WKB плюс SRID), но геометрически некорректной. Например, этот многоугольник геометрически некорректен:
POLYGON((0 0, 0 0, 0 0, 0 0, 0 0))ST_Validate()возвращает геометрию, если она синтаксически корректна и геометрически корректна,NULLесли аргумент не синтаксически корректен, не геометрически корректен или являетсяNULL.ST_Validate()может использоваться для фильтрации некорректных данных геометрии, хотя с затратами. Для приложений, требующих более точных результатов, не искажённых некорректными данными, эта плата может быть оправдана.Если аргумент геометрии корректен, он возвращается как есть, за исключением того, что если у входного
PolygonилиMultiPolygonесть кольца по часовой стрелке, эти кольца инвертируются перед проверкой на корректность. Если геометрия корректна, возвращается значение с инвертированными кольцами.Единственной допустимой пустой геометрией является пустой набор геометрий.
ST_Validate()возвращает его напрямую без дальнейшей проверки в этом случае.ST_Validate()обрабатывает свои аргументы так, как описано в введении к этому разделу, за исключением перечисленных ниже моментов:-
Если геометрия имеет географическую SRS с долготой или широтой вне допустимого диапазона, возникает ошибка:
Если значение долготы не находится в диапазоне (−180, 180], возникает ошибка.
Если значение широты не находится в диапазоне [−90, 90], возникает ошибка.
Указанные диапазоны — в градусах. Точные пределы диапазона незначительно отличаются из-за арифметики с плавающей запятой.
mysql>
SET @ls1 = ST_GeomFromText('LINESTRING(0 0)');mysql>SET @ls2 = ST_GeomFromText('LINESTRING(0 0, 1 1)');mysql>SELECT ST_AsText(ST_Validate(@ls1));+------------------------------+ | ST_AsText(ST_Validate(@ls1)) | +------------------------------+ | NULL | +------------------------------+ mysql>SELECT ST_AsText(ST_Validate(@ls2));+------------------------------+ | ST_AsText(ST_Validate(@ls2)) | +------------------------------+ | LINESTRING(0 0,1 1) | +------------------------------+ -
© 2025 Oracle
Licensed under the GPLv2 License.