2012-07-05 88 views
0

我正在將一個xml文件加載到我的postgresql/postgis數據庫中,以下字段包含需要轉換爲多邊形的區域lat長度的線。有沒有一種方法可以使用ST_MPolyFromText來使這個工作的樣本具有長和反的順序,而不是將其加載到數據庫的方式?指向多邊形轉換

39.43,-80.29 39.46,-80.49 39.43,-80.52 39.46,-80.66 39.98,-80.76 40.07,-80.43 39.46,-79.91 39.39,-80.10 39.40,-80.11 39.39,-80.18 39.43,-80.29

回答

0

您可以很容易地將其格式化爲WKT。首先,將逗號轉換爲空格,將空格轉換爲逗號,然後將座標從lat,long到long,lat(x,y)翻轉。這裏是一個PostGIS的功能:

CREATE FUNCTION polygon_from_funny_format(latlon text) RETURNS geometry AS 
$BODY$SELECT 
    ST_FlipCoordinates(('SRID=4326;POLYGON((' || 
         translate($1, ', ', ' ,') || '))')::geometry); 
$BODY$ LANGUAGE sql IMMUTABLE STRICT; 

現在你可以這樣做:

SELECT polygon_from_funny_format('39.43,-80.29 39.46,-80.49 39.43,-80.52 39.46,-80.66 39.98,-80.76 40.07,-80.43 39.46,-79.91 39.39,-80.10 39.40,-80.11 39.39,-80.18 39.43,-80.29'); 
+0

所以如果polygon_from_funny_format存儲在xfoo列,我執行這些查詢的一切我都在做的是,而不是選擇INSERT INTO the_geom ? – Chris

+0

這是值得一試的..這個函數返回一個幾何,所以它應該進入the_geom。它可能只會抱怨,如果有什麼奇怪的輸入,如線性環沒有關閉(開始/結束是相同的) –

+0

基本上我想轉換這個http://alerts.weather.gov/cap /us.php?x=0進入postgis,如果有線,你有什麼想法如何去做? – Chris