PostGIS功能集成在php示例中?

时间:2012-12-01 03:51:24

标签: php function postgresql geocoding postgis

我正在编写一个带有PostGIS功能的postgreSQL数据库的客户端。这个客户端当然通过php进行通信。但是我正在寻找一个适当的postGIS函数的文档,我可以从我的php文件中调用它。

如果能得到一个关于如何在php中集成postGIS功能的简单示例,我将非常感激。

干杯:)

2 个答案:

答案 0 :(得分:5)

Postgis是postgresql数据库中某些模式可用的存储过程。 如果您有PDO,您可以编写调用然后非常接近对象的过程。 有关可用的提取模式,请参阅PHP PDO。

<?php
require_once 'constants.php';
class Postgis extends PDO
{
  public function __construct()
  {
    $this->pg = new PDO( PDO_DB_DSN );
    $this->pg->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
  }
  public function makePoint( $x, $y )
  {
    $preparedStatement = $this->pg->prepare( 'SELECT public.st_makepoint( ?, ? )' );
    $preparedStatement->execute( array( $x, $y ) );
    return $preparedStatement->fetchColumn();
  }
}

try
{
  $postgis = new Postgis();
  $point = $postgis->makePoint( 34, 44 ); //point holds the binary string of a point without srid
  var_dump( $point );
}
catch ( PDOException $e )
{
  // any errors here
  var_dump( $e->getMessage() );
}
?>

答案 1 :(得分:1)

PostGIS在其网站上列出了所有类型和功能,例如Version 1.5 reference documentation。您可以将这些函数称为SQL,就像从PHP调用任何其他SQL一样。

因此,使用PHP的内置PostgreSQL函数,您可以执行以下操作:

$result = pg_query_params('
    SELECT ST_Distance( location, ST_SetSRID(ST_Point($1, $2), 27700) )
    FROM table WHERE id=$3', array(400000, 300000, 123) );

获取英国网格参考系统中距离(400,000,300,000)到数据库表格第123行位置列的距离。

可能有围绕PostGIS功能的PHP包装器,但我担心我不知道任何