我正在使用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对象。
答案 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