Postgis:错误:解析错误 - 无效的几何

时间:2014-09-16 05:09:43

标签: 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
尝试sql时

 SELECT addressid FROM maddress 
  WHERE ST_DWithin(geocode, 'POINT(20.0924758 72.7341809 19.137381,72.837223)' , 100.0);

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

我检查了语法,根据语法,我已将值放入查询中。请让我知道更正。

3 个答案:

答案 0 :(得分:3)

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

select ST_GeomFromText('POINT(-27.75 ,114.75)', 3857)

而不是:

select ST_GeomFromText('POINT(-27.75 114.75)', 3857)

您需要删除逗号分隔符。

答案 1 :(得分:2)

如果你试图找到两点之间的点,你可能需要使用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);

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

而不是上面的ST_MakePoint,您也可以使用ST_GeomFromText,其形式为&#39; POINT(x y)&#39;因为您最初有一个可选的允许您指定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);

编辑根据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);

然后,您需要在上面的查询中使用geom而不是geocode。我假设你的积分在4326。

答案 2 :(得分:0)

如果使用Leaflet,请转到“迁移”并更改字段类型:

  • django.contrib.gis.db.models.fields.MultiPointField

收件人

  • 从djgeojson.fields导入MultiPointField