2010-09-24 32 views
0

我写了下面的代码(花几个小时试图获得引用正确后):的PostgreSQL + PostGIS的功能,让角分离 - 为一对(纬度,经度)指出

CREATE FUNCTION ast3angsep(double precision, double precision, double precision, double precision) RETURNS double precision AS $$ 
SELECT ST_Distance(ST_GeographyFromText('SRID=4326;POINT('||$1||' '||$2||')'), ST_GeographyFromText('SRID=4326;POINT('||$3||' '||$4||')'))/6370986.0/PI()*180.0; 
$$ 
LANGUAGE SQL 
IMMUTABLE 
RETURNS NULL ON NULL INPUT; 

这函数的作品,但不幸的是,它的精度是可怕的。似乎应该有一个更简单的方法来做到这一点。我只是想将值传递给函数,并将它们传递给ST函数。我完全无法找到一种方法来做到这一点,而不先将它们转换为字符串,这可能是精度损失进入的地方。

我这样做完全搞砸了吗?

回答

1

而不是转换为字符串并使用ST_GeographyFromText创建一个点,请尝试直接使用ST_MakePoint与功能收到的值。