Быстрый старт
Развертывание
Моделирование данных
Подключение
Запись данных
Миграция
Запросы
Операции и обслуживание
Расширение кластера
Настройка производительности
Устранение неполадок
Справочник
Руководство по инструментам
Типы данных
Хранилище данных
Выполняющая система
Конфигурация
Справочник по SQL
Часто задаваемые вопросы
Документ описывает типы пространственных данных, поддерживаемые YMatrix.
Обычно база данных поддерживает стандартные типы данных, такие как строка, число и дата. Однако пространственные базы данных требуют дополнительных типов данных — пространственных типов данных — для представления географических объектов. Эти пространственные типы данных инкапсулируют пространственные структуры, такие как границы и размерности.
YMatrix использует расширение PostGIS для поддержки пространственных типов данных.
Примечание!
Эта функция доступна только в корпоративной версии.
PostGIS зависит от geos39. Сначала необходимо установить RPM-пакет на каждом узле:
$ sudo yum install https://ftp.postgresql.org/pub/repos/yum/common/redhat/rhel-7-x86_64/geos39-3.9.1-1.rhel7.x86_64.rpm
$ sudo yum install mxdb-postgis-2.5-1.el7.x86_64.rpm
Подключитесь к базе данных и создайте расширение:
=# CREATE EXTENSION postgis;
PostGIS поддерживает следующие основные пространственные типы данных:
Создайте таблицы, содержащие пространственные типы данных:
-- Point table
=# CREATE TABLE global_points (
id INT,
name VARCHAR(64),
location GEOGRAPHY(POINT)
)
USING MARS3
DISTRIBUTED BY (id)
ORDER BY (id);
-- Polygon table
=# CREATE TABLE global_areas (
id INT,
name VARCHAR(64),
area GEOGRAPHY(POLYGON)
)
USING MARS3
DISTRIBUTED BY (id)
ORDER BY (id);
Вставьте данные точки:
=# INSERT INTO global_points VALUES(1, 'point1', 'POINT(-110 29)');
=# INSERT INTO global_points VALUES(2, 'point2', 'POINT(-111 30)');
Вставьте данные многоугольника:
=# INSERT INTO global_areas VALUES(1, 'area1', 'POLYGON((-100 25, -100 30, -120 30, -120 25, -100 25))');
=# INSERT INTO global_areas VALUES(2, 'area2', 'POLYGON((-90 25, -90 30, -100 30, -100 25, -90 25))');
Вычислите расстояние между координатами точек:
=# SELECT name, ST_Distance('POINT(-110 30)'::geography, location) FROM global_points;
name | st_distance
--------+------------------
point1 | 110844.074057415
point2 | 96485.974080553
(2 rows)
Вычислите площадь:
=# SELECT id, name, ST_Area(area) FROM global_areas;
id | name | st_area
----+-------+--------------------
1 | area1 | 1098617743576.8588
2 | area2 | 547807626660.82526
(2 rows)
Проверьте, лежит ли точка внутри многоугольника:
=# SELECT a.name, p.name FROM global_points AS p, global_areas AS a WHERE ST_Intersects(a.area, p.location);
name | name
-------+--------
area1 | point1
area1 | point2
(2 rows)
Вычислите пересечение двух многоугольников:
=# SELECT ST_AsText(ST_Intersection(a1.area, a2.area)) FROM global_areas AS a1, global_areas AS a2 WHERE a1.name = 'area1' AND a2.name = 'area2';
st_astext
---------------------------------------------------------
LINESTRING(-100 24.9999999999992,-100 29.9999999999995)
(1 row)
Пространственные индексы необходимы для эффективного выполнения пространственных запросов. PostGIS поддерживает следующие типы пространственных индексов:
Создайте индекс для столбца location:
=# CREATE INDEX global_points_gix ON global_points USING GIST (location);
Создайте индекс для столбца area:
=# CREATE INDEX global_areas_gix ON global_areas USING GIST (area);