我在使用PostGIS(1.5.4)数据时遇到了问题。可能我对这项技术不够熟悉,看不出这个显而易见的(我是一名有近4小时经验的常规专家),但我遇到了一个我无法用谷歌解决的错误。
我有一个包含Polygon数据的表(是的,我检查过;列类型是几何,而不是多边形 - Postgres本机类型)。当我尝试在表上运行查询以查找哪个形状包含特定问题时,会出现问题。
我使用以下查询:
SELECT *
FROM geo_shape
WHERE ST_Contains(geoshp_polygon, POINT(-97.4388046000, 38.1112251000));
我收到的错误是'错误:函数st_contains(几何,点)不存在'。我尝试使用CAST()函数,但得到了'错误:无法将类型几何转换为多边形'。我猜这个问题与数据的存储方式有关--PGAdmin将其显示为十六进制数据。我试图在预感中使用ST_GeomFromHEXEWKB()
但是收到'错误:函数st_geomfromhexewkb(几何)不存在'。
我对这里的问题感到很困惑,所以任何想法都会受到高度赞赏。
答案 0 :(得分:2)
st_contains需要geom,geom作为参数......
试一试......
SELECT * FROM geo_shape
WHERE ST_Contains(geoshp_polygon,
GeomFromText('POINT(-97.4388046000 38.1112251000)'));
编辑纠正,在点数据中发出。 ST_geomfromtext会起作用,有点好奇有什么区别
答案 1 :(得分:2)
你不能将PostgreSQL的geometric data types与PostGIS的几何类型混合在一起,这就是你看到错误的原因。我建议使用PostGIS's geometry contstructors中的一个来帮忙:
SELECT *
FROM geo_shape
WHERE ST_Contains(geoshp_polygon,
ST_SetSRID(ST_MakePoint(-97.4388046000, 38.1112251000),4326);
或者一种非常快速的文字方式是拼凑well-known text:
SELECT 'SRID=4326;POINT(-97.4388046000 38.1112251000)'::geometry AS geom;
(这将输出几何类型的WKB)。