src/Doctrine/Type/GeometryType.php line 43

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Slivki\Doctrine\Type;
  4. use Doctrine\DBAL\Platforms\AbstractPlatform;
  5. use GeoIO\Geometry\Extractor;
  6. use GeoIO\Geometry\Factory;
  7. use GeoIO\WKT\Generator\Generator;
  8. use GeoIO\WKT\Parser\Parser;
  9. use Jsor\Doctrine\PostGIS\Types\GeometryType as BaseGeometryType;
  10. class GeometryType extends BaseGeometryType
  11. {
  12.     /**
  13.      * @var Parser
  14.      */
  15.     private static $parser;
  16.     /**
  17.      * @var Generator
  18.      */
  19.     private static $generator;
  20.     public function convertToDatabaseValue($valueAbstractPlatform $platform): ?string
  21.     {
  22.         if ($value === null) {
  23.             return null;
  24.         }
  25.         return self::getGenerator()->generate($value);
  26.     }
  27.     /**
  28.      * @param $value
  29.      * @param AbstractPlatform $platform
  30.      * @return mixed|null
  31.      */
  32.     public function convertToPHPValue($valueAbstractPlatform $platform)
  33.     {
  34.         try {
  35.             return self::getParser()->parse($value);
  36.         } catch (\Exception $e) {
  37.             return null;
  38.         }
  39.     }
  40.     private static function getParser(): Parser
  41.     {
  42.         if (!self::$parser) {
  43.             self::$parser = new Parser(new Factory());
  44.         }
  45.         return self::$parser;
  46.     }
  47.     private static function getGenerator(): Generator
  48.     {
  49.         if (!self::$generator) {
  50.             self::$generator = new Generator(
  51.                 new Extractor(),
  52.                 [
  53.                     'format' => Generator::FORMAT_EWKT,
  54.                     'emit_srid' => true,
  55.                 ]
  56.             );
  57.         }
  58.         return self::$generator;
  59.     }
  60. }