Yii2 Postgis
Extension for working with Postgis. As intermediate format used Geo Json., (*1)
Installing
The preferred way to install this extension is through Composer., (*2)
{
"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., (*3)
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, (*4)
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., (*5)
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, (*6)
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')"
|