2015-06-03 73 views
1

我有一個MySQL表,我們用於存儲一些經度和緯度。座標定義爲'geometry'類型的列,並且可以包含任意數量的座標對。MySQL和分裂空間數據

當我運行這段代碼,我得到的幾何類型的一些文本的轉換我應該能夠分析出:

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 ...即使我不知道有多少對存在,我有兩個分隔符......座標和逗號之間的空格。

+0

回答:使用應用程序級語言,而不是mysql。 –

回答

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";