【问题标题】:MYSQL geometry functions polygonMYSQL 几何函数多边形
【发布时间】:2020-02-12 10:00:11
【问题描述】:

我正在为 MySQL 几何函数而苦苦挣扎。我真的很想从我的数据库中的各种不同的表中绘制一个多边形。但我似乎无法弄清楚。

首先,以下代码返回“polygon(-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 提供的 GIS 数据无效”

    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。如果是这样,有人知道解决方法吗?

【问题讨论】:

    标签: mysql mysql-workbench


    【解决方案1】:

    您在定义 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)
    
    

    【讨论】:

    • 欢迎您@Thring。如果这对您有用,请标记答案以关闭主题。
    • 当然,我只是想出了如何做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    相关资源
    最近更新 更多