src/Doctrine/Type/GeometryType.php line 39

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.         return self::getGenerator()->generate($value);
  23.     }
  24.     /**
  25.      * @param $value
  26.      * @param AbstractPlatform $platform
  27.      * @return mixed|null
  28.      */
  29.     public function convertToPHPValue($valueAbstractPlatform $platform)
  30.     {
  31.         try {
  32.             return self::getParser()->parse($value);
  33.         } catch (\Exception $e) {
  34.             return null;
  35.         }
  36.     }
  37.     private static function getParser(): Parser
  38.     {
  39.         if (!self::$parser) {
  40.             self::$parser = new Parser(new Factory());
  41.         }
  42.         return self::$parser;
  43.     }
  44.     private static function getGenerator(): Generator
  45.     {
  46.         if (!self::$generator) {
  47.             self::$generator = new Generator(
  48.                 new Extractor(),
  49.                 [
  50.                     'format' => Generator::FORMAT_EWKT,
  51.                     'emit_srid' => true,
  52.                 ]
  53.             );
  54.         }
  55.         return self::$generator;
  56.     }
  57. }