yii2-postgis
yii2-postgis copied to clipboard
Yii2 Postgis Extension
Yii2 Postgis
Extension for working with Postgis. As intermediate format used Geo Json.
Installing
The preferred way to install this extension is through Composer.
{
"require": {
"nanson/yii2-postgis": "*"
}
}
GeometryBehavior
Converts coordinates array to SQL expression for saving in postgis binary format before insert/update and from postgis binary to array after find.
<?php
use yii\db\ActiveRecord;
use nanson\postgis\behaviors\GeometryBehavior;
class MyModel extends ActiveRecord
{
// ...
public function behaviors()
{
return [
[
'class' => GeometryBehavior::className(),
'type' => GeometryBehavior::GEOMETRY_POINT,
'attribute' => 'point',
// explicitly set custom db connection if you do not want to use
// static::getDb() or Yii::$app->getDb() connections
'db' => 'db_custom'
],
[
'class' => GeometryBehavior::className(),
'type' => GeometryBehavior::GEOMETRY_LINESTRING,
'attribute' => 'line',
// skip attribute if it was not selected as Geo Json (by PostgisQueryTrait), because it requires a separate query.
'skipAfterFindPostgis' => true,
],
];
}
// ...
}
// ...
$model = new MyModel;
$model->point = [39.234, 54.456];
$model->line = [[102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]];
$model->save();
?>
Option | Type | Default | Description |
---|---|---|---|
attribute | string | attribute that will be automatically handled | |
type | string | geometry type: Point , LineString , Polygon , MultiPoint , MultiLineString , MultiPolygon |
|
skipAfterFindPostgis | boolean | false | skip convertion after find, if data in postgis binary (it requires a separate query, look PostgisQueryTrait ) |
StBufferBehavior
Generate SQL expression before insert/update based on geometry and radius
<?php
use yii\db\ActiveRecord;
use nanson\postgis\behaviors\GeometryBehavior;
use nanson\postgis\behaviors\StBufferBehavior;
class MyModel extends ActiveRecord
{
// ...
public function behaviors()
{
return [
[
'class' => GeometryBehavior::className(),
'attribute' => 'point',
'type' => GeometryBehavior::GEOMETRY_POINT,
],
[
'class' => StBufferBehavior::className(),
'attribute' => 'buffer',
'attributeGeometry' => 'point',
'attributeRadius' => 'radius',
],
];
}
// ...
}
// ...
$model = new MyModel;
$model->point = [39.234, 54.456];
$model->radius = 5;
// It will be save St_Buffer for `$model->point` with `$model->radius` in `$model->buffer`
$model->save();
?>
Option | Type | Default | Description |
---|---|---|---|
attribute | string | attribute for saving buffer | |
attributeGeometry | string | attribute with geometry | |
attributeRadius | string | attribute with radius | |
geography | boolean | false | build buffer as geography |
radiusUnit | string | deg for geomtery or m for geography |
units of buffer radius: deg , m , km |
options | array | [] | additional options for St_Buffer function |
PostgisQueryTrait
Extends ActiveQuery for working with Postgis data.
<?php
class MyQuery extends \yii\db\ActiveQuery
{
use \nanson\postgis\db\PostgisQueryTrait;
// ...
}
// ...
class MyModel extends \yii\db\ActiveRecord
{
public static function find(){
return \Yii::createObject([
'class' => MyQuery::className(),
], [get_called_class()]);
}
}
?>
Option | Type | Default | Description |
---|---|---|---|
autoGeoJson | boolean | true | select all geo columns as GeoJson automatically |
geoFields | array | all table columns with data type geometry or geography |
table columns, that must be selected as Geo Json |
exceptGeoFields | boolean | false | exclude all geo columns from select statement |
exceptFields | array | [] | columns, which must be excluded from select statement |
Method | Description |
---|---|
withGeoFields($fields=null) | Add columns, that must be selected as Geo Json. Accepts null , string , array . If fields is null - all geoFileds will be added. |
excludeFields($fields=null) | Exclude columns from select statement. Accepts null , string , array . If fields is null - all exceptFields will be excluded from select statement. |
GeoJsonHelper
Helper for working with Geo Json
Method | Returns | Description |
---|---|---|
toArray($geoJson) | array | returns coordinates array by Geo Json |
toGeoJson($type, $coordinates, $srid=4326) | string (geo json) | returns Geo Json by geometry type, coordinates array and SRID |
toGeometry($type, $coordinates, $srid=4326) | string (sql expression) | the same, that toGeoJson , but wraps result by "ST_GeomFromGeoJSON('$geoJson')" |