doctrine2-spatial如何使用多行字符串类型

时间:2018-11-12 05:46:04

标签: symfony doctrine-orm doctrine

我正在使用Symfony 4和Doctrine2-Spatial。文档configuration guide说:

  

将所需的类型和功能添加到Symfony配置文件中。教义类型名称未经过硬编码。”

有一个例子:

doctrine:
dbal:
    types:
        geometry:   CrEOF\Spatial\DBAL\Types\GeometryType
        point:      CrEOF\Spatial\DBAL\Types\Geometry\PointType
        polygon:    CrEOF\Spatial\DBAL\Types\Geometry\PolygonType
        linestring: CrEOF\Spatial\DBAL\Types\Geometry\LineStringType

我需要使用 MultiLineString 类型,但是CrEOF\Spatial\DBAL\Types\Geometry\目录中没有此类类型类。我已将 MultiLineStringType LineStringType 类的副本)添加到我的App\Doctrine目录中,并向以下配置添加了一行:

multilinestring: App\Doctrine\MultiLineStringType

然后在我的控制器中执行以下操作:

$parser = new \CrEOF\Geo\WKT\Parser($multilinestring);
$geo = $parser->parse();
$path = new \CrEOF\Spatial\PHP\Types\Geometry\MultiLineString($geo['value']);
$route->setPath($path); // The multilinestring field type

但是当我坚持我的学说实体时,我得到了一个例外

  

几何列值必须实现GeometryInterface

请帮助我。我究竟做错了什么?文档非常差...

UPD::如果我这样通过本机SQL查询放置多行字符串数据:

UPDATE Routes SET Path=PolyFromText(MULTILINESTRING (....)) WHERE Id=1

,然后通过ORM $entity->getPath()获取数据,我得到了一个普通的CrEOF\Spatial\PHP\Types\Geometry\MultiLineString对象。所以我想问题出在我的控制器上,我试图设置MultiLineString对象。

1 个答案:

答案 0 :(得分:0)

您可以更改:

doctrine:
    dbal:
        types:
            geometry:   CrEOF\Spatial\DBAL\Types\GeometryType
            point:      CrEOF\Spatial\DBAL\Types\Geometry\PointType
            polygon:    CrEOF\Spatial\DBAL\Types\Geometry\PolygonType
            linestring: CrEOF\Spatial\DBAL\Types\Geometry\LineStringType

对此:

doctrine:
    dbal:
        types:
            geometry:        CrEOF\Spatial\DBAL\Types\GeometryType
            point:           CrEOF\Spatial\DBAL\Types\Geometry\PointType
            polygon:         CrEOF\Spatial\DBAL\Types\Geometry\PolygonType
            linestring:      CrEOF\Spatial\DBAL\Types\Geometry\LineStringType
            multilinestring: CrEOF\Spatial\DBAL\Types\Geometry\MultiLineStringType