[postgis-users] geometryfromtext problem
Carl Anderson
carl.anderson at vadose.org
Sat Apr 10 08:03:45 PDT 2004
On 04/10/2004 10:42:17 AM, Joel Gwynn wrote:
> I'm having trouble doing something I've done before. I've got a
> geometry column, but for some reason I can't populate it. I have a
> lat field and a long field (both floats) that i'm trying to use to
> populate the_geom like so:
>
> update locations set the_geom=GeometryFromText('POINT (' || cast(long
> as varchar(10)) || ' ' || cast(lat as varchar(10)) || ')', -1);
>
> which yields:
>
> ERROR: Function 'geometryfromtext(varchar, int4)' does not exist
> Unable to identify a function that satisfies the given
> argument types
> You may need to add explicit typecasts
>
update locations set the_geom=GeometryFromText(('POINT (' || cast(long
as varchar(10)) || ' ' || cast(lat as varchar(10)) || ')')::geometry,
-1);
Pg will not always do an imlicit cast when you are || thing together
and a explicit cast is necessary.
looking at the definition of (using \df geometryfromtext
you'll see
GEOMETRYFROMTEXT (geometry, integer)
so PostGIS is relying on the implicit cast from text -> to geometry
CREATE CAST ( text AS geometry) WITH FUNCTION geometry(text) AS
IMPLICIT;
your complex statement just confused the type casting mechinism in
Postgres.
alternative forms of you statement
update locations set the_geom=GeometryFromText(gometry('POINT (' ||
cast(long
as varchar(10)) || ' ' || cast(lat as varchar(10)) || ')'),
-1);
update locations set the_geom=GeometryFromText(cast(('POINT (' || cast
(long as varchar(10)) || ' ' || cast(lat as varchar(10)) || ')') as
geometry), -1);
note that i am grouping the || strings with ( ) so that Postgres does
not cast only the first or last member or the list
'POINT('||lat_str||' '||long_str||')'::geometry is not the same as
('POINT('||lat_str||' '||long_str||')')::gemetry
C.
Carl Anderson
More information about the postgis-users
mailing list