PHP检索PostGIS地理类型

时间:2011-01-31 21:31:22

标签: php postgresql phpmyadmin postgis

我有一个带有地理栏的PostGIS数据库。我希望能够使用PHP来选择地理位置,然后我可以使用ST_Distance运行另一个查询以获得点之间的距离。但是,当我跑

SELECT geog from locations;

我得到一个奇怪的值6而不是HEX输出(类似于0101000020E6100000C442AD69DEAD5740575BB1BFEC6E3D40就是我所期待的)。当我在phpPgAdmin中使用相同的查询时,我得到了预期的输出,但不是来自我的PHP脚本:(

我真的很感激任何帮助:)

谢谢,

elshae

修改

$locations_result = @pg_query($DBConnect, "SELECT geog from locations;");

    if (!$locations_result) {
        echo "An error occurred upon getting data from the locations table.\n";
        exit;
    }
    $i = 0;
    while ($locations_arr = pg_fetch_row($locations_result)) {

        $locations['location'][$i] = $locations_arr[0];

                echo $locations['location'][$i];
        $i++;
    }

EDIT2 所以现在我试图在ST_Distance函数中选择地理位置,以便它可以直接得到地理结果,如:

SELECT ST_Distance(geog_a, geog_b) FROM(SELECT geog AS geog_a FROM location WHERE id=123 UNION SELECT geog AS geog_b FROM location WHERE id=345);

但是我的SQL语法错了,我还没弄明白如何才能得到我想要的结果。 UNION将这些值放在一列中,这就是我已经拥有的。相反,我需要像:

geog_a |geog_b
----------------
hdsklgh|shfksh

1 个答案:

答案 0 :(得分:3)

你想要的是wkb格式吗?

select ST_AsWKB('geog') from locations

但是你为什么要首先提取数据来进行距离计算呢?

/尼克拉斯

<强>更新

确定

我不知道为什么你的查询没有得到正确的结果。我在PHP中太糟糕了。我猜想由于某种原因导致的结果被推入一些不正确的数据类型。我的意思是从ST_AsText你应该得到一个字符串,没有什么比这更奇怪了。

但为了达到你的距离你不应该拿出分数。你做一个自我加入。这就是您在使用PostGIS并在一个表中比较不同几何时所做的一切。

假设第一个地理位置的id = 1,第二个地理位置的id = 2,则查询可能类似于:

SELECT ST_Distance(a.the_geog, b.the_geog) as dist 
from locations a, locations b WHERE a.id=1 and b.id = 2;

如果你想从id = 1的点到所有点(或其他任何点)的距离你可以写:

SELECT  ST_Distance(a.the_geog, b.the_geog) as dist
from locations a inner join locations b on a.id != b.id WHERE a.id=1;

等等。

这将更加有效。

/尼克拉斯