【问题标题】:How to format a Javascript object as a polygon in Mysql如何在 Mysql 中将 Javascript 对象格式化为多边形
【发布时间】:2020-04-14 22:41:27
【问题描述】:

我想将 Javascript 对象作为多边形存储在 Mysql 数据库中。 我可以定义 x 和 y 的起点和终点,给我四个角:

var polygon = [
    xstart +' '+ ystart,
    xend +' '+ ystart,
    xend +' '+ yend,
    xstart +' '+ yend,
    xstart +' '+ ystart
];

我可以将此对象格式化为字符串

polygon = "ST_GeomFromText('POLYGON(("+ polygon.toString() +"))'";

当我将它插入 Mysql 数据库时

INSERT INTO `caption` (`caption_id`, `caption_area`) VALUES (NULL, '\'POLYGON((0.28 0.33,0.35 0.33,0.35 0.45,0.28 0.45,0.28 0.33))\'')

查询失败

#1416 - Cannot get geometry object from data you send to the GEOMETRY field

如何格式化 Javascript 对象或查询,以将多边形正确插入数据库?

【问题讨论】:

    标签: javascript mysql polygon


    【解决方案1】:

    在mysql中你必须使用ST_GeomFromText

    polygon = "ST_GeomFromText('POLYGON("+ polygon.toString() +")')";
    

    我不确定你最后需要的数字 0 是什么。

    【讨论】:

    • 查询仍然失败。我更新了我的问题以包含您的建议。谢谢。
    • 因为我们有一个字符串而不是一个代码,所以请显示您构建查询时它必须看起来像 INSERT INTO caption (caption_id, caption_area) VALUES (NULL , ST_GeomFromText('POLYGON((0.28 0.33,0.35 0.33,0.35 0.45,0.28 0.45,0.28 0.33')))
    • 你是对的。查询仍然失败,因为我使用的是准备好的语句。
    【解决方案2】:

    POLYGON 是一种来自 MySQL 空间扩展的空间数据类型,在 Open Geospatial Consortium OpenGIS 中定义。 您可以在 MySQL 中为您的四个多边形定义空间数据类型。以下是使用 LINESTRING 的示例:

        LINESTRING(0.28540775806607094 0.3356063323928521, 0.35407728596306665      0.3356063323928521, 0.35407728596306665 0.45764498813705906, 0.28540775806607094 0.45764498813705906, 0.28540775806607094 0.3356063323928521)
    

    因此,它将 caption_area 存储为 TEXT 使用:

        SET @g = 'LINESTRING(0.28540775806607094 0.3356063323928521, 0.35407728596306665 0.3356063323928521, 0.35407728596306665 0.45764498813705906, 0.28540775806607094 0.45764498813705906, 0.28540775806607094 0.3356063323928521)';
    
        INTO `caption` (`caption_id`, `caption_area`) VALUES (NULL,ST_AsText(ST_GeomFromText(@g)));
    

    另外,还有一个 POLYGON 的例子:

        SET @g = 'POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))';
        INTO `caption` (`caption_id`, `caption_area`)
        VALUES  (NULL,ST_AsText(ST_GeomFromText(@g)));
    

    【讨论】:

    • 我想存储一个多边形而不是一个线串。
    猜你喜欢
    • 2021-08-17
    • 1970-01-01
    • 2018-10-26
    • 2017-07-29
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    相关资源
    最近更新 更多