MYSQL геометрия функций многоугольника - PullRequest
1 голос
/ 12 февраля 2020

Я борюсь с MySQL геометрическими функциями. Я действительно хочу нарисовать многоугольник из разных таблиц в моей базе данных. Но я не могу понять это.

Сначала следующий код возвращает «многоугольник (-10 -5, -10 5,10,5, -10 -5)», который для меня выглядит как функция замкнутого многоугольника с четырьмя точками.

    set @n_Yval = -5;
    set @p_Yval = +5;
    set @n_Xval = -10;
    set @p_Xval = +10;

    SET @text = (concat('polygon (', @n_Xval, ' ', @n_Yval, ', ', @n_Xval, ' ', @p_Yval, ', ', @p_Xval, ' ', @p_Yval, ',', @n_Xval, ' ', @n_Yval, ')')); 

    select @text;

Однако следующее возвращает «Код ошибки 3037 Недопустимые данные ГИС для функции st_geometryfrom text»

    set @n_Yval = -5;
    set @p_Yval = +5;
    set @n_Xval = -10;
    set @p_Xval = +10;

    SET @text = (concat('polygon (', @n_Xval, ' ', @n_Yval, ', ', @n_Xval, ' ', @p_Yval, ', ', @p_Xval, ' ', @p_Yval, ',', @n_Xval, ' ', @n_Yval, ')')); 

    set @poly = polygonfromtext(@text);

Я использую MySQL 5.7, и было указано, что возможно быть ошибки с геометрическими функциями, когда я пытался рисовать линии, используя точки в предыдущем посте. https://bugs.mysql.com/bug.php?id=80697. Если так, кто-нибудь знает обходной путь?

1 Ответ

1 голос
/ 12 февраля 2020

Вы пропустили скобки при определении строки POLYGON. И избегайте использования TEXT, которое является зарезервированным словом. Также POLYGONFROMTEXT устарела, лучше использовать ST_POLYGONFROMTEXT, поэтому:

SET @n_Yval = -5; 
SET @p_Yval = +5; 
SET @n_Xval = -10; 
SET @p_Xval = +10; 

SET @txt = CONCAT('POLYGON((', @n_Xval, ' ', @n_Yval, ', ', @n_Xval, ' ', @p_Yval, ', ', @p_Xval, ' ', @p_Yval, ', ', @n_Xval, ' ', @n_Yval, '))');

SELECT @txt; 

SET @poly = ST_POLYGONFROMTEXT(@txt);

SELECT @poly;

Выходы:

+----------------------------------------+
| @txt                                   |
+----------------------------------------+
| POLYGON((-10 -5, -10 5, 10 5, -10 -5)) |
+----------------------------------------+
1 row in set (0.00 sec)
+-----------------------------------------------------------------------------------+
| @poly                                                                             |
+-----------------------------------------------------------------------------------+
| 0x000000000103000000010000000400000000000000000024C000000000000014C000000000000024C000000000000014400000000000002440000000000000144000000000000024C000000000000014C0 |
+-----------------------------------------------------------------------------------+
1 row in set (0.00 sec)

...