<?php
declare(strict_types=1);
namespace Slivki\Doctrine\Type;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use GeoIO\Geometry\Extractor;
use GeoIO\Geometry\Factory;
use GeoIO\WKT\Generator\Generator;
use GeoIO\WKT\Parser\Parser;
use Jsor\Doctrine\PostGIS\Types\GeometryType as BaseGeometryType;
class GeometryType extends BaseGeometryType
{
/**
* @var Parser
*/
private static $parser;
/**
* @var Generator
*/
private static $generator;
public function convertToDatabaseValue($value, AbstractPlatform $platform): ?string
{
if ($value === null) {
return null;
}
return self::getGenerator()->generate($value);
}
/**
* @param $value
* @param AbstractPlatform $platform
* @return mixed|null
*/
public function convertToPHPValue($value, AbstractPlatform $platform)
{
try {
return self::getParser()->parse($value);
} catch (\Exception $e) {
return null;
}
}
private static function getParser(): Parser
{
if (!self::$parser) {
self::$parser = new Parser(new Factory());
}
return self::$parser;
}
private static function getGenerator(): Generator
{
if (!self::$generator) {
self::$generator = new Generator(
new Extractor(),
[
'format' => Generator::FORMAT_EWKT,
'emit_srid' => true,
]
);
}
return self::$generator;
}
}