【发布时间】:2015-02-26 07:55:30
【问题描述】:
问题来了,
我最近安装了带有 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)、一个地理字段 (point) 和 2 个文本字段 (lat, lng)。 对于 Polygons 表,我有一个序列字段 (id) 和一个地理字段 (polygon)。
这是我正在尝试进行的两个查询:
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。
当尝试在我的表“points”上测试另一个函数时,这也失败了,但返回了一条奇怪的消息。我正在尝试的是这个:
SELECT "Base".ST_Distance((SELECT point FROM "Base".points WHERE id=1),(SELECT point FROM "Base".points WHERE id=2))
此函数存在,但返回错误消息 SQL state: 42883 with message :
ERROR : function _st_distance("Base".geography, "Base".geography, numeric, boolean) does not exist
我不发送任何数字或布尔值...我无法解释这些错误来自哪里...
我不得不说我是postgresql的新手......问题可能来自这个......
感谢阅读/帮助
【问题讨论】:
-
一些观察。您实际上并不需要存储几何图形和经纬度字段,因为您可以使用 ST_X、ST_Y 函数获取纬度/经度,因此它是冗余存储。您通常不需要像这样将架构名称放在 Postgis 函数的前面——我可以从您的屏幕截图中看到它们安装在“基本”架构中,但如果您的 search_path 设置正确,这也是冗余并使查询更难阅读。表名也是如此,除非您在同一个数据库、不同架构中有多个多边形/点表。
标签: sql postgresql function geolocation postgis