nanson / yii2-postgis
Yii2-extension to work with postgis data
Installs: 43 325
Dependents: 0
Suggesters: 0
Security: 0
Stars: 18
Watchers: 4
Forks: 7
Open Issues: 1
Type:yii2-extension
Requires
- yiisoft/yii2: *
This package is not auto-updated.
Last update: 2025-03-15 20:01:48 UTC
README
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')" |