PostGIS转换问题

时间:2012-07-03 21:33:00

标签: postgresql postgis

我在使用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(几何)不存在'。

我对这里的问题感到很困惑,所以任何想法都会受到高度赞赏。

2 个答案:

答案 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)。