public function testFindByLineString() { $lineString = new LineString(array(new Point(0, 0), new Point(1, 1), new Point(2, 2))); $entity = new LineStringEntity(); $entity->setLineString($lineString); $this->getEntityManager()->persist($entity); $this->getEntityManager()->flush(); $this->getEntityManager()->clear(); $result = $this->getEntityManager()->getRepository(self::LINESTRING_ENTITY)->findByLineString($lineString); $this->assertEquals($entity, $result[0]); }
/** * @group geometry */ public function testGLengthWhereParameter() { $entity = new LineStringEntity(); $entity->setLineString(new LineString(array(new Point(0, 0), new Point(1, 1), new Point(2, 2)))); $this->getEntityManager()->persist($entity); $this->getEntityManager()->flush(); $this->getEntityManager()->clear(); $query = $this->getEntityManager()->createQuery('SELECT l FROM CrEOF\\Spatial\\Tests\\Fixtures\\LineStringEntity l WHERE GLength(GeomFromText(:p1)) > GLength(l.lineString)'); $query->setParameter('p1', 'LINESTRING(0 0,1 1,2 2,3 3,4 4,5 5)', 'string'); $result = $query->getResult(); $this->assertCount(1, $result); $this->assertEquals($entity, $result[0]); }
/** * @group geometry */ public function testSTLengthWhereParameter() { $lineString = new LineString(array(new Point(0, 0), new Point(1, 1), new Point(2, 2), new Point(3, 3))); $entity = new LineStringEntity(); $entity->setLineString(new LineString(array(new Point(0, 0), new Point(1, 1), new Point(2, 2)))); $this->_em->persist($entity); $this->_em->flush(); $this->_em->clear(); $query = $this->_em->createQuery('SELECT l FROM CrEOF\\Spatial\\Tests\\Fixtures\\LineStringEntity l WHERE ST_Length(ST_GeomFromText(:p1)) > ST_Length(l.lineString)'); $query->setParameter('p1', $lineString, 'linestring'); $result = $query->getResult(); $this->assertCount(1, $result); $this->assertEquals($entity, $result[0]); }
public function testGLengthWhereParameter() { if ($this->getPlatform()->getName() == 'postgresql') { $this->markTestSkipped('Function not supported on postgresql.'); } $lineString = new LineString(array(new Point(0, 0), new Point(1, 1), new Point(2, 2), new Point(3, 3), new Point(4, 4), new Point(5, 5))); $entity = new LineStringEntity(); $entity->setLineString(new LineString(array(new Point(0, 0), new Point(1, 1), new Point(2, 2)))); $this->_em->persist($entity); $this->_em->flush(); $this->_em->clear(); $query = $this->_em->createQuery('SELECT l FROM CrEOF\\Spatial\\Tests\\Fixtures\\LineStringEntity l WHERE GLength(GeomFromText(:p1)) > GLength(l.lineString)'); $query->setParameter('p1', $lineString, 'linestring'); $result = $query->getResult(); $this->assertCount(1, $result); $this->assertEquals($entity, $result[0]); }
/** * @group geometry */ public function testAsText() { $lineString1 = array(new Point(0, 0), new Point(2, 2), new Point(5, 5)); $lineString2 = array(new Point(3, 3), new Point(4, 15), new Point(5, 22)); $entity1 = new LineStringEntity(); $entity1->setLineString(new LineString($lineString1)); $this->getEntityManager()->persist($entity1); $entity2 = new LineStringEntity(); $entity2->setLineString(new LineString($lineString2)); $this->getEntityManager()->persist($entity2); $this->getEntityManager()->flush(); $this->getEntityManager()->clear(); $query = $this->getEntityManager()->createQuery('SELECT AsText(l.lineString) FROM CrEOF\\Spatial\\Tests\\Fixtures\\LineStringEntity l'); $result = $query->getResult(); $this->assertEquals('LINESTRING(0 0,2 2,5 5)', $result[0][1]); $this->assertEquals('LINESTRING(3 3,4 15,5 22)', $result[1][1]); }
/** * @group geometry */ public function testSTAsBinary() { $lineString1 = array(new Point(0, 0), new Point(2, 2), new Point(5, 5)); $lineString2 = array(new Point(3, 3), new Point(4, 15), new Point(5, 22)); $entity1 = new LineStringEntity(); $entity1->setLineString(new LineString($lineString1)); $this->getEntityManager()->persist($entity1); $entity2 = new LineStringEntity(); $entity2->setLineString(new LineString($lineString2)); $this->getEntityManager()->persist($entity2); $this->getEntityManager()->flush(); $this->getEntityManager()->clear(); $query = $this->getEntityManager()->createQuery('SELECT ST_AsBinary(l.lineString) FROM CrEOF\\Spatial\\Tests\\Fixtures\\LineStringEntity l'); $result = $query->getResult(); $this->assertEquals('010200000003000000000000000000000000000000000000000000000000000040000000000000004000000000000014400000000000001440', bin2hex(Utils::toBinary(stream_get_contents($result[0][1])))); $this->assertEquals('0102000000030000000000000000000840000000000000084000000000000010400000000000002e4000000000000014400000000000003640', bin2hex(Utils::toBinary(stream_get_contents($result[1][1])))); }
public function testAsText() { if ($this->getPlatform()->getName() == 'postgresql') { $this->markTestSkipped('Function not supported on postgresql.'); } $lineString1 = array(new Point(0, 0), new Point(2, 2), new Point(5, 5)); $lineString2 = array(new Point(3, 3), new Point(4, 15), new Point(5, 22)); $entity1 = new LineStringEntity(); $entity1->setLineString(new LineString($lineString1)); $this->_em->persist($entity1); $entity2 = new LineStringEntity(); $entity2->setLineString(new LineString($lineString2)); $this->_em->persist($entity2); $this->_em->flush(); $this->_em->clear(); $query = $this->_em->createQuery('SELECT AsText(l.lineString) FROM CrEOF\\Spatial\\Tests\\Fixtures\\LineStringEntity l'); $result = $query->getResult(); $this->assertEquals('LINESTRING(0 0,2 2,5 5)', $result[0][1]); $this->assertEquals('LINESTRING(3 3,4 15,5 22)', $result[1][1]); }
public function testSTAsBinary() { if ($this->getPlatform()->getName() == 'mysql') { $this->markTestSkipped('Function not supported on mssql.'); } $lineString1 = array(new Point(0, 0), new Point(2, 2), new Point(5, 5)); $lineString2 = array(new Point(3, 3), new Point(4, 15), new Point(5, 22)); $entity1 = new LineStringEntity(); $entity1->setLineString(new LineString($lineString1)); $this->_em->persist($entity1); $entity2 = new LineStringEntity(); $entity2->setLineString(new LineString($lineString2)); $this->_em->persist($entity2); $this->_em->flush(); $this->_em->clear(); $query = $this->_em->createQuery('SELECT ST_AsBinary(l.lineString) FROM CrEOF\\Spatial\\Tests\\Fixtures\\LineStringEntity l'); $result = $query->getResult(); $this->assertEquals('010200000003000000000000000000000000000000000000000000000000000040000000000000004000000000000014400000000000001440', bin2hex(stream_get_contents($result[0][1]))); $this->assertEquals('0102000000030000000000000000000840000000000000084000000000000010400000000000002e4000000000000014400000000000003640', bin2hex(stream_get_contents($result[1][1]))); }
/** * @group geometry */ public function testAsBinary() { $lineString1 = array(new Point(0, 0), new Point(2, 2), new Point(5, 5)); $lineString2 = array(new Point(3, 3), new Point(4, 15), new Point(5, 22)); $entity1 = new LineStringEntity(); $entity1->setLineString(new LineString($lineString1)); $this->getEntityManager()->persist($entity1); $entity2 = new LineStringEntity(); $entity2->setLineString(new LineString($lineString2)); $this->getEntityManager()->persist($entity2); $this->getEntityManager()->flush(); $this->getEntityManager()->clear(); $query = $this->getEntityManager()->createQuery('SELECT AsBinary(l.lineString) FROM CrEOF\\Spatial\\Tests\\Fixtures\\LineStringEntity l'); $result = $query->getResult(); $string1 = '010200000003000000000000000000000000000000000000000000000000000040000000000000004000000000000014400000000000001440'; $string2 = '0102000000030000000000000000000840000000000000084000000000000010400000000000002e4000000000000014400000000000003640'; $binary1 = pack('H*', $string1); $binary2 = pack('H*', $string2); $this->assertEquals($binary1, $result[0][1]); $this->assertEquals($binary2, $result[1][1]); }
/** * @group geometry */ public function testGeometryWalkerText() { $lineString1 = new LineString(array(new Point(0, 0), new Point(2, 2), new Point(5, 5))); $lineString2 = new LineString(array(new Point(3, 3), new Point(4, 15), new Point(5, 22))); $entity1 = new LineStringEntity(); $entity1->setLineString($lineString1); $this->getEntityManager()->persist($entity1); $entity2 = new LineStringEntity(); $entity2->setLineString($lineString2); $this->getEntityManager()->persist($entity2); $this->getEntityManager()->flush(); $this->getEntityManager()->clear(); switch ($this->getPlatform()->getName()) { case 'mysql': $asText = 'AsText'; $startPoint = 'StartPoint'; $envelope = 'Envelope'; break; default: $asText = 'ST_AsText'; $startPoint = 'ST_StartPoint'; $envelope = 'ST_Envelope'; break; } $queryString = sprintf('SELECT %s(%s(l.lineString)) FROM CrEOF\\Spatial\\Tests\\Fixtures\\LineStringEntity l', $asText, $startPoint); $query = $this->getEntityManager()->createQuery($queryString); $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, 'CrEOF\\Spatial\\ORM\\Query\\GeometryWalker'); $result = $query->getResult(); $this->assertEquals(new Point(0, 0), $result[0][1]); $this->assertEquals(new Point(3, 3), $result[1][1]); $queryString = sprintf('SELECT %s(%s(l.lineString)) FROM CrEOF\\Spatial\\Tests\\Fixtures\\LineStringEntity l', $asText, $envelope); $query = $this->getEntityManager()->createQuery($queryString); $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, 'CrEOF\\Spatial\\ORM\\Query\\GeometryWalker'); $result = $query->getResult(); $this->assertInstanceOf('CrEOF\\Spatial\\PHP\\Types\\Geometry\\Polygon', $result[0][1]); $this->assertInstanceOf('CrEOF\\Spatial\\PHP\\Types\\Geometry\\Polygon', $result[1][1]); }
/** * @group geometry */ public function testSTLineCrossingDirectionWhereParameter() { $lineString1 = new LineString(array(new Point(8, 15), new Point(4, 8))); $lineString2 = new LineString(array(new Point(12, 14), new Point(3, 4))); $lineString3 = new LineString(array(new Point(2, 5), new Point(3, 6), new Point(12, 8), new Point(10, 10), new Point(13, 11))); $entity1 = new LineStringEntity(); $entity1->setLineString($lineString1); $this->getEntityManager()->persist($entity1); $entity2 = new LineStringEntity(); $entity2->setLineString($lineString2); $this->getEntityManager()->persist($entity2); $entity3 = new LineStringEntity(); $entity3->setLineString($lineString3); $this->getEntityManager()->persist($entity3); $this->getEntityManager()->flush(); $this->getEntityManager()->clear(); $query = $this->getEntityManager()->createQuery('SELECT l FROM CrEOF\\Spatial\\Tests\\Fixtures\\LineStringEntity l WHERE ST_LineCrossingDirection(l.lineString, ST_GeomFromText(:p1)) = 1'); $query->setParameter('p1', 'LINESTRING(12 6,5 11,8 12,5 15)', 'string'); $result = $query->getResult(); $this->assertCount(1, $result); $this->assertEquals($entity2, $result[0]); }
/** * @group geometry */ public function testSTStartPointWhereCompareLineString() { $lineString1 = new LineString(array(new Point(0, 0), new Point(2, 2), new Point(5, 5))); $lineString2 = new LineString(array(new Point(3, 3), new Point(4, 15), new Point(5, 22))); $entity1 = new LineStringEntity(); $entity1->setLineString($lineString1); $this->getEntityManager()->persist($entity1); $entity2 = new LineStringEntity(); $entity2->setLineString($lineString2); $this->getEntityManager()->persist($entity2); $this->getEntityManager()->flush(); $this->getEntityManager()->clear(); $query = $this->getEntityManager()->createQuery('SELECT l FROM CrEOF\\Spatial\\Tests\\Fixtures\\LineStringEntity l WHERE ST_StartPoint(l.lineString) = ST_StartPoint(ST_GeomFromText(:p1))'); $query->setParameter('p1', 'LINESTRING(3 3, 4 15, 5 22)', 'string'); $result = $query->getResult(); $this->assertCount(1, $result); $this->assertEquals($entity2, $result[0]); }
public function testSTStartPointWhereCompareLineString() { if ($this->getPlatform()->getName() == 'mysql') { $this->markTestSkipped('Function not supported on mssql.'); } $lineString1 = new LineString(array(new Point(0, 0), new Point(2, 2), new Point(5, 5))); $lineString2 = new LineString(array(new Point(3, 3), new Point(4, 15), new Point(5, 22))); $entity1 = new LineStringEntity(); $entity1->setLineString($lineString1); $this->_em->persist($entity1); $entity2 = new LineStringEntity(); $entity2->setLineString($lineString2); $this->_em->persist($entity2); $this->_em->flush(); $this->_em->clear(); $query = $this->_em->createQuery('SELECT l FROM CrEOF\\Spatial\\Tests\\Fixtures\\LineStringEntity l WHERE ST_StartPoint(l.lineString) = ST_StartPoint(ST_GeomFromText(:p1))'); $query->setParameter('p1', $lineString2, 'linestring'); $result = $query->getResult(); $this->assertCount(1, $result); $this->assertEquals($entity2, $result[0]); }
/** * @group postgresql * @group geometry */ public function testGeometryWalkerTextPostgreSql() { $lineString1 = new LineString(array(new Point(0, 0), new Point(2, 2), new Point(5, 5))); $lineString2 = new LineString(array(new Point(3, 3), new Point(4, 15), new Point(5, 22))); $entity1 = new LineStringEntity(); $entity1->setLineString($lineString1); $this->_em->persist($entity1); $entity2 = new LineStringEntity(); $entity2->setLineString($lineString2); $this->_em->persist($entity2); $this->_em->flush(); $this->_em->clear(); $query = $this->_em->createQuery('SELECT ST_AsText(ST_StartPoint(l.lineString)) FROM CrEOF\\Spatial\\Tests\\Fixtures\\LineStringEntity l'); $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, 'CrEOF\\Spatial\\ORM\\Query\\GeometryWalker'); $result = $query->getResult(); $this->assertEquals(new Point(0, 0), $result[0][1]); $this->assertEquals(new Point(3, 3), $result[1][1]); $query = $this->_em->createQuery('SELECT ST_AsText(ST_Envelope(l.lineString)) FROM CrEOF\\Spatial\\Tests\\Fixtures\\LineStringEntity l'); $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, 'CrEOF\\Spatial\\ORM\\Query\\GeometryWalker'); $result = $query->getResult(); $this->assertInstanceOf('CrEOF\\Spatial\\PHP\\Types\\Geometry\\Polygon', $result[0][1]); $this->assertInstanceOf('CrEOF\\Spatial\\PHP\\Types\\Geometry\\Polygon', $result[1][1]); }
/** * @group geometry */ public function testSTCrossesWhereParameter() { $lineString1 = new LineString(array(new Point(0, 0), new Point(10, 10))); $lineString2 = new LineString(array(new Point(0, 10), new Point(15, 0))); $lineString3 = new LineString(array(new Point(2, 0), new Point(12, 10))); $entity1 = new LineStringEntity(); $entity1->setLineString($lineString1); $this->getEntityManager()->persist($entity1); $entity2 = new LineStringEntity(); $entity2->setLineString($lineString2); $this->getEntityManager()->persist($entity2); $entity3 = new LineStringEntity(); $entity3->setLineString($lineString3); $this->getEntityManager()->persist($entity3); $this->getEntityManager()->flush(); $this->getEntityManager()->clear(); $query = $this->getEntityManager()->createQuery('SELECT l FROM CrEOF\\Spatial\\Tests\\Fixtures\\LineStringEntity l WHERE ST_Crosses(l.lineString, ST_GeomFromText(:p1)) = true'); $query->setParameter('p1', 'LINESTRING(0 0, 10 10)', 'string'); $result = $query->getResult(); $this->assertCount(1, $result); $this->assertEquals($entity2, $result[0]); $this->getEntityManager()->clear(); $query = $this->getEntityManager()->createQuery('SELECT l FROM CrEOF\\Spatial\\Tests\\Fixtures\\LineStringEntity l WHERE ST_Crosses(l.lineString, ST_GeomFromText(:p1)) = true'); $query->setParameter('p1', 'LINESTRING(2 0, 12 10)', 'string'); $result = $query->getResult(); $this->assertCount(1, $result); $this->assertEquals($entity2, $result[0]); }
public function testSTLineCrossingDirectionWhereParameter() { if ($this->getPlatform()->getName() == 'mysql') { $this->markTestSkipped('Function not supported on mssql.'); } $lineString1 = new LineString(array(new Point(8, 15), new Point(4, 8))); $lineString2 = new LineString(array(new Point(12, 14), new Point(3, 4))); $lineString3 = new LineString(array(new Point(2, 5), new Point(3, 6), new Point(12, 8), new Point(10, 10), new Point(13, 11))); $lineString4 = new LineString(array(new Point(12, 6), new Point(5, 11), new Point(8, 12), new Point(5, 15))); $entity1 = new LineStringEntity(); $entity1->setLineString($lineString1); $this->_em->persist($entity1); $entity2 = new LineStringEntity(); $entity2->setLineString($lineString2); $this->_em->persist($entity2); $entity3 = new LineStringEntity(); $entity3->setLineString($lineString3); $this->_em->persist($entity3); $this->_em->flush(); $this->_em->clear(); $query = $this->_em->createQuery('SELECT l FROM CrEOF\\Spatial\\Tests\\Fixtures\\LineStringEntity l WHERE ST_LineCrossingDirection(l.lineString, ST_GeomFromText(:p1)) = 1'); $query->setParameter('p1', $lineString4, 'linestring'); $result = $query->getResult(); $this->assertCount(1, $result); $this->assertEquals($entity2, $result[0]); }