Postgis:错误:解析错误 - 几何图形无效

use*_*056 5 postgresql postgis

我正在使用 POSTGIS="2.0.1 r9979" 并面临以下错误:

ERROR:  parse error - invalid geometry
HINT:  "POINT(18.570275,7" <-- parse error at position 17 within geometry
CONTEXT:  SQL function "st_dwithin" during inlining
Run Code Online (Sandbox Code Playgroud)

尝试 sql 时:

 SELECT addressid FROM maddress 
  WHERE ST_DWithin(geocode, 'POINT(20.0924758 72.7341809 19.137381,72.837223)' , 100.0);
Run Code Online (Sandbox Code Playgroud)

我希望选择查询中提到的点之间的地址。

我检查了语法,并按照语法在查询中输入了值。请让我知道更正。

小智 6

我在使用时遇到了同样的错误:

select ST_GeomFromText('POINT(-27.75 ,114.75)', 3857)
Run Code Online (Sandbox Code Playgroud)

代替:

select ST_GeomFromText('POINT(-27.75 114.75)', 3857)
Run Code Online (Sandbox Code Playgroud)

您需要删除逗号分隔符。


Joh*_*ell 4

如果您试图找到两点之间的点,您可能需要使用 ST_DWithin 两次,以便获得位于基于点 1 的圆和基于点 2 的圆的交集中的点,例如,

SELECT addressid FROM maddress 
WHERE ST_DWithin(geocode, ST_MakePoint(20.0924758, 72.7341809), 100.0)
AND ST_DWithin(geocode, ST_MakePoint(19.137381, 72.837223), 100.0);
Run Code Online (Sandbox Code Playgroud)

请注意,单位采用 SRID 单位,在您的情况下似乎是 4326,因此您可能需要将坐标转换为米,使用地理数据类型,因此距离将以米为单位,或将距离转换为度 - - 有多种选择。我确信您已经看过解释这些选项的ST_DWithin 文档。您可能还想考虑use_spheroid参数。

除了ST_MakePoint上述之外,您还可以使用ST_GeomFromText“POINT(xy)”形式,因为您最初可以选择允许您指定 SRID,例如,使用 4326,您还可以将查询编写为:

SELECT addressid FROM maddress 
WHERE ST_DWithin(geocode, ST_GeomFromText('POINT(20.0924758 72.7341809)',4326), 100.0)
AND ST_DWithin(geocode, ST_GeomFromText('POINT(19.137381 72.837223)', 4326), 100.0);
Run Code Online (Sandbox Code Playgroud)

编辑根据OP的评论,事实证明地理编码不是几何列。您可以通过运行来修复此问题。

ALTER TABLE maddress ADD COLUMN geom GEOMETRY  (POINT, 4326);
UPDATE maddress set geom=ST_MakePoint(lng,lat);
CREATE INDEX ix_spatial_geom on maddress using gist(geom);
Run Code Online (Sandbox Code Playgroud)

然后,您将需要在上面的查询中使用 geom 而不是地理编码。我假设你的分数是 4326。