/** * @param Geometry $geometry * * @return \GEOSGeometry */ private function toGEOS(Geometry $geometry) { if ($geometry->isEmpty()) { $geosGeometry = $this->wktReader->read($geometry->asText()); $geosGeometry->setSRID($geometry->SRID()); return $geosGeometry; } if ($this->hasBinaryReadWrite) { return $this->wkbReader->read($this->ewkbWriter->write($geometry)); } return $this->wkbReader->readHEX(bin2hex($this->ewkbWriter->write($geometry))); }
public function geos() { // If it's already been set, just return it if ($this->geos && FOX_geo::geosInstalled()) { return $this->geos; } // It hasn't been set yet, generate it if (FOX_geo::geosInstalled()) { $reader = new GEOSWKBReader(); $this->geos = $reader->readHEX($this->out('wkb', true)); } else { $this->geos = false; } return $this->geos; }
public function testWKBReader_readHEX() { $reader = new GEOSWKBReader(); $writer = new GEOSWKTWriter(); $writer->setTrim(TRUE); $writer->setOutputDimension(3); // 2D LITTLE endian $g = $reader->readHEX('010100000000000000000018400000000000001C40'); $this->assertEquals('POINT (6 7)', $writer->write($g)); $this->assertEquals(0, $g->getSRID()); // 2D BIG endian $g = $reader->readHEX('00000000014018000000000000401C000000000000'); $this->assertEquals('POINT (6 7)', $writer->write($g)); $this->assertEquals(0, $g->getSRID()); // 2D LITTLE endian + SRID $g = $reader->readHEX('01010000202B00000000000000000018400000000000001C40'); $this->assertEquals('POINT (6 7)', $writer->write($g)); $this->assertEquals(43, $g->getSRID()); // 2D BIG endian + SRID $g = $reader->readHEX('00200000010000002B4018000000000000401C000000000000'); $this->assertEquals('POINT (6 7)', $writer->write($g)); $this->assertEquals(43, $g->getSRID()); // 3D LITTLE endian $g = $reader->readHEX('010100008000000000000018400000000000001C400000000000002040'); $this->assertEquals('POINT Z (6 7 8)', $writer->write($g)); $this->assertEquals(0, $g->getSRID()); // 3D BIG endian $g = $reader->readHEX('00800000014018000000000000401C0000000000004020000000000000'); $this->assertEquals('POINT Z (6 7 8)', $writer->write($g)); $this->assertEquals(0, $g->getSRID()); // 3D BIG endian + SRID $g = $reader->readHEX('00A0000001000000354018000000000000401C0000000000004020000000000000'); $this->assertEquals('POINT Z (6 7 8)', $writer->write($g)); $this->assertEquals(53, $g->getSRID()); }
public function geos() { // If it's already been set, just return it if ($this->geos && geoPHP::geosInstalled()) { return $this->geos; } // It hasn't been set yet, generate it if (geoPHP::geosInstalled()) { $reader = new GEOSWKBReader(); $this->geos = $reader->readHEX($this->out('wkb', TRUE)); } else { $this->geos = FALSE; } return $this->geos; }