这是问题,
我最近安装了带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
这两项测试不起作用。它们返回错误42P01。
当我试着在我的桌子上测试另一个功能" 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的新手...问题可能来自于此......
感谢您阅读/帮助
答案 0 :(得分:3)
[提示 - 发布你的create table语句,这样我们就可以看到列类型实际上是什么了。)
我认为您的问题是因为您使用的是geography
数据类型,而不是geometry
;并非所有函数都适用于地理类型(无论是根本还是具有相同的参数)。 Here's对原因的解释 - 简而言之,根据文章。
如果你做了很多测量,例如必须比较的大小 大的多边形,使用地理而不是地理是有意义的 几何形状。
要找出哪些函数需要哪些参数,请查看postgis documentation。它会告诉你,例如
浮动ST_Area(几何g1);
fl oat ST_Area(geography geog,boolean use_spheroid = true);
所以你可以看到有两个版本的st_area。一个接受几何作为参数,另一个接受地理,但你还必须添加另一个参数。
如果" polygon"是地理类型,你需要
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参数是错误的(但我可能错了)。