Анализ пространственной информации

После заполнения пространственных столбцов значениями можно делать запросы и анализировать их. MySQL предлагает набор функций для выполнения различных опера­ций над пространственными данными. Эти функции можно разделить на четыре основ­ных категории согласно типу выполняемой ими операции:

  • Функции, которые преобразуют геометрические объекты из одного формата в
    другой.
  • Функции, которые обеспечивают доступ к качественным или количественным
    свойствам того или иного геометрического объекта.
  • Функции, которые описывают взаимосвязь между двумя геометриями.
  • Функции, которые создают новые геометрии из уже существующих.
    Функции пространственного анализа могут использоваться в различных контекстах:
  • В любой интерактивной SQL-программе, подобной mysql или MySQLCC.
  • В прикладных программах, написанных на любом языке, который поддерживает
    клиентский API-интерфейс MySQL.
Функции преобразования формата геометрических объектов

MySQL поддерживает следующие функции для преобразования формата значений геометрических объектов с внутреннего в WKT- или WKB-формат и наоборот:

  1. AsBinary(д). Преобразует значение во внутреннем геометрическом формате в
    WKB-формат и возвращает двоичный результат.
  2. AsText(g). Преобразует значение во внутреннем геометрическом формате гео
    метрии в WKT-формат и возвращает результат в виде строки.

mysql> SET @g =’LineString(l 1,2 2,3 3)’;
mysql> SELECT AsText(GeomFromText(@g));
I AsText(GeomFromText(@G)) I
+—————————————— h
I LINESTRINGd 1,2 2,3 3) |

  1. GeomFromText(wkt[,srid]). Преобразует строковое значение из WKT-формата во
    внутренний геометрический формат и возвращает результат. Также поддержива
    ется набор специальных для каждого типа функций, таких как PointFromText() и
    LineFromText(); см. раздел Создание геометрических значений с помощью WKT-функций
  2. GeomFromWKB({Wcb[,srid]). Преобразует двоичное значение из WKB-формата во
    внутренний геометрический формат и возвращает результат. Также поддерживается набор специальных для каждого типа функций, таких как PointFromWKB() и
    LineFromWKB (); см. раздел Создание геометрических значений с помощью WKB-функций
Геометрические функции

Каждая функция, принадлежащая данной группе, принимает геометрическое значе­ние в качестве аргумента и возвращает некоторое качественное или количественное свойство геометрии. Некоторые функции ограничивают тип аргументов. Такие функции возвращают значение NULL, если геометрический тип аргумента указан неверно. Напри­мер, функция Area () возвратит NULL, если тип объекта не соответствует ни Polygon, ни MultiPolygon.

Общие функции геометрических объектов

Функции, перечисленные в этом разделе, не ограничивают аргументы и принимают геометрическое значение любого типа.

  • Dimension(g). Возвращает унаследованное измерение геометрического значения
    д. Результатом может быть -1, 0, 1 или 2. (Описание смысла этих значений дается
    в разделе Класс Geometry)

raysql> SELECT Dimension(GeomFromText(ALineString (l 1,2 2)’));

Envelope (g). Возвращается минимальный ограничивающий прямоугольник (MBR) для геометрического значения д. Результат возвращается в виде значения Polygon.
mysql> SELECT AsText(Envelope(GeomFromText(‘LineString(l 1,2 2)’)));

Границы многоугольника определяются угловыми точками ограничивающего прямоугольника:
POLYGON((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))
GeometryType (g). Возвращает в виде строки название геометрического типа, к которому относится экземпляр геометрии д. Название будет соответствовать названию одного из подклассов с возможностью создания экземпляров класса Geometry

SRID(g). Возвращает целое число, обозначающее идентификатор пространствен¬ной системы координат (SRID) для геометрии д. mysql> SELECT SRID (GeomFromText (‘ Line String (l 1,2 2)’,101));

В спецификации OpenGIS также определены следующие функции, которые в MySQL пока не реализованы:

  • Boundary {д}. Возвращает геометрический объект, который является замыканием
    комбинаторной границы геометрического значения д.
  • isEmpty(д). Возвращает 1, если значение геометрии д является пустой геометри
    ей, 0 – если не пустой, и -1 – если аргумент равен NULL. Если геометрический объ
    ект пустой, он представляет собой пустое множество точек.
  • IsSimple (g). В настоящее время эта функция является заполнителем и не должна
    использоваться. Ниже представлено ее описание на тот случай, если она все-таки
    будет применяться.

Функция возвращает 1, если значение геометрии д не содержит никаких аномальных геометрических точек, подобных самопересечению или самокасания. IsSimple () возвращает 0, если аргумент не является простым, и -1, если аргумент равен NULL.
В описании каждого геометрического класса с возможностью создания экземпля­ров, предложенном ранее в этой главе, перечислены определенные условия, при ко­торых экземпляры того или иного класса будут классифицироваться как непростые.

Функции Point

Point состоит из координат X и Y, которые можно получить с помощью следующих функций:

  • X (р). Возвращает значение координаты X для точки р в виде числа с двойной точ
    ностью.

mysql> SELECT X (GeomFromText (‘Point (5б.7 53.34)’));


Y (p). Возвращает значение координаты Y для точки р в виде числа с двойной точностью.
mysql> SELECT Y(GeomFromText(‘Point(56.7 53.34)’));

Функции LineString

Объект LineString состоит из значений Point. Можно извлекать определенные точки объекта LineString, подсчитывать количество точек, из которых он состоит, или полу­чать значение его длины.

  • EndPoint(Is). Возвращает точку Point, которая является конечной точкой
    LineStr ing-значения Is.

mysql> SET @ls = ‘LineString(l 1,2 2,3 3)‘; mysql> SELECT AsText(EndPoint(GeomFromText(@ls)));

  • GLength (Is). Возвращает в виде числа с удвоенной точностью длину LineString значения Is со связанной с ним пространственной ссылкой.
  • mysql> SET Ш = ‘LineString(l 1,2 2,3 3)‘; mysql> SELECT GLength(GeomFromText (@Is));

  • IsClosed(ls). Возвращает 1, если LineString-значения 25 является замкнутым
    (то есть значения StartPoint () и EnPoint () совпадают). Возвращает 0, если Is не
    является замкнутым, и -1, если Is соответствует NULL.
  • mysql> SET Sis ‘LineStringU 1,2 2,3 3)‘ ; mysql> SELECT IsClosed(GeoraFromText(61s));

  • NumPoints (Js). Возвращает число точек в LineStr ing-объекте Is.
    mysql> SET @ls = ‘LineString(1 1,2 2,3 3)’;
    mysql> SELECT NumPoints (GeomFromText(@ls));
  • PointN(Is,л). Возвращает л-ную точку в Linestring-значении Is. Нумерация то
    чек начинается с 1.

mysql> SET @ls = ‘LineString(l 1,2 2,3 3)‘; mysql> SELECT AsText(PointN(GeomFromText(@ls),2));

mysql> SET @ls = ‘LineString(l 1,2 2,3 3)’ ;
mysql> SELECT AsText(StartPoint(GeomFromText(@Is)));

В спецификации OpenGIS также определена следующая функция, которая MySQL пока не реализована:
« isRing(Is). Возвращает 1, если LineSt r ing-объект Is является замкнутым (то есть значения StartPoint () и EndPoint () совпадают) и простым (линия не прохо­дит в одной и той же точке более одного раза). Возвращает 0, если Is – это не кольцо, и -1, если Is равно NULL.

Функции MultiLineString
  • GLength (mis). Возвращает в виде числа с удвоенной точностью значение длины Mu ltiLineSt r ing-объекта mis. Длина mis равна сумме длин составляющих его элементов.

mysql> SET @mls = ‘MultiLineString((1 1,2 2,3 3),(4 4,5 5))
mysql> SELECT GLength(GeomFromText(@mls));

IsClosed(mls). Возвращает 1, если MultiLineString-объект mis является замкнутым (то есть значения StartPoint () и EndPoint () одинаковы для каждого объ­екта LineString в mis). Возвращает 0, если mis замкнутым не является, и -1, если значение mis равно NULL.
mysql> SET @mls = ‘MultiLineString((1 1,2 2,3 3),(4 4,5 5))’;
mysql> SELECT IsClosed(GeomFromText(@mls));

Функции Polygon
  • Area {poly). Возвращает в виде числа с удвоенной точностью значение области
    Polygon-объекта poly, в соответствии с его размерами в пространственной систе
    ме координат.
  • mysql> SET @poly = ‘Polygon((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 I)) 1;
    mysql> SELECT Area(GeomFromText(@poly));

  • 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 I))1;
    mysql> SELECT AsText(ExteriorRing(GeomFromText(@poly)));

  • InteriorRingN(poly,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 I))1;
    mysql> SELECT AsText(InteriorRingN(GeomFromText(@poly) ,1));

  • NumlnteriorRings {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 NumlnteriorRings(GeomFromText(@poly));

    Функции MultiPolygon
  • Area {mpoly). Возвращает в виде числа двойной точности область MultoPolygon
    объекта mpoly, в соответствии с его размерами в пространственной системе коор
    динат.

mysql> SET @mpoly =
-> ‘MultiPolygon(((0 0,0 3,3 3,3 0,0 0), (I 1,1 2,2 2,2 1,1 I)))1;
mysql> SELECT Area(GeomFromText(@mpoly));

В спецификации OpenGIS также определены следующие функции, которые в MySQL пока не реализованы:

  • Centroid{mpoly). Возвращает математический центр тяжести для MultiPolygon
    объекта mpoly в виде Point. He гарантируется, что результат будет находиться в
    пределах
    MultiPolygon.
  • PointOnSurface {mpoly). Возвращает значение Point, которое гарантированно будет находиться в пределах Multi Polygon-объекта mpoly.
Функции GeometryCollection
  • GeometryN {дс, л). Возвращает л-ный геометрический объект в GeometryCollection
    объекте дс. Нумерация геометрических объектов начинается с 1.
  • mysql> SET @gc = ‘GeometryCollection(Point(1 1),LineString(2 2, 3 3))’;
    mysql> SELECT AsText(GeometryN(GeomFromText(@gc),1));

  • NumGeometries(gc). Возвращает количество геометрических объектов в
    GeometryCollection-значении дс.

mysql> SET @gc = ‘GeometryCollection(Point(1 1),LineString(2 2,3 3))’; mysql> SELECT NumGeometries(GeomFromText(@gc));

Функции для создания новых геометрий из существующих
Геометрические функции для создания новых геометрий

В разделе Геометрические функцииуже обсуждались некоторые функции, с помощью которых можно создавать новые геометрии из существующих:

  1. Envelope (gr)
  2. StartPoint(Is)
  3. EndPoint(Is)
  4. PointK(ls,n)
  5. ExteriorRing{poly)
  6. InteriorRingN{poly,n)
  7. GeometryN(gc, л)
Пространственные операторы

OpenGIS предлагает ряд других функций для создания геометрий. В этих функциях используются пространственные операции.
В MySQL данные функции пока не реализованы, возможно, они появятся в будущих версиях.

  • Buffer {g, d). Возвращает геометрию, представляющую все точки, расстояние ко
    торых от значения геометрии д меньше или равно расстоянию d.
  • ConvexHull (g). Возвращает геометрию, которая представляет собой выпуклую
    оболочку геометрии д.
  • Difference {glf g2). Возвращает геометрию, которая представляет разность мно
    жества точек геометрии gl и д2.
  • Intersection{gl,g2). Возвращает геометрию, которая представляет пересечение множества точек геометрий gl и д2.
  • SymDifference(grl,g2). Возвращает геометрию, которая представляет симметри
    ческую разность множества точек геометрий gl и д2.
  • Union iglfg2). Возвращает геометрию, которая представляет объединение множе­ства точек геометрий gl и д2.
Функции для проверки пространственных отношений между геометрическими объектами

Функции, описанные в этих разделах, принимают две геометрии в качестве входных параметров и возвращают значение качественного или количественного отношения между ними.

Отношение минимальных ограничивающих
прямоугольников

MySQL предлагает некоторые функции, с помощью которых можно проверять отно­шение между минимальными ограничивающими прямоугольниками (Minimum Bounding Rectangle – MBR) двух геометрий gl и д2. Они включают:

  • MBRContains (glt g2). Возвращает значение 1 или 0, указывающее, содержит ли
    минимальный ограничивающий прямоугольник геометрии gl минимальный огра
    ничивающий прямоугольник геометрии д2.

mysql> SET §gl = GeomFromText(‘Polygon((0 0,0 3,3 3,3 0,0 0))1);
mysql> SET @g2 = GeomFromText(‘Point(1 1)’);
mysql> SELECT MBRContains(@gl,@g2), MBRContains(@g2,@gl);

MBRDisjoint [glfg2). Возвращает значение 1 или 0, указывающее, разделены ли (не пересекаются) минимальные ограничивающие прямоугольники (MBR) двух геометрий gl и д2.

  • MBREqual {gl,g2). Возвращает значение 1 или 0, указывающее, являются ли мини
    мальные ограничивающие прямоугольники двух геометрий gl и д2 одинаковыми.
  • MBRIntersects (glfg2). Возвращает значение 1 или 0, указывающее, пересекаются
    ли минимальные ограничивающие прямоугольники двух геометрий gl и д2.
  • MBROverlaps {gl,g2). Возвращает значение 1 или 0, указывающее, перекрывают ли
    друг друга минимальные ограничивающие прямоугольники двух геометрий gl и д2.
  • MBRTouches {glrg2). Возвращает значение 1 или 0, указывающее, соприкасаются
    ли минимальные ограничивающие прямоугольники двух геометрий gl и д2.
  • MBRWithin{glfg2). Возвращает значение 1 или 0, указывающее, находится ли ми
    нимальный ограничивающий прямоугольник геометрии gl внутри минимального
    ограничивающего прямоугольника геометрии д2.

mysql> SET @gl = 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(@gl,@g2), MBRWithin(@g2,@gl);

Функции для проверки пространственных отношений между геометриями

В спецификации OpenGIS определены следующие функции. В настоящее время MySQL не реализует их согласно спецификации. Те из них, которые введены в MySQL, возвращают тот же результат, что и соответствующие функции для MBR. Сюда относятся представленные в следующем ниже списке функции, за исключением Distance () и Related().
Вполне возможно, что эти функции будут введены в последующих версиях, включая полную поддержку для пространственного анализа, а не только поддержку для MBR-функций.
Функции работают с двумя значениями геометрий gl и д2.

  • Contains {gl, g2). Возвращает значение 1 или 0, указывающее, включает в себя геометрия gl геометрию д2 полностью.
  • Crosses [glfg2). Возвращает значение 1, если gl пространственно пересекает д2.<
    Возвращает значение NULL, если gl является Polygon или MultiPolygon, или если
    д2 является Point или Multipoint. В противном случае возвращается значение 0
  • Выражение “пространственно пересекает” обозначает пространственное отношение между двумя данными геометриями, характеризующееся следующими свойствами:

  • Эти две геометрии пересекаются.
  • В результате их пересечения образуется геометрия, значение измерения которой
    на один меньше максимального значения измерения обеих данных геометрий.
  • Их пересечение не равно ни одной из двух данных геометрий.
  • Disjoint{gl,g2). Возвращает значение 1 или 0, указывающее, отделена ли про
    странственно геометрия gl от геометрии д2 (то есть, пересекает ли она ее или нет).
    Distance {gl,д2). Возвращает в виде числа двойной точности значение наимень
    шего расстояния между любыми двумя точками в двух геометриях.
  • Equals {glr g2). Возвращает значение 1 или 0, указывающее, является ли gl про
    странственно равной д2.
  • Intersects {gl,g2). Возвращает значение 1 или 0, указывающее, пересекает ли пространственно геометрия gl геометрию д2
  • Overlaps {gl, g2). Возвращает значение 1 или 0, указывающее, перекрывает ли
    пространственно геометрия gl геометрию д2. Термин “пространственно перекры
    вает” используется, если две геометрии пересекаются и в результате их пересече
    ния образуется геометрия такого же измерения, но не равная ни одной из двух
    данных геометрий.
  • Related(gl,g2,pattern_matrix). Возвращает значение 1 или 0, указывающее,
    существует ли пространственное соотношение, заданное в patternjnatrix, между
    gl и д2. Возвращает значение -1, если аргументы равны NULL. Матрица образцов
    pattern_matrix представляет собой строку. Требования для нее будут определе
    ны после реализации функции.
  • Touches {gl,g2). Возвращает значение 1 или 0, указывающее, соприкасается ли
    пространственно gl с д2. Две геометрии пространственно соприкасаются, если их
    внутренние пространства не пересекаются, но граница одной из геометрий пере
    секает либо границу, либо внутреннее пространство другой геометрии.
  • Within {gl, g2). Возвращает значение 1 или 0, указывающее, находится ли gl про
    странственно в пределах д2.
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: