Spec-Zone.ru › MySQL 8.4

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 |
    +--------------------------------+
    
  • ST_IsValid(g)

    Возвращает 1, если аргумент геометрически корректен, 0 — если нет. Корректность геометрии определяется спецификацией OGC.

    Единственной допустимой пустой геометрией является пустой набор геометрий. ST_IsValid() возвращает 1 в этом случае. MySQL не поддерживает значения GIS EMPTY, такие как 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 |
    +------------------+
    
  • ST_MakeEnvelope(pt1, pt2)

    Возвращает прямоугольник, охватывающий две точки, как 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))         |
    +----------------------------------------+
    
  • ST_Simplify(g, max_distance)

    Упрощает геометрию с помощью алгоритма Дугласа-Пекера и возвращает упрощённое значение того же типа.

    Геометрия может быть любого типа, хотя алгоритм Дугласа-Пекера может не обрабатывать каждый тип. Набор геометрий обрабатывается поочерёдно, передавая его компоненты алгоритму упрощения, а возвращаемые геометрии помещаются в набор геометрий в результате.

    Аргумент 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)             |
    +---------------------------------+
    
  • ST_Validate(g)

    Проверяет геометрию по спецификации 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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/spatial-convenience-functions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API