read($wkb); // If there is an SRID, add it to the geometry if ($srid) { $geom->setSRID($srid); } return $geom; } /** * Serialize geometries into an EWKB binary string. * * @param Geometry $geometry * * @return string The Extended-WKB binary string representation of the input geometries */ public function write(Geometry $geometry, $write_as_hex = FALSE) { // We always write into NDR (little endian) $wkb = pack('c',1); switch ($geometry->getGeomType()) { case 'Point'; $wkb .= pack('L',1); $wkb .= $this->writePoint($geometry); break; case 'LineString'; $wkb .= pack('L',2); $wkb .= $this->writeLineString($geometry); break; case 'Polygon'; $wkb .= pack('L',3); $wkb .= $this->writePolygon($geometry); break; case 'MultiPoint'; $wkb .= pack('L',4); $wkb .= $this->writeMulti($geometry); break; case 'MultiLineString'; $wkb .= pack('L',5); $wkb .= $this->writeMulti($geometry); break; case 'MultiPolygon'; $wkb .= pack('L',6); $wkb .= $this->writeMulti($geometry); break; case 'GeometryCollection'; $wkb .= pack('L',7); $wkb .= $this->writeMulti($geometry); break; } if ($write_as_hex) { $unpacked = unpack('H*',$wkb); return $unpacked[1]; } else { return $wkb; } } }