1

我在使用 PostGIS (1.5.4) 数据时遇到问题。可能是我对这项技术不够熟悉,无法看到明显的情况(我是一名拥有近 4 小时经验的普通专家),但我遇到了一个我无法通过 Google 解决的错误。

我有一个包含多边形数据的表(是的,我检查过;列类型是几何,而不是多边形——Postgres 本机类型)。当我尝试对表运行查询以查找哪个形状包含特定问题时,就会出现问题。

我正在使用以下查询:

SELECT * 
FROM geo_shape 
WHERE ST_Contains(geoshp_polygon, POINT(-97.4388046000, 38.1112251000));

我收到的错误是“错误:函数 st_contains(geometry, point) 不存在”。我尝试使用 CAST() 函数,但得到“错误:无法将类型几何转换为多边形”。我猜这个问题与数据的存储方式有关——PGAdmin 将其显示为十六进制数据。我凭直觉尝试使用ST_GeomFromHEXEWKB(),但收到“错误:函数 st_geomfromhexewkb(geometry) 不存在”。

我对这里的问题感到相当困惑,所以任何想法都将不胜感激。

4

2 回答 2

2

您不能将 PostgreSQL 的几何数据类型与 PostGIS 的几何类型混合,这就是您看到该错误的原因。我建议使用PostGIS 的几何构造函数之一来提供帮助:

SELECT * 
FROM geo_shape 
WHERE ST_Contains(geoshp_polygon,
                  ST_SetSRID(ST_MakePoint(-97.4388046000, 38.1112251000),4326);

或者一种非常快速的文本方式是将众所周知的文本拼凑起来:

SELECT 'SRID=4326;POINT(-97.4388046000 38.1112251000)'::geometry AS geom;

(这将输出几何类型的 WKB)。

于 2012-07-04T03:44:30.710 回答
2

st_contains 需要一个 geom,geom 作为参数...

试试这个...

SELECT * FROM geo_shape 
WHERE ST_Contains(geoshp_polygon,
      GeomFromText('POINT(-97.4388046000 38.1112251000)'));

编辑更正,发布点数据。ST_geomfromtext 会起作用,有点好奇有什么区别

于 2012-07-03T21:49:54.267 回答