1

我有一个 MySQL 表,我们用它来存储一些纬度和经度。坐标定义为 ' geometry' 类型的列,可以包含任意数量的坐标对。

当我运行此代码时,我将几何类型转换为一些我应该能够解析的文本:

SELECT ST_AsText(ST_ExteriorRing(c.coordinate))
        from `app_coordinate` c, app_type_coordinate tc 
        where c.idtypecoord = tc.idtypecoord 
            and tc.description="safezone";

结果我得到以下结果:

LINESTRING(-17.386557 -66.150796,-17.388676 -66.150335,-17.388727 -66.14952,-17.385963 -66.147642,-17.386557 -66.150796)
LINESTRING(-17.388043 -66.157421,-17.387351 -66.154347,-17.391524 -66.153496,-17.3921 -66.156664,-17.388043 -66.157421)
LINESTRING(-17.389281 -66.1413,-17.387155 -66.141837,-17.386763 -66.142888,-17.389566 -66.142929,-17.389281 -66.1413)
LINESTRING(-17.389914 -66.143621,-17.390695 -66.143275,-17.390262 -66.1409,-17.389487 -66.141172,-17.389914 -66.143621)

每个 LineString 行都有一组坐标对,我需要对其进行拆分。所以第一对是#1,第二对是#2,等等。事情是,我可以有任意数量的对。

我需要做的是能够将每个线串分成对并存储到一个变量中,例如pair1_x,pair1_y,pair2_x,pair2_y,pair3_x ...即使我不知道存在多少对并且我有两个分隔符...坐标之间的空格和对之间的逗号。

4

1 回答 1

0

这是我作为解决方案所做的:用几个Replace()语句修改原始语句以从每行中删除一些文本,使用group_concat()语句将多行连接成一行,并在concat()语句中添加开始和结尾括号(用于格式化) .

SET group_concat_max_len = 2048;

SELECT CONCAT('[', REPLACE(REPLACE(Group_concat(DISTINCT(ST_AsText(ST_ExteriorRing(c.coordinate))), ''), "LINESTRING(", ""), ")", ""), ']') as punto
    from `app_coordinate` c, app_type_coordinate tc 
    where c.idtypecoord = tc.idtypecoord 
        and tc.description="safezone";
于 2015-06-05T03:56:28.880 回答