12.16.12 Функции пространственной удобности
Функции в этом разделе предоставляют удобные операции с геометрическими значениями.
-
ST_Distance_Sphere(g1,g2[,radius])Возвращает минимальное сферическое расстояние между двумя точками и/или многоточками на сфере в метрах или
NULL, если какой-либо геометрический аргумент являетсяNULLили пустым.Вычисления используют сферическую Землю и настраиваемый радиус. Необязательный аргумент
radiusдолжен быть задан в метрах. Если он опущен, используется значение по умолчанию 6 370 986 метров. Возникает ошибка, если аргументradiusприсутствует, но не является положительным.Геометрические аргументы должны состоять из точек, определяющих значения координат (долгота, широта):
Долгота и широта являются первой и второй координатами точки соответственно.
Обе координаты заданы в градусах.
Значения долготы должны находиться в диапазоне (-180, 180]. Положительные значения соответствуют восточной части от начального меридиана.
Значения широты должны находиться в диапазоне [-90, 90]. Положительные значения соответствуют северному полушарию.
Поддерживаемые комбинации аргументов — (
Point,Point), (Point,MultiPoint) и (MultiPoint,Point). Для других комбинаций возникает ошибка.Если какой-либо геометрический аргумент не является синтаксически корректной геометрической строкой байтов, возникает ошибка.
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 — если аргумент не синтаксически корректен или не геометрически валиден. Если аргумент является
NULL, возвращаемое значение равноNULL. Геометрическая валидность определяется спецификацией OGC.Единственной допустимой пустой геометрией является пустой набор геометрий.
ST_IsValid()возвращает 1 в этом случае.ST_IsValid()работает только для декартовой системы координат и требует геометрического аргумента со значением SRID 0. В противном случае возникает ошибка.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. Если какой-либо аргумент являетсяNULL, возвращаемое значение равноNULL.Вычисления выполняются в декартовой системе координат, а не на сфере, эллипсоиде или Земле.
При заданных двух точках
pt1иpt2,ST_MakeEnvelope()создает геометрию результата на абстрактной плоскости следующим образом:Если
pt1иpt2равны, результатом является точкаpt1.В противном случае, если
(— это вертикальный или горизонтальный отрезок, результатом является отрезокpt1,pt2)(.pt1,pt2)В противном случае результатом является многоугольник, используя
pt1иpt2в качестве диагональных точек.
Результат геометрии имеет SRID 0.
ST_MakeEnvelope()требуетPointгеометрических аргументов со значением SRID 0. В противном случае возникает ошибка.Если какой-либо аргумент не является синтаксически корректной геометрической строкой байтов, или если какое-либо значение координаты двух точек является бесконечным или
NaN, возникает ошибка.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)) | +----------------------------------------+ -
Упрощает геометрию с помощью алгоритма Даугаса-Пекера и возвращает упрощенное значение того же типа. Если какой-либо аргумент является
NULL, возвращаемое значение равноNULL.Геометрия может быть любого типа, хотя алгоритм Даугаса-Пекера может не обрабатывать каждый тип. Набор геометрий обрабатывается, передавая его компоненты по одному в алгоритм упрощения, а возвращаемые геометрии помещаются в набор геометрий в качестве результата.
Аргумент
max_distance— это расстояние (в единицах входных координат) вершины до других отрезков, которые будут удалены. Вершины, находящиеся на расстоянии, меньшем или равном этому расстоянию, от упрощенных линий, удаляются. Если аргументmax_distanceне положительный или равенNaN, возникает ошибка.Согласно Boost.Geometry, геометрия может стать невалидной в результате процесса упрощения, и процесс может создать самопересечения. Для проверки валидности результата передайте его в
ST_IsValid().Если геометрический аргумент не является синтаксически корректной геометрической строкой байтов, возникает ошибка.
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()работает только для декартовой системы координат и требует геометрического аргумента со значением SRID 0. В противном случае возникает ошибка.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.