簡體   English   中英

在PostgreSQL上對地理類型使用函數的問題-PostGIS(擴展名)

[英]Problems using functions on geography types with PostgreSQL - PostGIS (extension)

這是問題所在

我最近安裝了帶有postGIS擴展(帶有功能)的postgresql,並使用一些地理數據構建了一個小型數據庫模型。

我實際上是想在其中插入一些地理數據,並在其上使用功能...例如點/多邊形/ ...

問題是,當我嘗試使用諸如ST_Area,ST_Perimeter等postGis函數時,... PostgreSQL總是返回錯誤。 如果我是正確的話,大多數都是42P01,意思是“未知表”。 但是表存在...

這是我的實際測試數據庫的屏幕截圖:

http://s30.postimg.org/prnyyw7gh/image.png

您可以在屏幕截圖上看到postGIS擴展在我當前的模型上處於活動狀態(此模型的1050功能可用)

我這樣插入數據:

INSERT INTO "Base".points (point,lat,lng) VALUES ("Base".ST_GeographyFromText('POINT(45.5555 32.2222)'),'45.5555','32.2222');
and
INSERT INTO "Base".polygons (polygon) VALUES ("Base".ST_GeographyFromText('POLYGON((x y,x1 y1,x2 y2,x y))'));

對於表格點,我有一個序列字段(id),一個地理字段(點)和2個文本字段(lat,lng)。 對於表格多邊形,我有一個序列字段(id)和一個地理字段(多邊形)。

這是我正在嘗試進行的兩個查詢:

SELECT "Base".ST_Area(polygon) FROM "Base".polygons WHERE id=1
or
SELECT "Base".ST_Perimeter(polygon) FROM "Base".polygons WHERE id=1

這2個測試無效。 他們返回錯誤42P01。

當tryin在我的表“ points”上測試另一個函數時,這也失敗了,但返回了一條奇怪的消息。 我正在嘗試的是這樣的:

SELECT "Base".ST_Distance((SELECT point FROM "Base".points WHERE id=1),(SELECT point FROM "Base".points WHERE id=2))

此函數存在,但返回錯誤消息SQL狀態:42883,消息為:

ERROR : function _st_distance("Base".geography, "Base".geography, numeric, boolean) does not exist

我不發送任何數字或布爾值...我無法解釋這些錯誤的來源...

我不得不說我是Postgresql的新手...問題可能來自此...

感謝您的閱讀/幫助

[提示-發布您的create table語句,以便我們可以看到實際的列類型]。

我認為您的問題是因為您使用的是geography數據類型而不是geometry 並非所有功能都可以(完全或使用相同的參數)針對地理類型。 根據文章, 是為什么的解釋。

如果您進行了大量測量,例如必須比較大多邊形的大小,那么使用地理而不是幾何是有意義的。

要找出哪個函數需要什么參數,請查看postgis文檔 它會告訴你例如

燕麥ST_Area(幾何g1);

燕麥ST_Area(地理geog,布爾use_spheroid = true);

因此,您可以看到st_area有兩個版本。 一個接受幾何作為參數,另一個接受地理,但是您還必須添加另一個參數。

如果“多邊形”屬於地理類型,則需要

SELECT "Base".ST_Area(polygon, TRUE) FROM "Base".polygons WHERE id=1
-- true will measure around the geography spheroid and is more accurate
-- than false - read the documentation for what you need!

st_perimeter相似。

關於您在st_distance上的錯誤,您是否在錯誤消息中的“ st_distance”之前看到下划線? 我懷疑您遇到了問題,因為您已在架構中創建了postgis擴展。 在PGAdmin中,查找功能“ ST_distance”。 您會看到它依次調用了函數“ _st_distance”-找不到它,因為在您的情況下,該函數位於其他模式中。 嘗試只是這樣做:

CREATE EXTENSION postgis

我認為這將為您節省很多痛苦。

最后,我認為您在st_geographyfromtext中的lat和lon參數以錯誤的方式處理(但我可能是錯的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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