簡體   English   中英

在 postgis 中將數據插入空間數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM