[英]Insert data to a spatial database in postgis
我創建了一個包含 3 個字段的表:id(integer)、name(char) 和 surface(polygon)。 當我嘗試通過執行在此表中插入新行時:
INSERT INTO public."Area" ("ID", "Name", "Surface") VALUES(0, 'myArea', POLYGON((0 0, 1 0, 1 1, 0 1, 0 0)));
我收到此錯誤:
SQL 錯誤 [42601]:錯誤:“0”位置或附近的語法錯誤:84
我在 postgis 等文檔中進行了搜索,但沒有找到如何定義該字段(點和線串相同)。
我也嘗試過這樣的事情:
INSERT INTO public."Area" ("ID", "Name", "Surface") VALUES(1, 'myArea', ST_GeomFromText('POLYGON((8 4, 10.5 4, 10.5 1.5, 8 1.5, 8 4)) '));
但結果是:
SQL 錯誤 [42804]:錯誤:列“表面”的類型為多邊形,但表達式的類型為幾何 提示:您需要重寫或轉換表達式。 職位:76
你能幫我找出我的錯誤嗎?
非常感謝您的寶貴時間!
嘗試ST_PolygonFromText而不是 ST_GeomFromText。
或者將該列聲明為通用 GEOMETRY,而不是 POLYGON 類型。
錯誤消息告訴該列是類型polygon
,它是本機 postgres 類型。 使用這種類型可以做的事情非常有限,如果您正在處理空間數據,請使用 Postgis 及其geometry
類型。
要使用投影4326
創建包含多邊形類型的幾何圖形的列,您可以
CREATE TABLE test (my_poly geometry(polygon,4326));
然后,您可以使用ST_GeomFromText
加載數據。
由於您的列是geometry
類型,因此會自動從text
轉換為geometry
,或者您可以強制它。 與您的第一個查詢不同,請注意多邊形定義必須用引號括起來。
insert into test values ('polygon((0 0, 0 1, 1 1, 1 0, 0 0))'::geometry)
最后,在技術上可以創建 Postgis geometry
並將其轉換為 Postgres 原生polygon
類型( SELECT ST_GeomFromText('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))')::polygon;
),但是這樣做帶來的好處很少,因為您仍然無法訪問大多數 Postgis 功能(計算距離、重新投影、計算交叉點等)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.